diff --git a/src/main/java/dk/camelot64/kickc/model/Initializers.java b/src/main/java/dk/camelot64/kickc/model/Initializers.java index 26dd118b1..e1aa98ad5 100644 --- a/src/main/java/dk/camelot64/kickc/model/Initializers.java +++ b/src/main/java/dk/camelot64/kickc/model/Initializers.java @@ -1,6 +1,5 @@ package dk.camelot64.kickc.model; -import dk.camelot64.kickc.model.iterator.ProgramValue; import dk.camelot64.kickc.model.operators.Operators; import dk.camelot64.kickc.model.statements.StatementSource; import dk.camelot64.kickc.model.symbols.ArraySpec; @@ -21,240 +20,232 @@ public class Initializers { * @param statementSource The source line * @return The new statement */ - public static RValue createZeroValue(SymbolType type, StatementSource statementSource) { - if(type instanceof SymbolTypeIntegerFixed) { + public static RValue createZeroValue(ValueTypeSpec typeSpec, StatementSource statementSource) { + if(typeSpec.getType() instanceof SymbolTypeIntegerFixed) { // Add an zero value initializer - return new ConstantInteger(0L, type); - } else if(type instanceof SymbolTypePointer) { - // Add an zero value initializer - SymbolTypePointer typePointer = (SymbolTypePointer) type; - return new ConstantPointer(0L, typePointer.getElementType()); - } else if(type instanceof SymbolTypeStruct) { + return new ConstantInteger(0L, typeSpec.getType()); + } else if(typeSpec.getType() instanceof SymbolTypeStruct) { // Add an zero-struct initializer - SymbolTypeStruct typeStruct = (SymbolTypeStruct) type; + SymbolTypeStruct typeStruct = (SymbolTypeStruct) typeSpec.getType(); return new StructZero(typeStruct); + } else if(typeSpec.getType() instanceof SymbolTypePointer) { + SymbolTypePointer typePointer = (SymbolTypePointer) typeSpec.getType(); + if(typeSpec.getArraySpec() == null) { + // Add an zero value initializer + return new ConstantPointer(0L, typePointer.getElementType()); + } else { + // Add an zero-filled array initializer + if(typeSpec.getArraySpec().getArraySize() == null) { + throw new CompileError("Error! Array has no declared size. ", statementSource); + } + return new ConstantArrayFilled(typePointer.getElementType(), typeSpec.getArraySpec().getArraySize()); + } } else { - throw new CompileError("Default initializer not implemented for type " + type.getTypeName(), statementSource); + throw new CompileError("Default initializer not implemented for type " + typeSpec.getType().getTypeName(), statementSource); } } - /** - * Get a value for initializing a variable from an expression. - * If possible the value is converted to a ConstantValue. - * - * @param initValue The parsed init expression value (may be null) - * @param type The type of the constant variable (used for creating zero values) - * @param statementSource The statement (used in exceptions. - * @return The constant init-value. Null if the value cannot be turned into a constant init-value. - */ - public static RValue getInitValue(RValue initValue, SymbolType type, ArraySpec arraySpec, Program program, StatementSource statementSource) { - // TODO: Handle struct members - // Create zero-initializers if null - if(initValue == null) { - if(arraySpec!=null) { - // Add an zero-filled array initializer - SymbolTypePointer typePointer = (SymbolTypePointer) type; - if(arraySpec.getArraySize() == null) { - throw new CompileError("Error! Array has no declared size. ", statementSource); - } - initValue = new ConstantArrayFilled(typePointer.getElementType(), arraySpec.getArraySize()); - } else { - // Add an zero-value - initValue = createZeroValue(type, statementSource); - } + /** Specifies type properties for a value. Holds normal type and array specification. */ + public static class ValueTypeSpec { + + SymbolType type; + + ArraySpec arraySpec; + + public ValueTypeSpec(SymbolType type, ArraySpec arraySpec) { + this.type = type; + this.arraySpec = arraySpec; } - // Convert initializer value lists to constant if possible - if((initValue instanceof ValueList)) { - ProgramValue programValue = new ProgramValue.GenericValue(initValue); - addValueCasts(type, arraySpec!=null, programValue, program, statementSource); - if(programValue.get() instanceof CastValue) { - CastValue castValue = (CastValue) programValue.get(); - if(castValue.getValue() instanceof ValueList) { - // Found value list with cast - look through all elements - ConstantValue constantValue = convertToConstant(castValue.getToType(), (ValueList) castValue.getValue(), program, statementSource); - if(constantValue != null) { - // Converted value list to constant!! - initValue = constantValue; + + public SymbolType getType() { + return type; + } + + public ArraySpec getArraySpec() { + return arraySpec; + } + } + + + /** + * Convert as much as possible of the passed value to a constant. Will convert the entire value if possible. If not all sub-values are converted as possible. + * + * @param initValue The value to convert + * @param typeSpec The specified type of the value (including any array properties) + * @param program The program + * @param source The statement source (for error messages) + * @return The constantified value. A {@link ConstantValue} is possible + */ + public static RValue constantify(RValue initValue, ValueTypeSpec typeSpec, Program program, StatementSource source) { + if(initValue == null) { + // Add an zero-value + initValue = createZeroValue(typeSpec, source); + } else if(initValue instanceof ForwardVariableRef) { + // Do not constantify + } else if(initValue instanceof ValueList) { + ValueList initList = (ValueList) initValue; + if(typeSpec.getType() instanceof SymbolTypePointer && typeSpec.getArraySpec() != null) { + // Type is an array + initValue = constantifyArray(initList, (SymbolTypePointer) typeSpec.getType(), typeSpec.getArraySpec(), program, source); + } else if(typeSpec.getType() instanceof SymbolTypeStruct) { + // Type is a struct + initValue = constantifyStruct(initList, (SymbolTypeStruct) typeSpec.getType(), program, source); + } else if(typeSpec.getType().equals(SymbolType.WORD) && initList.getList().size() == 2) { + // Type is an inline word + initValue = constantifyWord(initList, program, source); + } else if(typeSpec.getType().equals(SymbolType.DWORD) && initList.getList().size() == 2) { + // Type is an inline dword + initValue = constantifyDWord(initList, program, source); + } else { + throw new InternalError("Unknown value list type " + typeSpec.getType()); + } + } else if(SymbolType.isInteger(typeSpec.getType())) { + if(initValue instanceof ConstantInteger) { + Long integer = ((ConstantInteger) initValue).getInteger(); + if(typeSpec.getType() instanceof SymbolTypeIntegerFixed) { + SymbolTypeIntegerFixed typeIntegerFixed = (SymbolTypeIntegerFixed) typeSpec.getType(); + if(!typeIntegerFixed.contains(integer)) { + throw new CompileError( "Constant init-value has a non-matching type \n type: " + typeSpec.getType().toString() +"\n value: " + initValue.toString(), source); } } + initValue = new ConstantInteger(integer, typeSpec.getType()); + } else if(initValue instanceof ConstantValue) { + SymbolType initValueType = ((ConstantValue) initValue).getType(program.getScope()); + if(!initValueType.equals(typeSpec.getType())) + initValue = new ConstantCastValue(typeSpec.getType(), (ConstantValue) initValue); + } else { + SymbolType inferredType = SymbolTypeInference.inferType(program.getScope(), initValue); + if(!inferredType.equals(typeSpec.getType()) && !inferredType.equals(SymbolType.VAR)) { + if(SymbolTypeConversion.assignmentTypeMatch(typeSpec.getType(), inferredType)) + initValue = new CastValue(typeSpec.getType(), initValue); + else + throw new CompileError("ERROR! Type mismatch (" + typeSpec.getType().getTypeName() + ") cannot be assigned from (" + inferredType.getTypeName() + ").", source); + } } } // Add pointer cast to integers - if(type instanceof SymbolTypePointer && initValue instanceof ConstantValue && SymbolType.isInteger(((ConstantValue) initValue).getType(program.getScope()))) { - initValue = new ConstantCastValue(type, (ConstantValue) initValue); + if(typeSpec.getType() instanceof SymbolTypePointer && initValue instanceof ConstantValue && SymbolType.isInteger(((ConstantValue) initValue).getType(program.getScope()))) { + initValue = new ConstantCastValue(typeSpec.getType(), (ConstantValue) initValue); } return initValue; } - /** - * Add casts to a value based on the declared type of the symbol. Recurses to all sub-values. - * - * @param declaredType The declared type of the value - * @param isArray true if the declared variable is an array - * @param programValue The value wrapped in a program value - * @param source The current statement - * @return true if anything was modified - */ - static boolean addValueCasts(SymbolType declaredType, boolean isArray, ProgramValue programValue, Program program, StatementSource source) { - boolean exprModified = false; - Value value = programValue.get(); - if(value instanceof ValueList) { - ValueList valueList = (ValueList) value; - if(declaredType instanceof SymbolTypePointer && isArray) { - SymbolTypePointer declaredArrayType = (SymbolTypePointer) declaredType; - // Recursively cast all sub-elements - SymbolType declaredElmType = declaredArrayType.getElementType(); - int size = valueList.getList().size(); - // TODO: Check declared array size vs. actual size - for(int i = 0; i < size; i++) { - exprModified |= addValueCasts(declaredElmType, false, new ProgramValue.ProgramValueListElement(valueList, i), program, source); - } - // Add a cast to the value list itself - programValue.set(new CastValue(declaredType, valueList)); - } else if(declaredType instanceof SymbolTypeStruct) { - SymbolTypeStruct declaredStructType = (SymbolTypeStruct) declaredType; - // Recursively cast all sub-elements - StructDefinition structDefinition = declaredStructType.getStructDefinition(program.getScope()); - Collection memberDefinitions = structDefinition.getAllVars(false); - int size = memberDefinitions.size(); - if(size != valueList.getList().size()) { - throw new CompileError( - "Struct initializer has wrong size (" + valueList.getList().size() + "), " + - "which does not match the number of members in " + declaredStructType.getTypeName() + " (" + size + " members).\n" + - " Struct initializer: " + valueList.toString(program), - source); - } - Iterator memberDefIt = memberDefinitions.iterator(); - for(int i = 0; i < size; i++) { - Variable memberDef = memberDefIt.next(); - exprModified |= addValueCasts(memberDef.getType(), memberDef.isArray(), new ProgramValue.ProgramValueListElement(valueList, i), program, source); - } - // Add a cast to the value list itself - programValue.set(new CastValue(declaredType, valueList)); - } else if(declaredType.equals(SymbolType.WORD) && valueList.getList().size()==2){ - // An inline word { byte, byte} - for(int i = 0; i < valueList.getList().size(); i++) { - exprModified |= addValueCasts(SymbolType.BYTE, false, new ProgramValue.ProgramValueListElement(valueList, i), program, source); - } - // Add a cast to the value list itself - programValue.set(new CastValue(declaredType, valueList)); - } else if(declaredType.equals(SymbolType.DWORD) && valueList.getList().size()==2){ - // An inline dword { byte, byte} - for(int i = 0; i < valueList.getList().size(); i++) { - exprModified |= addValueCasts(SymbolType.WORD, false, new ProgramValue.ProgramValueListElement(valueList, i), program, source); - } - // Add a cast to the value list itself - programValue.set(new CastValue(declaredType, valueList)); - } else { - // TODO: Handle word/dword initializers - throw new InternalError("Type not handled! " + declaredType); - } - } else { - SymbolType valueType = SymbolTypeInference.inferType(program.getScope(), (RValue) value); - if(SymbolType.NUMBER.equals(valueType) || SymbolType.VAR.equals(valueType)) { - // Check if the value fits. - if(!SymbolTypeConversion.assignmentTypeMatch(declaredType, valueType)) { - throw new CompileError("Declared type " + declaredType + " does not match element type " + valueType, source); - } - // TODO: Test if the value matches the declared type! - // Add a cast to the value - if(value instanceof ConstantValue) { - programValue.set(new ConstantCastValue(declaredType, (ConstantValue) value)); - } else { - programValue.set(new CastValue(declaredType, (RValue) value)); - } - exprModified = true; - } + private static RValue constantifyWord(ValueList valueList, Program program, StatementSource source) { + boolean allConst = true; + List constantifiedList = new ArrayList<>(); + for(RValue elementValue : valueList.getList()) { + RValue constantifiedElement = constantify(elementValue, new ValueTypeSpec(SymbolType.BYTE, null), program, source); + constantifiedList.add(constantifiedElement); + if(!(constantifiedElement instanceof ConstantValue)) + allConst = false; + } + if(allConst) { + ConstantValue hiByte = (ConstantValue) constantifiedList.get(0); + ConstantValue loByte = (ConstantValue) constantifiedList.get(1); + return new ConstantBinary(new ConstantBinary(hiByte, Operators.MULTIPLY, new ConstantInteger(0x100L, SymbolType.WORD)), Operators.PLUS, loByte); + } else { + return new CastValue(SymbolType.WORD, new ValueList(constantifiedList)); + } + } + + private static RValue constantifyDWord(ValueList valueList, Program program, StatementSource source) { + boolean allConst = true; + List constantifiedList = new ArrayList<>(); + for(RValue elementValue : valueList.getList()) { + RValue constantifiedElement = constantify(elementValue, new ValueTypeSpec(SymbolType.WORD, null), program, source); + constantifiedList.add(constantifiedElement); + if(!(constantifiedElement instanceof ConstantValue)) + allConst = false; + } + if(allConst) { + ConstantValue hiWord = (ConstantValue) constantifiedList.get(0); + ConstantValue loWord = (ConstantValue) constantifiedList.get(1); + return new ConstantBinary(new ConstantBinary(hiWord, Operators.MULTIPLY, new ConstantInteger(0x10000L, SymbolType.DWORD)), Operators.PLUS, loWord); + } else { + return new CastValue(SymbolType.DWORD, new ValueList(constantifiedList)); } - return exprModified; } /** - * Convert a value list (with casts) to a constant value of the declared type - if all sub-values are constant. Otherwise returns null. + * Convert as much as possible of a struct to constants. * - * @param declaredType The type of the lvalue - * @param valueList The list of values - * @return The constant value if all list elements are constant. null if elements are not constant + * @param valueList The value list + * @param structType The struct type + * @param program The program + * @param source The source line + * @return The constantified value */ - static ConstantValue convertToConstant(SymbolType declaredType, ValueList valueList, Program program, StatementSource source) { - // Examine whether all list elements are constant - List values = valueList.getList(); - List constantValues = new ArrayList<>(); - for(RValue elmValue : values) { - if(elmValue instanceof ConstantValue) { - ConstantValue constantValue = (ConstantValue) elmValue; - constantValues.add(constantValue); - } else if(elmValue instanceof CastValue) { - // Recursion may be needed - CastValue castValue = (CastValue) elmValue; - if(castValue.getValue() instanceof ValueList) { - ConstantValue constantValue = convertToConstant(castValue.getToType(), (ValueList) castValue.getValue(), program, source); - if(constantValue != null) { - constantValues.add(constantValue); - } else { - // A non-constant was found - exit - return null; - } - } else { - // A non-constant was found - exit - return null; - } - } else { - // A non-constant was found - exit - return null; - } + private static RValue constantifyStruct(ValueList valueList, SymbolTypeStruct structType, Program program, StatementSource source) { + // Recursively cast all sub-elements + StructDefinition structDefinition = structType.getStructDefinition(program.getScope()); + Collection memberDefinitions = structDefinition.getAllVars(false); + int size = memberDefinitions.size(); + if(size != valueList.getList().size()) { + throw new CompileError( + "Struct initializer has wrong size (" + valueList.getList().size() + "), " + + "which does not match the number of members in " + structType.getTypeName() + " (" + size + " members).\n" + + " Struct initializer: " + valueList.toString(program), + source); } - // All elements are constant - convert to constant of declared type - if(declaredType instanceof SymbolTypePointer) { - // Check that type of constant values match the array element type - SymbolType declaredElementType = ((SymbolTypePointer) declaredType).getElementType(); - for(ConstantValue constantValue : constantValues) { - SymbolType elmType = constantValue.getType(program.getScope()); - if(!elmType.equals(declaredElementType)) { - throw new CompileError("Initializer element " + constantValue.toString(program) + " does not match array type " + declaredType.getTypeName(), source); - } - } - // Return the constant array - return new ConstantArrayList(constantValues, declaredElementType); - } else if(declaredType instanceof SymbolTypeStruct) { - // Check that type of constant values match the struct member types - SymbolTypeStruct declaredStructType = (SymbolTypeStruct) declaredType; - StructDefinition structDefinition = declaredStructType.getStructDefinition(program.getScope()); - Collection memberDefs = structDefinition.getAllVars(false); - if(memberDefs.size() != constantValues.size()) { - throw new CompileError( - "Struct initializer has wrong size (" + valueList.getList().size() + "), " + - "which does not match the number of members in " + declaredStructType.getTypeName() + " (\"+size+\" members).\n" + - " Struct initializer: " + valueList.toString(program), - source); - } - Iterator memberDefIt = memberDefs.iterator(); - LinkedHashMap memberValues = new LinkedHashMap<>(); - for(int i = 0; i < constantValues.size(); i++) { - Variable memberDef = memberDefIt.next(); - SymbolType declaredElementType = memberDef.getType(); - ConstantValue memberValue = constantValues.get(i); - SymbolType elmType = memberValue.getType(program.getScope()); - if(!SymbolTypeConversion.assignmentTypeMatch(declaredElementType, elmType)) { - throw new CompileError("Initializer element " + memberValue.toString(program) + " does not match struct member type " + memberDef.toString(program), source); - } - memberValues.put(memberDef.getRef(), memberValue); - } - return new ConstantStructValue(declaredStructType, memberValues); - } else if(declaredType.equals(SymbolType.WORD) && constantValues.size()==2){ - // An inline word - for(ConstantValue constantValue : constantValues) - if(!SymbolTypeConversion.assignmentTypeMatch(SymbolType.BYTE, constantValue.getType(program.getScope()))) - throw new CompileError("Initializer element " + constantValue.toString(program) + " does not match needed type "+SymbolType.BYTE, source); - return new ConstantBinary(new ConstantBinary(constantValues.get(0), Operators.MULTIPLY, new ConstantInteger(0x100L, SymbolType.WORD)), Operators.PLUS, constantValues.get(1)); - } else if(declaredType.equals(SymbolType.DWORD) && constantValues.size()==2){ - // An inline dword - for(ConstantValue constantValue : constantValues) - if(!SymbolTypeConversion.assignmentTypeMatch(SymbolType.WORD, constantValue.getType(program.getScope()))) - throw new CompileError("Initializer element " + constantValue.toString(program) + " does not match needed type "+SymbolType.WORD, source); - return new ConstantBinary(new ConstantBinary(constantValues.get(0), Operators.MULTIPLY, new ConstantInteger(0x10000L, SymbolType.DWORD)), Operators.PLUS, constantValues.get(1)); + + boolean allConst = true; + // Constantified values in a list + List constantifiedList = new ArrayList<>(); + // Map filled if all member values become constant + LinkedHashMap constMemberMap = new LinkedHashMap<>(); + Iterator memberDefIt = memberDefinitions.iterator(); + Iterator valueIt = valueList.getList().iterator(); + for(int i = 0; i < size; i++) { + Variable memberDef = memberDefIt.next(); + RValue memberValue = valueIt.next(); + RValue constantifiedMemberValue = constantify(memberValue, new ValueTypeSpec(memberDef.getType(), memberDef.getArraySpec()), program, source); + constantifiedList.add(constantifiedMemberValue); + if(constantifiedMemberValue instanceof ConstantValue) + constMemberMap.put(memberDef.getRef(), (ConstantValue) constantifiedMemberValue); + else + allConst = false; + } + if(allConst) { + // Constant struct + return new ConstantStructValue(structType, constMemberMap); } else { - throw new InternalError("Not supported " + declaredType); + // Constantified list with a cast + return new CastValue(structType, new ValueList(constantifiedList)); + } + } + + /** + * Convert as much of an array to constant as possible. Also zero-pads the value-list to the declared array length (if possible). + * + * @param valueList The list of values + * @param arrayType The pointer type of the array + * @param arraySpec The array spec holding the array size. + * @param program The program + * @param source The source line + * @return The constantified value + */ + private static RValue constantifyArray(ValueList valueList, SymbolTypePointer arrayType, ArraySpec arraySpec, Program program, StatementSource source) { + SymbolType elementType = arrayType.getElementType(); + // TODO: Handle array of array + ValueTypeSpec elementTypeSpec = new ValueTypeSpec(elementType, null); + boolean allConst = true; + List constantifiedList = new ArrayList<>(); + for(RValue elementValue : valueList.getList()) { + RValue constantifiedElement = constantify(elementValue, elementTypeSpec, program, source); + constantifiedList.add(constantifiedElement); + if(!(constantifiedElement instanceof ConstantValue)) + allConst = false; + } + if(allConst) { + // Convert to ConstantArrayList (throwing away the array size) + ArrayList constElementList = new ArrayList<>(); + for(RValue rValue : constantifiedList) { + constElementList.add((ConstantValue) rValue); + } + return new ConstantArrayList(constElementList, elementType, arraySpec.getArraySize()); + } else { + // Convert to a ValueList with a cast to the pointer-type (throwing away the array size) + return new CastValue(arrayType, new ValueList(constantifiedList)); } } diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInference.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInference.java index ddc3bb741..7199b042c 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInference.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeInference.java @@ -17,6 +17,8 @@ public class SymbolTypeInference { SymbolType type = null; if(rValue instanceof SymbolVariableRef) { Variable variable = symbols.getVar((SymbolVariableRef) rValue); + if(variable==null) + throw new CompileError("Unknown variable "+rValue.toString()); type = variable.getType(); } else if(rValue instanceof Symbol) { Symbol rSymbol = (Symbol) rValue; @@ -47,7 +49,7 @@ public class SymbolTypeInference { } else if(pointerType.equals(SymbolType.STRING)) { return SymbolType.BYTE; } else { - throw new CompileError("Cannot infer pointer element type from type: " + pointerType); + return SymbolType.VAR; } } else if(rValue instanceof ConstantArrayList) { return new SymbolTypePointer(((ConstantArrayList) rValue).getElementType()); diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantArray.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantArray.java index e904ac404..34fde8dab 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantArray.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantArray.java @@ -9,4 +9,6 @@ public interface ConstantArray extends ConstantValue { SymbolType getElementType(); + ConstantValue getSize(); + } diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java index 299b3addc..2772490b1 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayKickAsm.java @@ -22,10 +22,19 @@ public class ConstantArrayKickAsm implements ConstantArray { /** Variables/constants used by the kickasm code. */ private List uses; - public ConstantArrayKickAsm(SymbolType elementType, String kickAsmCode, List uses) { + /** Array size (from declaration) */ + private ConstantValue size; + + public ConstantArrayKickAsm(SymbolType elementType, String kickAsmCode, List uses, ConstantValue size) { this.elementType = elementType; this.kickAsmCode = kickAsmCode; this.uses = uses; + this.size = size; + } + + @Override + public ConstantValue getSize() { + return size; } public List getUses() { diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java index a05acc169..55fbfa1c7 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantArrayList.java @@ -13,13 +13,19 @@ import java.util.List; */ public class ConstantArrayList implements ConstantArray { + /** The element list. */ private List list; + /** Type of the elements. */ private SymbolType elementType; - public ConstantArrayList(List list, SymbolType elementType) { + /** Array size (from declaration) */ + private ConstantValue size; + + public ConstantArrayList(List list, SymbolType elementType, ConstantValue size) { this.list = list; this.elementType = elementType; + this.size = size; } @Override @@ -35,6 +41,15 @@ public class ConstantArrayList implements ConstantArray { return list; } + @Override + public ConstantValue getSize() { + return size; + } + + public void setSize(ConstantValue size) { + this.size = size; + } + @Override public ConstantLiteral calculateLiteral(ProgramScope scope) { throw new ConstantNotLiteral("Cannot calculate literal array"); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index afc04af4a..680394611 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -566,7 +566,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor membersUnwound = new ArrayList<>(); stmtIt.previous(); @@ -223,7 +227,8 @@ public class Pass1UnwindStructValues extends Pass1Base { membersUnwound.add(memberVarRef); StatementSource statementSource = assignment.getSource(); SymbolType memberType = memberUnwinding.getMemberType(memberName); - RValue initValue = Initializers.createZeroValue(memberType, statementSource); + ArraySpec memberArraySpec = memberUnwinding.getArraySpec(memberName); + RValue initValue = Initializers.createZeroValue(new Initializers.ValueTypeSpec(memberType, memberArraySpec), statementSource); Statement initStmt = new StatementAssignment(memberVarRef, initValue, assignment.isInitialAssignment(), statementSource, Comment.NO_COMMENTS); stmtIt.add(initStmt); getLog().append("Adding struct value member variable default initializer " + initStmt.toString(getProgram(), false)); @@ -237,9 +242,9 @@ public class Pass1UnwindStructValues extends Pass1Base { stmtIt.remove(); } return true; - } else if(assignment.getrValue2() instanceof ValueList) { + } else if(rValue instanceof ValueList) { // Initializing struct with a value list - unwind to assigning each member with a value from the list - ValueList valueList = (ValueList) assignment.getrValue2(); + ValueList valueList = (ValueList) rValue; if(memberUnwinding.getMemberNames().size() != valueList.getList().size()) { throw new CompileError("Struct initialization list has wrong size. Need " + memberUnwinding.getMemberNames().size() + " got " + valueList.getList().size(), assignment); } @@ -262,13 +267,13 @@ public class Pass1UnwindStructValues extends Pass1Base { } return true; } else { - if(assignment.getrValue2() instanceof StructUnwoundPlaceholder) + if(rValue instanceof StructUnwoundPlaceholder) return false; SymbolTypeStruct structType = (SymbolTypeStruct) SymbolTypeInference.inferType(getScope(), assignment.getlValue()); - SymbolType sourceType = SymbolTypeInference.inferType(getScope(), assignment.getrValue2()); + SymbolType sourceType = SymbolTypeInference.inferType(getScope(), rValue); if(sourceType.equals(structType)) { // Copying a struct - unwind to assigning each member! - StructUnwinding.StructMemberUnwinding sourceMemberUnwinding = getStructMemberUnwinding(assignment.getrValue2(), assignment, stmtIt, currentBlock); + StructUnwinding.StructMemberUnwinding sourceMemberUnwinding = getStructMemberUnwinding(rValue, assignment, stmtIt, currentBlock); if(sourceMemberUnwinding == null) { throw new CompileError("Incompatible struct assignment " + assignment.toString(getProgram(), false), assignment); } else if(sourceMemberUnwinding == POSTPONE_UNWINDING) { diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index cb899e0b3..de7b276aa 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -432,6 +432,7 @@ public class TestPrograms { @Test public void testFunctionAsArray() throws IOException, URISyntaxException { + compileAndCompare("function-as-array", log().verboseParse().verboseCreateSsa()); assertError("function-as-array", "Cannot infer pointer element type from type: void()"); } @@ -502,7 +503,7 @@ public class TestPrograms { @Test public void testCastError() throws IOException, URISyntaxException { - assertError("cast-error", "Cannot infer pointer element type from type"); + assertError("cast-error", "cannot be assigned from"); } @Test @@ -3422,7 +3423,7 @@ public class TestPrograms { @Test public void testInvalidConstType() throws IOException, URISyntaxException { - assertError("invalid-consttype", "Constant variable has a non-matching type", false); + assertError("invalid-consttype", "Constant init-value has a non-matching type", false); } @Test diff --git a/src/test/kc/complex/tetris/tetris-pieces.kc b/src/test/kc/complex/tetris/tetris-pieces.kc index 1d9fc6dbe..aa34a0ba6 100644 --- a/src/test/kc/complex/tetris/tetris-pieces.kc +++ b/src/test/kc/complex/tetris/tetris-pieces.kc @@ -2,7 +2,7 @@ // The tetris pieces // The T-piece -align(0x40) char[4*4*4] PIECE_T = { +align(0x40) char[64] PIECE_T = { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, @@ -25,7 +25,7 @@ align(0x40) char[4*4*4] PIECE_T = { }; // The S-piece -align(0x40) char[4*4*4] PIECE_S = { +align(0x40) char[64] PIECE_S = { 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, @@ -49,7 +49,7 @@ align(0x40) char[4*4*4] PIECE_S = { }; // The Z-piece -align(0x40) char[4*4*4] PIECE_Z = { +align(0x40) char[64] PIECE_Z = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, @@ -73,7 +73,7 @@ align(0x40) char[4*4*4] PIECE_Z = { }; // The L-piece -align(0x40) char[4*4*4] PIECE_L = { +align(0x40) char[64] PIECE_L = { 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, @@ -97,7 +97,7 @@ align(0x40) char[4*4*4] PIECE_L = { }; // The J-piece -align(0x40) char[4*4*4] PIECE_J = { +align(0x40) char[64] PIECE_J = { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, @@ -121,7 +121,7 @@ align(0x40) char[4*4*4] PIECE_J = { }; // The O-piece -align(0x40) char[4*4*4] PIECE_O = { +align(0x40) char[64] PIECE_O = { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, @@ -145,7 +145,7 @@ align(0x40) char[4*4*4] PIECE_O = { }; // The I-piece -align(0x40) char[4*4*4] PIECE_I = { +align(0x40) char[64] PIECE_I = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, diff --git a/src/test/kc/complex/tetris/tetris-render.kc b/src/test/kc/complex/tetris/tetris-render.kc index 53efc6ea2..651a29395 100644 --- a/src/test/kc/complex/tetris/tetris-render.kc +++ b/src/test/kc/complex/tetris/tetris-render.kc @@ -3,6 +3,7 @@ // Also handles double buffering import "tetris-data" +import "tetris-pieces" kickasm(pc PLAYFIELD_CHARSET, resource "playfield-screen.imap") {{ .fill 8,$00 // Place a filled char at the start of the charset diff --git a/src/test/kc/function-as-array.kc b/src/test/kc/function-as-array.kc index b305e65f7..477e0e757 100644 --- a/src/test/kc/function-as-array.kc +++ b/src/test/kc/function-as-array.kc @@ -1,5 +1,5 @@ // Tests treating a function like an array -// Should produce an +// Should produce an error // https://gitlab.com/camelot/kickc/issues/276 void main() { diff --git a/src/test/kc/nes-array.kc b/src/test/kc/nes-array.kc index 4b121932d..4a55180eb 100644 --- a/src/test/kc/nes-array.kc +++ b/src/test/kc/nes-array.kc @@ -1,7 +1,7 @@ // Test a bit of array code from the NES forum // https://forums.nesdev.com/viewtopic.php?f=2&t=18735 -int[4] wow = { 0xCAFE, 0xBABE, 0x1234, 0x5678}; +int[4] wow = { (int)0xCAFE, (int)0xBABE, 0x1234, 0x5678}; int foo(unsigned char x, int *y) { return wow[x] + *y; diff --git a/src/test/kc/screen-show-spiral-buckets.kc b/src/test/kc/screen-show-spiral-buckets.kc index a504c987e..8bb7a75e0 100644 --- a/src/test/kc/screen-show-spiral-buckets.kc +++ b/src/test/kc/screen-show-spiral-buckets.kc @@ -16,6 +16,22 @@ const byte* SCREEN_FILL = 0x0400; // Char to fill with const byte FILL_CHAR = '*'; +// The number of buckets in our bucket sort +const byte NUM_BUCKETS = 0x30; + +// Array containing the bucket size for each of the distance buckets +byte* BUCKET_SIZES = malloc(NUM_BUCKETS*sizeof(byte)); + +// Buckets containing screen indices for each distance from the center. +// BUCKETS[dist] is an array of words containing screen indices. +// The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] +word** BUCKETS = malloc(NUM_BUCKETS*sizeof(word*)); + +// Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) +byte* BUCKET_IDX = malloc(NUM_BUCKETS*sizeof(byte)); + + + void main() { asm { sei } init_dist_screen(SCREEN_DIST); @@ -66,20 +82,6 @@ void main() { (*(COLS+999))++; } -// The number of buckets in our bucket sort -const byte NUM_BUCKETS = 0x30; - -// Array containing the bucket size for each of the distance buckets -byte* BUCKET_SIZES = malloc(NUM_BUCKETS*sizeof(byte)); - -// Buckets containing screen indices for each distance from the center. -// BUCKETS[dist] is an array of words containing screen indices. -// The size of the array BUCKETS[dist] is BUCKET_SIZES[dist] -word** BUCKETS = malloc(NUM_BUCKETS*sizeof(word*)); - -// Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes) -byte* BUCKET_IDX = malloc(NUM_BUCKETS*sizeof(byte)); - // Initialize buckets containing indices of chars on the screen with specific distances to the center. void init_buckets(byte* screen) { // Init bucket sizes to 0 diff --git a/src/test/kc/textbox.kc b/src/test/kc/textbox.kc index 9c245a6ea..37bde0af2 100644 --- a/src/test/kc/textbox.kc +++ b/src/test/kc/textbox.kc @@ -20,7 +20,7 @@ void textbox(byte x1, byte y1, byte x2, byte y2, byte* text) { draw_window(x1, y1, x2, y2); byte y = y1+1; byte x = x1+1; - word z = y*40; + word z = (word)y*40; byte i = 0; if (x == x2 || y == y2) { // no room to draw text, simply return diff --git a/src/test/ref/address-0.log b/src/test/ref/address-0.log index d1f60f7f5..199f28714 100644 --- a/src/test/ref/address-0.log +++ b/src/test/ref/address-0.log @@ -5,7 +5,7 @@ Culled Empty Block (label) main::@6 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i ← (number) 3 + (byte) i ← (byte) 3 to:@1 (void()) main() @@ -42,16 +42,11 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 3 in (byte) i ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) i < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) i<(byte) 7) goto main::@2 diff --git a/src/test/ref/address-1.log b/src/test/ref/address-1.log index d7275d413..8a4a52b50 100644 --- a/src/test/ref/address-1.log +++ b/src/test/ref/address-1.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i ← (number) 3 + (byte) main::i ← (byte) 3 to:main::@1 main::@1: scope:[main] from main main::@2 (bool~) main::$0 ← (byte) main::i < (number) 7 @@ -42,16 +42,11 @@ SYMBOL TABLE SSA (label) main::@return (byte) main::i loadstore !zp[-1]:2 -Adding number conversion cast (unumber) 3 in (byte) main::i ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) main::i < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) main::i<(byte) 7) goto main::@2 diff --git a/src/test/ref/address-2.log b/src/test/ref/address-2.log index f7b3202c3..eb7bbc086 100644 --- a/src/test/ref/address-2.log +++ b/src/test/ref/address-2.log @@ -5,7 +5,7 @@ Culled Empty Block (label) main::@6 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i ← (number) 3 + (byte) i ← (byte) 3 to:@1 (void()) main() @@ -42,16 +42,11 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 3 in (byte) i ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) i < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) i<(byte) 7) goto main::@2 diff --git a/src/test/ref/address-3.log b/src/test/ref/address-3.log index 59daabe64..1aadd2dda 100644 --- a/src/test/ref/address-3.log +++ b/src/test/ref/address-3.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i ← (number) 3 + (byte) main::i ← (byte) 3 to:main::@1 main::@1: scope:[main] from main main::@2 (bool~) main::$0 ← (byte) main::i < (number) 7 @@ -42,16 +42,11 @@ SYMBOL TABLE SSA (label) main::@return (byte) main::i loadstore !mem[-1]:8192 -Adding number conversion cast (unumber) 3 in (byte) main::i ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) main::i < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) main::i<(byte) 7) goto main::@2 diff --git a/src/test/ref/address-4.log b/src/test/ref/address-4.log index bf993b8e7..56d225219 100644 --- a/src/test/ref/address-4.log +++ b/src/test/ref/address-4.log @@ -12,7 +12,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i ← (number) 0 + (byte) main::i ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (bool~) main::$0 ← (byte) main::i < (number) 8 @@ -50,19 +50,14 @@ SYMBOL TABLE SSA (label) main::@1 (label) main::@2 (label) main::@return -(const word) main::ch = (number) $102 +(const word) main::ch = (word) $102 (byte) main::i loadstore !zp[-1]:2 -Adding number conversion cast (unumber) 0 in (byte) main::i ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) main::$0 ← (byte) main::i < (number) 8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) main::i<(byte) 8) goto main::@2 @@ -332,7 +327,7 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@return -(const word) main::ch = (number) $102 +(const word) main::ch = (word) $102 (byte) main::i loadstore !zp[-1]:2 zp[1]:2 19.75 zp[1]:2 [ main::i ] diff --git a/src/test/ref/address-4.sym b/src/test/ref/address-4.sym index ade90db4d..8def5d014 100644 --- a/src/test/ref/address-4.sym +++ b/src/test/ref/address-4.sym @@ -8,7 +8,7 @@ (label) main::@1 (label) main::@2 (label) main::@return -(const word) main::ch = (number) $102 +(const word) main::ch = (word) $102 (byte) main::i loadstore !zp[-1]:2 zp[1]:2 19.75 zp[1]:2 [ main::i ] diff --git a/src/test/ref/address-of-1.log b/src/test/ref/address-of-1.log index 497fd0719..06313c6b2 100644 --- a/src/test/ref/address-of-1.log +++ b/src/test/ref/address-of-1.log @@ -10,9 +10,9 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - (byte) main::b1#0 ← (number) 0 - (byte) main::b2#0 ← (number) 0 - (byte) main::b3#0 ← (number) 0 + (byte) main::b1#0 ← (byte) 0 + (byte) main::b2#0 ← (byte) 0 + (byte) main::b3#0 ← (byte) 0 (byte*) setByte::ptr#0 ← &(byte) main::b1#0 (byte) setByte::b#0 ← (byte) 'c' call setByte @@ -100,29 +100,16 @@ SYMBOL TABLE SSA (byte*) setByte::ptr#2 (byte*) setByte::ptr#3 -Adding number conversion cast (unumber) 0 in (byte) main::b1#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b3#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (byte) main::b1#1 Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (byte) main::b2#2 Adding number conversion cast (unumber) 2 in *((const byte*) main::SCREEN + (number) 2) ← (byte) main::b3#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::b1#0 ← (unumber)(number) 0 -Inlining cast (byte) main::b2#0 ← (unumber)(number) 0 -Inlining cast (byte) main::b3#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/address-of-2.log b/src/test/ref/address-of-2.log index b14672df5..ab7eda0c9 100644 --- a/src/test/ref/address-of-2.log +++ b/src/test/ref/address-of-2.log @@ -5,13 +5,13 @@ Culled Empty Block (label) @2 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) val#0 ← (number) 0 + (byte) val#0 ← (byte) 0 to:@3 (void()) main() main: scope:[main] from @3 (byte) val#8 ← phi( @3/(byte) val#14 ) - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 *((const byte*) main::SCREEN1 + (byte) main::idx#0) ← (byte) val#8 *((const byte*) main::SCREEN2 + (byte) main::idx#0) ← (byte) '.' (byte) main::idx#1 ← ++ (byte) main::idx#0 @@ -137,16 +137,12 @@ SYMBOL TABLE SSA (byte) val#9 Adding number conversion cast (unumber) $28 in -Adding number conversion cast (unumber) 0 in (byte) val#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) val#1 ← (number) 1 Adding number conversion cast (unumber) 2 in (byte) val#2 ← (number) 2 Adding number conversion cast (unumber) 3 in *((const byte*) main::ptr) ← (number) 3 Adding number conversion cast (unumber) 4 in (byte) setv::v#0 ← (number) 4 Adding number conversion cast (unumber) 5 in (byte) setp::v#0 ← (number) 5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) val#0 ← (unumber)(number) 0 -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 Inlining cast (byte) val#1 ← (unumber)(number) 1 Inlining cast (byte) val#2 ← (unumber)(number) 2 Inlining cast *((const byte*) main::ptr) ← (unumber)(number) 3 @@ -155,8 +151,6 @@ Inlining cast (byte) setp::v#0 ← (unumber)(number) 5 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 3 @@ -164,8 +158,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 diff --git a/src/test/ref/address-of-3.log b/src/test/ref/address-of-3.log index 20cbf29cd..53c7d740b 100644 --- a/src/test/ref/address-of-3.log +++ b/src/test/ref/address-of-3.log @@ -46,7 +46,7 @@ main::@return: scope:[main] from main::@5 return to:@return @1: scope:[] from @begin - (byte) idx#4 ← (number) 0 + (byte) idx#4 ← (byte) 0 to:@2 (void()) print((signed word*) print::p) @@ -80,7 +80,7 @@ SYMBOL TABLE SSA (label) @end (const signed word*) SCREEN = (signed word*)(number) $400 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const signed word*) VALS[] = { (signed word)(number) 1, (signed word)(number) 2, (signed word)(number) 3, (signed word)(number) 4 } +(const signed word*) VALS[] = { (signed word) 1, (signed word) 2, (signed word) 3, (signed word) 4 } (byte) idx (byte) idx#0 (byte) idx#1 @@ -125,21 +125,12 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 1*SIZEOF_SIGNED_WORD in (signed word*) print::p#1 ← (const signed word*) VALS+(number) 1*(const byte) SIZEOF_SIGNED_WORD Adding number conversion cast (unumber) 1 in (signed word*) print::p#1 ← (const signed word*) VALS+(unumber)(number) 1*(const byte) SIZEOF_SIGNED_WORD -Adding number conversion cast (unumber) 0 in (byte) idx#4 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#4 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 Simplifying constant pointer cast (signed word*) 1024 Simplifying constant integer cast (unumber)(number) 1*(const byte) SIZEOF_SIGNED_WORD Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#0 = (byte) idx#8 Alias (byte) idx#1 = (byte) idx#9 diff --git a/src/test/ref/array-length-symbolic-min.log b/src/test/ref/array-length-symbolic-min.log index 8a78fb86b..9cdcbb0f8 100644 --- a/src/test/ref/array-length-symbolic-min.log +++ b/src/test/ref/array-length-symbolic-min.log @@ -31,7 +31,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte) SZ = (number) $f +(const byte) SZ = (byte) $f (const byte*) items[(const byte) SZ] = { fill( SZ, 0) } (void()) main() (bool~) main::$0 @@ -275,7 +275,7 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) SZ = (number) $f +(const byte) SZ = (byte) $f (const byte*) items[(const byte) SZ] = { fill( SZ, 0) } (void()) main() (label) main::@1 diff --git a/src/test/ref/array-length-symbolic-min.sym b/src/test/ref/array-length-symbolic-min.sym index 7e6b9b02c..12da5e405 100644 --- a/src/test/ref/array-length-symbolic-min.sym +++ b/src/test/ref/array-length-symbolic-min.sym @@ -1,7 +1,7 @@ (label) @1 (label) @begin (label) @end -(const byte) SZ = (number) $f +(const byte) SZ = (byte) $f (const byte*) items[(const byte) SZ] = { fill( SZ, 0) } (void()) main() (label) main::@1 diff --git a/src/test/ref/array-length-symbolic.log b/src/test/ref/array-length-symbolic.log index 6c482cad6..8a5b39bce 100644 --- a/src/test/ref/array-length-symbolic.log +++ b/src/test/ref/array-length-symbolic.log @@ -48,9 +48,9 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte) ITEM_COUNT = (number) 3 -(const byte) ITEM_SIZE = (number) 5 -(const byte*) items[(const byte) ITEM_COUNT*(const byte) ITEM_SIZE] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } +(const byte) ITEM_COUNT = (byte) 3 +(const byte) ITEM_SIZE = (byte) 5 +(const byte*) items[(const byte) ITEM_COUNT*(const byte) ITEM_SIZE] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (void()) main() (number~) main::$0 (number~) main::$1 @@ -83,21 +83,6 @@ Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unum Adding number conversion cast (unumber) 1 in (byte) main::sub#1 ← (byte) main::sub#2 + rangenext(0,ITEM_SIZE-1) Adding number conversion cast (unumber) 1 in (byte) main::item#1 ← (byte) main::item#3 + rangenext(0,ITEM_COUNT-1) Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -509,8 +494,8 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) ITEM_COUNT = (number) 3 -(const byte) ITEM_SIZE = (number) 5 +(const byte) ITEM_COUNT = (byte) 3 +(const byte) ITEM_SIZE = (byte) 5 (const byte*) items[(const byte) ITEM_COUNT*(const byte) ITEM_SIZE] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (void()) main() (byte~) main::$0 reg byte a 202.0 diff --git a/src/test/ref/array-length-symbolic.sym b/src/test/ref/array-length-symbolic.sym index c7c005ea5..084b738e1 100644 --- a/src/test/ref/array-length-symbolic.sym +++ b/src/test/ref/array-length-symbolic.sym @@ -1,8 +1,8 @@ (label) @1 (label) @begin (label) @end -(const byte) ITEM_COUNT = (number) 3 -(const byte) ITEM_SIZE = (number) 5 +(const byte) ITEM_COUNT = (byte) 3 +(const byte) ITEM_SIZE = (byte) 5 (const byte*) items[(const byte) ITEM_COUNT*(const byte) ITEM_SIZE] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (void()) main() (byte~) main::$0 reg byte a 202.0 diff --git a/src/test/ref/arrays-init-short.log b/src/test/ref/arrays-init-short.log index cdc4c5c97..c0f4868c3 100644 --- a/src/test/ref/arrays-init-short.log +++ b/src/test/ref/arrays-init-short.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -27,7 +27,7 @@ main::@2: scope:[main] from main::@1 (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@1 main::@3: scope:[main] from main::@1 - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@7 main::@7: scope:[main] from main::@3 main::@8 (byte) main::i1#2 ← phi( main::@3/(byte) main::i1#0 main::@8/(byte) main::i1#1 ) @@ -77,26 +77,17 @@ SYMBOL TABLE SSA (const byte*) msg1[(number) $10] = (string) "camelot" (const byte*) msg2[(number) $10] = { (byte) 'c', (byte) 'm', (byte) 'l' } -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (number) 0 != *((const byte*) msg1 + (byte) main::i#2) -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (number) 0 != *((const byte*) msg2 + (byte) main::i1#2) Adding number conversion cast (unumber) $28 in *((const byte*) SCREEN+(number) $28 + (byte) main::i1#3) ← *((const byte*) msg2 + (byte) main::i1#3) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/assignment-compound.log b/src/test/ref/assignment-compound.log index 18c56c816..e7f1eda01 100644 --- a/src/test/ref/assignment-compound.log +++ b/src/test/ref/assignment-compound.log @@ -15,8 +15,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 (byte*) screen2#2 ← phi( @2/(byte*) screen2#13 ) - (byte) main::i#0 ← (number) 0 - (byte) main::a#0 ← (number) 3 + (byte) main::i#0 ← (byte) 0 + (byte) main::a#0 ← (byte) 3 (byte) test::i#0 ← (byte) main::i#0 (byte) test::a#0 ← (byte) main::a#0 call test @@ -226,7 +226,7 @@ SYMBOL TABLE SSA (byte) main::i#7 (byte) main::i#8 (byte) main::i#9 -(const byte*) ref[] = { (byte)(number) 3, (byte)(number) 4, (byte)(number) 3, (byte)(number) $12, (byte)(number) 9, (byte)(number) 1, (byte)(number) 4, (byte)(number) 2, (byte)(number) 4, (byte)(number) 5, (byte)(number) 1, (byte)(number) 0 } +(const byte*) ref[] = { (byte) 3, (byte) 4, (byte) 3, (byte) $12, (byte) 9, (byte) 1, (byte) 4, (byte) 2, (byte) 4, (byte) 5, (byte) 1, (byte) 0 } (const byte*) screen1 = (byte*)(number) $400 (byte*) screen2 (byte*) screen2#0 @@ -278,8 +278,6 @@ SYMBOL TABLE SSA (byte) test::i#9 Adding number conversion cast (unumber) $28 in (byte*~) $0 ← (const byte*) screen1 + (number) $28 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 3 in (byte) main::a#0 ← (number) 3 Adding number conversion cast (unumber) 1 in (byte) main::a#1 ← (byte) main::a#11 + (number) 1 Adding number conversion cast (unumber) 1 in (byte) main::a#2 ← (byte) main::a#12 - (number) 1 Adding number conversion cast (unumber) 6 in (byte) main::a#3 ← (byte) main::a#13 * (number) 6 @@ -291,26 +289,9 @@ Adding number conversion cast (unumber) 6 in (byte) main::a#8 ← (byte) main::a Adding number conversion cast (unumber) 1 in (byte) main::a#9 ← (byte) main::a#19 | (number) 1 Adding number conversion cast (unumber) 1 in (byte) main::a#10 ← (byte) main::a#20 & (number) 1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::a#0 ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 3 -Simplifying constant integer cast $12 -Simplifying constant integer cast 9 -Simplifying constant integer cast 1 -Simplifying constant integer cast 4 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 -Simplifying constant integer cast 3 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 6 @@ -323,8 +304,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 6 diff --git a/src/test/ref/bgblack.log b/src/test/ref/bgblack.log index 229ec116c..187cf8bb6 100644 --- a/src/test/ref/bgblack.log +++ b/src/test/ref/bgblack.log @@ -23,7 +23,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (void()) main() (label) main::@return @@ -176,7 +176,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (void()) main() (label) main::@return diff --git a/src/test/ref/bgblack.sym b/src/test/ref/bgblack.sym index 6f18d4b1d..2128d01da 100644 --- a/src/test/ref/bgblack.sym +++ b/src/test/ref/bgblack.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (void()) main() (label) main::@return diff --git a/src/test/ref/bitmap-circle-2.cfg b/src/test/ref/bitmap-circle-2.cfg index 1ce8bacdb..ad9c87914 100644 --- a/src/test/ref/bitmap-circle-2.cfg +++ b/src/test/ref/bitmap-circle-2.cfg @@ -23,7 +23,7 @@ main::@5: scope:[main] from main::@4 [10] *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(word) $3fff/(byte) $40|(word)(const byte*) BITMAP&(word) $3fff/(word) $400 to:main::@1 main::@1: scope:[main] from main::@5 main::@6 - [11] (signed word) main::i#2 ← phi( main::@5/(signed byte) 1 main::@6/(signed word) main::i#1 ) + [11] (signed word) main::i#2 ← phi( main::@5/(signed word) 1 main::@6/(signed word) main::i#1 ) [12] if((signed word) main::i#2<(signed word) $b4) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 @@ -45,7 +45,7 @@ circle: scope:[circle] from main::@2 circle::@1: scope:[circle] from circle circle::@13 [19] (signed word) circle::p#3 ← phi( circle/(signed word) circle::p#0 circle::@13/(signed word) circle::p#10 ) [19] (signed word) circle::y#13 ← phi( circle/(signed word) circle::r#0 circle::@13/(signed word) circle::y#10 ) - [19] (signed word) circle::x1#10 ← phi( circle/(signed byte) 0 circle::@13/(signed word) circle::x1#1 ) + [19] (signed word) circle::x1#10 ← phi( circle/(signed word) 0 circle::@13/(signed word) circle::x1#1 ) [20] if((signed word) circle::x1#10<=(signed word) circle::y#13) goto circle::@2 to:circle::@return circle::@return: scope:[circle] from circle::@1 diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 427a5d805..b8a3fad16 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -45,7 +45,7 @@ main::@10: scope:[main] from main::@9 *((const byte*) BORDERCOL) ← (const byte) BLUE *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(number) $3fff/(number) $400 - (signed word) main::i#0 ← (number) 1 + (signed word) main::i#0 ← (signed word) 1 to:main::@1 main::@1: scope:[main] from main::@10 main::@11 (signed word) main::i#2 ← phi( main::@10/(signed word) main::i#0 main::@11/(signed word) main::i#1 ) @@ -79,7 +79,7 @@ circle: scope:[circle] from main::@2 (signed word~) circle::$0 ← (signed word) circle::r#1 << (number) 1 (number~) circle::$1 ← (number) 3 - (signed word~) circle::$0 (signed word) circle::p#0 ← (number~) circle::$1 - (signed word) circle::x1#0 ← (number) 0 + (signed word) circle::x1#0 ← (signed word) 0 to:circle::@1 circle::@1: scope:[circle] from circle circle::@18 (signed word) circle::yc#12 ← phi( circle/(signed word) circle::yc#13 circle::@18/(signed word) circle::yc#14 ) @@ -305,15 +305,15 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D011 = (byte*)(number) $d011 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 -(const byte*) bitmask[] = { (byte)(number) $80, (byte)(number) $40, (byte)(number) $20, (byte)(number) $10, (byte)(number) 8, (byte)(number) 4, (byte)(number) 2, (byte)(number) 1 } +(const byte) VIC_RSEL = (byte) 8 +(const byte*) bitmask[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 } (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$0 (number~) circle::$1 @@ -539,7 +539,6 @@ Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const b Adding number conversion cast (unumber) 3 in *((const byte*) D011) ← ((unumber)) (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(number) $3fff/(number) $400 Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(number) $3fff/(number) $400 -Adding number conversion cast (snumber) 1 in (signed word) main::i#0 ← (number) 1 Adding number conversion cast (snumber) $b4 in (bool~) main::$2 ← (signed word) main::i#2 < (number) $b4 Adding number conversion cast (snumber) $a0 in (signed word) circle::xc#0 ← (number) $a0 Adding number conversion cast (snumber) $64 in (signed word) circle::yc#0 ← (number) $64 @@ -547,7 +546,6 @@ Adding number conversion cast (snumber) 5 in (signed word) main::i#1 ← (signed Adding number conversion cast (snumber) 1 in (signed word~) circle::$0 ← (signed word) circle::r#1 << (number) 1 Adding number conversion cast (snumber) 3 in (number~) circle::$1 ← (number) 3 - (signed word~) circle::$0 Adding number conversion cast (snumber) circle::$1 in (number~) circle::$1 ← (snumber)(number) 3 - (signed word~) circle::$0 -Adding number conversion cast (snumber) 0 in (signed word) circle::x1#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) circle::$3 ← (signed word) circle::p#3 < (number) 0 Adding number conversion cast (snumber) 2 in (signed word~) circle::$9 ← (signed word) circle::x1#3 << (number) 2 Adding number conversion cast (snumber) 6 in (number~) circle::$11 ← (signed word~) circle::$10 + (number) 6 @@ -579,24 +577,14 @@ Inlining cast (byte) fill::val#0 ← (unumber)(number) 0 Inlining cast (signed word) fill::size#1 ← (snumber)(number) $28*(number) $19 Inlining cast (byte) fill::val#1 ← (unumber)(number) $16 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast (signed word) main::i#0 ← (snumber)(number) 1 Inlining cast (signed word) circle::xc#0 ← (snumber)(number) $a0 Inlining cast (signed word) circle::yc#0 ← (snumber)(number) $64 -Inlining cast (signed word) circle::x1#0 ← (snumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast $20 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast 4 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $16 Simplifying constant integer cast (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -605,7 +593,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 -Simplifying constant integer cast 1 Simplifying constant integer cast $b4 Simplifying constant integer cast $a0 Simplifying constant integer cast $64 @@ -613,7 +600,6 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 6 Simplifying constant integer cast 1 @@ -636,7 +622,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 -Finalized signed number type (signed byte) 1 Finalized signed number type (signed word) $b4 Finalized signed number type (signed word) $a0 Finalized signed number type (signed byte) $64 @@ -644,7 +629,6 @@ Finalized signed number type (signed byte) 5 Finalized signed number type (signed byte) 1 Finalized signed number type (signed byte) 3 Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 6 Finalized signed number type (signed byte) 1 @@ -775,9 +759,9 @@ Constant inlined fill::val#0 = (byte) 0 Constant inlined plot::location#0 = (const byte*) BITMAP Constant inlined fill::start#1 = (const byte*) SCREEN Constant inlined fill::start#0 = (const byte*) BITMAP -Constant inlined circle::x1#0 = (signed byte) 0 +Constant inlined circle::x1#0 = (signed word) 0 Constant inlined fill::val#1 = (byte) $16 -Constant inlined main::i#0 = (signed byte) 1 +Constant inlined main::i#0 = (signed word) 1 Constant inlined fill::size#1 = (signed word)(number) $28*(number) $19 Constant inlined fill::size#0 = (signed word)(number) $28*(number) $19*(number) 8 Successful SSA optimization Pass2ConstantInlining @@ -878,7 +862,7 @@ main::@5: scope:[main] from main::@4 [10] *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(word) $3fff/(byte) $40|(word)(const byte*) BITMAP&(word) $3fff/(word) $400 to:main::@1 main::@1: scope:[main] from main::@5 main::@6 - [11] (signed word) main::i#2 ← phi( main::@5/(signed byte) 1 main::@6/(signed word) main::i#1 ) + [11] (signed word) main::i#2 ← phi( main::@5/(signed word) 1 main::@6/(signed word) main::i#1 ) [12] if((signed word) main::i#2<(signed word) $b4) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 @@ -900,7 +884,7 @@ circle: scope:[circle] from main::@2 circle::@1: scope:[circle] from circle circle::@13 [19] (signed word) circle::p#3 ← phi( circle/(signed word) circle::p#0 circle::@13/(signed word) circle::p#10 ) [19] (signed word) circle::y#13 ← phi( circle/(signed word) circle::r#0 circle::@13/(signed word) circle::y#10 ) - [19] (signed word) circle::x1#10 ← phi( circle/(signed byte) 0 circle::@13/(signed word) circle::x1#1 ) + [19] (signed word) circle::x1#10 ← phi( circle/(signed word) 0 circle::@13/(signed word) circle::x1#1 ) [20] if((signed word) circle::x1#10<=(signed word) circle::y#13) goto circle::@2 to:circle::@return circle::@return: scope:[circle] from circle::@1 @@ -1273,7 +1257,7 @@ main: { sta VIC_MEMORY // [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: - // [11] phi (signed word) main::i#2 = (signed byte) 1 [phi:main::@5->main::@1#0] -- vwsz1=vbsc1 + // [11] phi (signed word) main::i#2 = (signed word) 1 [phi:main::@5->main::@1#0] -- vwsz1=vwsc1 lda #<1 sta.z i lda #>1 @@ -1356,7 +1340,7 @@ circle: { __b1_from_circle: // [19] phi (signed word) circle::p#3 = (signed word) circle::p#0 [phi:circle->circle::@1#0] -- register_copy // [19] phi (signed word) circle::y#13 = (signed word) circle::r#0 [phi:circle->circle::@1#1] -- register_copy - // [19] phi (signed word) circle::x1#10 = (signed byte) 0 [phi:circle->circle::@1#2] -- vwsz1=vbsc1 + // [19] phi (signed word) circle::x1#10 = (signed word) 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z x1 lda #>0 @@ -2148,7 +2132,7 @@ main: { sta VIC_MEMORY // [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: - // [11] phi (signed word) main::i#2 = (signed byte) 1 [phi:main::@5->main::@1#0] -- vwsz1=vbsc1 + // [11] phi (signed word) main::i#2 = (signed word) 1 [phi:main::@5->main::@1#0] -- vwsz1=vwsc1 lda #<1 sta.z i lda #>1 @@ -2231,7 +2215,7 @@ circle: { __b1_from_circle: // [19] phi (signed word) circle::p#3 = (signed word) circle::p#0 [phi:circle->circle::@1#0] -- register_copy // [19] phi (signed word) circle::y#13 = (signed word) circle::r#0 [phi:circle->circle::@1#1] -- register_copy - // [19] phi (signed word) circle::x1#10 = (signed byte) 0 [phi:circle->circle::@1#2] -- vwsz1=vbsc1 + // [19] phi (signed word) circle::x1#10 = (signed word) 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z x1 lda #>0 @@ -2834,14 +2818,14 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BITMAP = (byte*) 8192 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) bitmask[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 } (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$0 zp[2]:4 4.0 @@ -3039,7 +3023,7 @@ main: { lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 sta VIC_MEMORY // [11] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - // [11] phi (signed word) main::i#2 = (signed byte) 1 [phi:main::@5->main::@1#0] -- vwsz1=vbsc1 + // [11] phi (signed word) main::i#2 = (signed word) 1 [phi:main::@5->main::@1#0] -- vwsz1=vwsc1 lda #<1 sta.z i lda #>1 @@ -3119,7 +3103,7 @@ circle: { // [19] phi from circle to circle::@1 [phi:circle->circle::@1] // [19] phi (signed word) circle::p#3 = (signed word) circle::p#0 [phi:circle->circle::@1#0] -- register_copy // [19] phi (signed word) circle::y#13 = (signed word) circle::r#0 [phi:circle->circle::@1#1] -- register_copy - // [19] phi (signed word) circle::x1#10 = (signed byte) 0 [phi:circle->circle::@1#2] -- vwsz1=vbsc1 + // [19] phi (signed word) circle::x1#10 = (signed word) 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z x1 sta.z x1+1 diff --git a/src/test/ref/bitmap-circle-2.sym b/src/test/ref/bitmap-circle-2.sym index e531eba9c..dec3d8857 100644 --- a/src/test/ref/bitmap-circle-2.sym +++ b/src/test/ref/bitmap-circle-2.sym @@ -2,14 +2,14 @@ (label) @begin (label) @end (const byte*) BITMAP = (byte*) 8192 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) bitmask[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 } (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$0 zp[2]:4 4.0 diff --git a/src/test/ref/bitmap-circle.cfg b/src/test/ref/bitmap-circle.cfg index ce5078a42..1213bb7b4 100644 --- a/src/test/ref/bitmap-circle.cfg +++ b/src/test/ref/bitmap-circle.cfg @@ -34,7 +34,7 @@ circle: scope:[circle] from main::@3 circle::@1: scope:[circle] from circle circle::@13 [14] (signed word) circle::p#3 ← phi( circle/(signed byte) 3-(const signed word) circle::r#0<<(signed byte) 1 circle::@13/(signed word) circle::p#10 ) [14] (signed word) circle::y#13 ← phi( circle/(const signed word) circle::r#0 circle::@13/(signed word) circle::y#10 ) - [14] (signed word) circle::x1#10 ← phi( circle/(signed byte) 0 circle::@13/(signed word) circle::x1#1 ) + [14] (signed word) circle::x1#10 ← phi( circle/(signed word) 0 circle::@13/(signed word) circle::x1#1 ) [15] if((signed word) circle::x1#10<=(signed word) circle::y#13) goto circle::@2 to:circle::@return circle::@return: scope:[circle] from circle::@1 diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index 42f8804f4..e49fb8311 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -62,7 +62,7 @@ circle: scope:[circle] from main::@4 (signed word~) circle::$0 ← (signed word) circle::r#1 << (number) 1 (number~) circle::$1 ← (number) 3 - (signed word~) circle::$0 (signed word) circle::p#0 ← (number~) circle::$1 - (signed word) circle::x1#0 ← (number) 0 + (signed word) circle::x1#0 ← (signed word) 0 to:circle::@1 circle::@1: scope:[circle] from circle circle::@18 (signed word) circle::yc#12 ← phi( circle/(signed word) circle::yc#13 circle::@18/(signed word) circle::yc#14 ) @@ -275,15 +275,15 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D011 = (byte*)(number) $d011 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 -(const byte*) bitmask[] = { (byte)(number) $80, (byte)(number) $40, (byte)(number) $20, (byte)(number) $10, (byte)(number) 8, (byte)(number) 4, (byte)(number) 2, (byte)(number) 1 } +(const byte) VIC_RSEL = (byte) 8 +(const byte*) bitmask[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 } (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$0 (number~) circle::$1 @@ -495,7 +495,6 @@ Adding number conversion cast (snumber) $32 in (signed word) circle::r#0 ← (nu Adding number conversion cast (snumber) 1 in (signed word~) circle::$0 ← (signed word) circle::r#1 << (number) 1 Adding number conversion cast (snumber) 3 in (number~) circle::$1 ← (number) 3 - (signed word~) circle::$0 Adding number conversion cast (snumber) circle::$1 in (number~) circle::$1 ← (snumber)(number) 3 - (signed word~) circle::$0 -Adding number conversion cast (snumber) 0 in (signed word) circle::x1#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) circle::$3 ← (signed word) circle::p#3 < (number) 0 Adding number conversion cast (snumber) 2 in (signed word~) circle::$9 ← (signed word) circle::x1#3 << (number) 2 Adding number conversion cast (snumber) 6 in (number~) circle::$11 ← (signed word~) circle::$10 + (number) 6 @@ -526,21 +525,12 @@ Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byt Inlining cast (signed word) circle::xc#0 ← (snumber)(number) $64 Inlining cast (signed word) circle::yc#0 ← (snumber)(number) $64 Inlining cast (signed word) circle::r#0 ← (snumber)(number) $32 -Inlining cast (signed word) circle::x1#0 ← (snumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast $20 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast 4 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $16 Simplifying constant integer cast (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -555,7 +545,6 @@ Simplifying constant integer cast $32 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 6 Simplifying constant integer cast 1 @@ -580,7 +569,6 @@ Finalized signed number type (signed byte) $32 Finalized signed number type (signed byte) 1 Finalized signed number type (signed byte) 3 Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 6 Finalized signed number type (signed byte) 1 @@ -693,7 +681,7 @@ Constant inlined circle::$0 = (const signed word) circle::r#0<<(signed byte) 1 Constant inlined plot::location#0 = (const byte*) BITMAP Constant inlined fill::start#1 = (const byte*) SCREEN Constant inlined fill::start#0 = (const byte*) BITMAP -Constant inlined circle::x1#0 = (signed byte) 0 +Constant inlined circle::x1#0 = (signed word) 0 Constant inlined fill::val#1 = (byte) $16 Constant inlined fill::size#1 = (signed word)(number) $28*(number) $19 Constant inlined fill::size#0 = (signed word)(number) $28*(number) $19*(number) 8 @@ -803,7 +791,7 @@ circle: scope:[circle] from main::@3 circle::@1: scope:[circle] from circle circle::@13 [14] (signed word) circle::p#3 ← phi( circle/(signed byte) 3-(const signed word) circle::r#0<<(signed byte) 1 circle::@13/(signed word) circle::p#10 ) [14] (signed word) circle::y#13 ← phi( circle/(const signed word) circle::r#0 circle::@13/(signed word) circle::y#10 ) - [14] (signed word) circle::x1#10 ← phi( circle/(signed byte) 0 circle::@13/(signed word) circle::x1#1 ) + [14] (signed word) circle::x1#10 ← phi( circle/(signed word) 0 circle::@13/(signed word) circle::x1#1 ) [15] if((signed word) circle::x1#10<=(signed word) circle::y#13) goto circle::@2 to:circle::@return circle::@return: scope:[circle] from circle::@1 @@ -1189,7 +1177,7 @@ circle: { sta.z y lda #>r sta.z y+1 - // [14] phi (signed word) circle::x1#10 = (signed byte) 0 [phi:circle->circle::@1#2] -- vwsz1=vbsc1 + // [14] phi (signed word) circle::x1#10 = (signed word) 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z x1 lda #>0 @@ -1960,7 +1948,7 @@ circle: { sta.z y lda #>r sta.z y+1 - // [14] phi (signed word) circle::x1#10 = (signed byte) 0 [phi:circle->circle::@1#2] -- vwsz1=vbsc1 + // [14] phi (signed word) circle::x1#10 = (signed word) 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z x1 lda #>0 @@ -2512,14 +2500,14 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BITMAP = (byte*) 8192 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) bitmask[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 } (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$10 zp[2]:2 22.0 @@ -2738,7 +2726,7 @@ circle: { sta.z y lda #>r sta.z y+1 - // [14] phi (signed word) circle::x1#10 = (signed byte) 0 [phi:circle->circle::@1#2] -- vwsz1=vbsc1 + // [14] phi (signed word) circle::x1#10 = (signed word) 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z x1 sta.z x1+1 diff --git a/src/test/ref/bitmap-circle.sym b/src/test/ref/bitmap-circle.sym index 5aa8909ec..0bb9631f1 100644 --- a/src/test/ref/bitmap-circle.sym +++ b/src/test/ref/bitmap-circle.sym @@ -2,14 +2,14 @@ (label) @begin (label) @end (const byte*) BITMAP = (byte*) 8192 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) bitmask[] = { (byte) $80, (byte) $40, (byte) $20, (byte) $10, (byte) 8, (byte) 4, (byte) 2, (byte) 1 } (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$10 zp[2]:2 22.0 diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index 20b2f1071..e46127d10 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -44,7 +44,7 @@ CONTROL FLOW GRAPH SSA (void()) bitmap_init((byte*) bitmap_init::bitmap) bitmap_init: scope:[bitmap_init] from main (byte*) bitmap_init::bitmap#2 ← phi( main/(byte*) bitmap_init::bitmap#0 ) - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -146,8 +146,8 @@ bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3 bitmap_plot: scope:[bitmap_plot] from bitmap_line_xdyd::@1 bitmap_line_xdyi::@1 bitmap_line_ydxd::@1 bitmap_line_ydxi::@1 (byte) bitmap_plot::y#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::y#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::y#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::y#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::y#2 ) (byte) bitmap_plot::x#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::x#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::x#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::x#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::x#2 ) - (word) bitmap_plot::plotter_x#0 ← ((word)) { *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } - (word) bitmap_plot::plotter_y#0 ← ((word)) { *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } + (word) bitmap_plot::plotter_x#0 ← (word){ *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } + (word) bitmap_plot::plotter_y#0 ← (word){ *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } (word~) bitmap_plot::$0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0 (byte~) bitmap_plot::$1 ← *((byte*) bitmap_plot::plotter#0) | *((const byte*) bitmap_plot_bit + (byte) bitmap_plot::x#4) @@ -601,7 +601,7 @@ bitmap_line_ydxd::@return: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@2 return to:@return @12: scope:[] from @begin - (byte) next#0 ← (number) 0 + (byte) next#0 ← (byte) 0 to:@14 (void()) main() @@ -682,10 +682,10 @@ SYMBOL TABLE SSA (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D011 = (byte*)(number) $d011 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (byte*~) bitmap_clear::$0 (bool~) bitmap_clear::$1 @@ -1207,7 +1207,6 @@ Fixing inline constructor with bitmap_clear::$3 ← (byte)*(bitmap_plot_xhi + 0) Fixing inline constructor with bitmap_plot::$2 ← (byte)*(bitmap_plot_xhi + bitmap_plot::x#4) w= (byte)*(bitmap_plot_xlo + bitmap_plot::x#4) Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#4) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#4) Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 @@ -1235,7 +1234,6 @@ Adding number conversion cast (unumber) bitmap_line_ydxi::$6 in (number~) bitmap Adding number conversion cast (unumber) 1 in (byte~) bitmap_line_ydxd::$0 ← (byte) bitmap_line_ydxd::xd#2 >> (number) 1 Adding number conversion cast (unumber) 1 in (number~) bitmap_line_ydxd::$6 ← (byte) bitmap_line_ydxd::y1#2 + (number) 1 Adding number conversion cast (unumber) bitmap_line_ydxd::$6 in (number~) bitmap_line_ydxd::$6 ← (byte) bitmap_line_ydxd::y1#2 + (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) next#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) BGCOL) ← (number) 0 Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 @@ -1251,11 +1249,9 @@ Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (unumber) $40 in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(unumber)(number) $3fff/(number) $400 Adding number conversion cast (unumber) $400 in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(unumber)(number) $40|(word)(const byte*) BITMAP&(unumber)(number) $3fff/(number) $400 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 -Inlining cast (byte) next#0 ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -1270,7 +1266,6 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $80 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -1298,7 +1293,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 Simplifying constant integer cast $3fff @@ -1311,7 +1305,6 @@ Simplifying constant integer cast $64 Simplifying constant integer cast $400 Simplifying constant integer cast $14 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -1332,7 +1325,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 @@ -4510,10 +4502,10 @@ FINAL SYMBOL TABLE (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 diff --git a/src/test/ref/bitmap-line-anim-1.sym b/src/test/ref/bitmap-line-anim-1.sym index bbb022608..e72a69bf1 100644 --- a/src/test/ref/bitmap-line-anim-1.sym +++ b/src/test/ref/bitmap-line-anim-1.sym @@ -6,10 +6,10 @@ (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 diff --git a/src/test/ref/bitmap-line-anim-2.cfg b/src/test/ref/bitmap-line-anim-2.cfg index fc36e5696..ac06f4c9a 100644 --- a/src/test/ref/bitmap-line-anim-2.cfg +++ b/src/test/ref/bitmap-line-anim-2.cfg @@ -21,7 +21,7 @@ main::@3: scope:[main] from main [10] call bitmap_clear to:main::@1 main::@1: scope:[main] from main::@2 main::@3 - [11] (word) next#5 ← phi( main::@2/(word) next#3 main::@3/(byte) 0 ) + [11] (word) next#5 ← phi( main::@2/(word) next#3 main::@3/(word) 0 ) [12] (word) bitmap_line::x2#0 ← (word) next#5 [13] call bitmap_line to:main::@4 diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index 0423ab7a0..f1c850a12 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -94,7 +94,7 @@ bitmap_init: scope:[bitmap_init] from main (byte*) bitmap_init::gfx#1 ← phi( main/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -504,7 +504,7 @@ sgn_u16::@return: scope:[sgn_u16] from sgn_u16::@1 sgn_u16::@3 @15: scope:[] from @9 (byte*) bitmap_screen#19 ← phi( @9/(byte*) bitmap_screen#0 ) (byte*) bitmap_gfx#20 ← phi( @9/(byte*) bitmap_gfx#0 ) - (word) next#0 ← (number) 0 + (word) next#0 ← (word) 0 to:@16 (void()) main() @@ -601,13 +601,13 @@ SYMBOL TABLE SSA (const byte*) BITMAP = (byte*)(number) $2000 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D011 = (byte*)(number) $d011 -(const byte) PURPLE = (number) 4 +(const byte) PURPLE = (byte) 4 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 (number~) abs_u16::$1 @@ -1072,7 +1072,6 @@ SYMBOL TABLE SSA Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#4) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#4) Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -1103,7 +1102,6 @@ Adding number conversion cast (unumber) sgn_u16::$1 in (number~) sgn_u16::$1 ← Adding number conversion cast (unumber) 0 in (bool~) sgn_u16::$2 ← (number) 0 != (unumber~) sgn_u16::$1 Adding number conversion cast (unumber) -1 in (word) sgn_u16::return#2 ← (number) -1 Adding number conversion cast (unumber) 1 in (word) sgn_u16::return#3 ← (number) 1 -Adding number conversion cast (unumber) 0 in (word) next#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) BGCOL) ← (number) 0 Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 @@ -1121,7 +1119,6 @@ Adding number conversion cast (unumber) $400 in *((const byte*) VIC_MEMORY) ← Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast (byte~) bitmap_line::$15 ← (byte)(word) bitmap_line::y#3 @@ -1130,7 +1127,6 @@ Inlining cast (byte~) bitmap_line::$13 ← (byte)(word) bitmap_line::y#7 Inlining cast (byte~) bitmap_line::$24 ← (byte)(word) bitmap_line::y#8 Inlining cast (word) sgn_u16::return#2 ← (unumber)(number) -1 Inlining cast (word) sgn_u16::return#3 ← (unumber)(number) 1 -Inlining cast (word) next#0 ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -1146,7 +1142,6 @@ Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -1170,7 +1165,6 @@ Simplifying constant integer cast -1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 Simplifying constant integer cast $3fff @@ -1184,7 +1178,6 @@ Simplifying constant integer cast $140 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -1206,7 +1199,6 @@ Finalized unsigned number type (byte) -1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 @@ -1525,7 +1517,7 @@ Constant inlined abs_u16::w#1 = (const word) bitmap_line::y2#0 Constant inlined bitmap_plot::y#0 = (byte) 0 Constant inlined sgn_u16::return#3 = (byte) 1 Constant inlined sgn_u16::return#2 = (byte) -1 -Constant inlined next#0 = (byte) 0 +Constant inlined next#0 = (word) 0 Constant inlined next#2 = (byte) 0 Constant inlined memset::str#1 = (void*)(const byte*) BITMAP Constant inlined memset::str#0 = (void*)(const byte*) SCREEN @@ -1702,7 +1694,7 @@ main::@3: scope:[main] from main [10] call bitmap_clear to:main::@1 main::@1: scope:[main] from main::@2 main::@3 - [11] (word) next#5 ← phi( main::@2/(word) next#3 main::@3/(byte) 0 ) + [11] (word) next#5 ← phi( main::@2/(word) next#3 main::@3/(word) 0 ) [12] (word) bitmap_line::x2#0 ← (word) next#5 [13] call bitmap_line to:main::@4 @@ -2250,7 +2242,7 @@ main: { jsr bitmap_clear // [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] __b1_from___b3: - // [11] phi (word) next#5 = (byte) 0 [phi:main::@3->main::@1#0] -- vwuz1=vbuc1 + // [11] phi (word) next#5 = (word) 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z next lda #>0 @@ -3362,7 +3354,7 @@ main: { jsr bitmap_clear // [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] __b1_from___b3: - // [11] phi (word) next#5 = (byte) 0 [phi:main::@3->main::@1#0] -- vwuz1=vbuc1 + // [11] phi (word) next#5 = (word) 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z next lda #>0 @@ -4287,13 +4279,13 @@ FINAL SYMBOL TABLE (const byte*) BITMAP = (byte*) 8192 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 -(const byte) PURPLE = (number) 4 +(const byte) PURPLE = (byte) 4 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 reg byte a 4.0 (byte~) abs_u16::$1 reg byte a 4.0 @@ -4551,7 +4543,7 @@ main: { // [87] phi from main::@3 to bitmap_clear [phi:main::@3->bitmap_clear] jsr bitmap_clear // [11] phi from main::@3 to main::@1 [phi:main::@3->main::@1] - // [11] phi (word) next#5 = (byte) 0 [phi:main::@3->main::@1#0] -- vwuz1=vbuc1 + // [11] phi (word) next#5 = (word) 0 [phi:main::@3->main::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z next sta.z next+1 diff --git a/src/test/ref/bitmap-line-anim-2.sym b/src/test/ref/bitmap-line-anim-2.sym index 186b1ac6e..060b53337 100644 --- a/src/test/ref/bitmap-line-anim-2.sym +++ b/src/test/ref/bitmap-line-anim-2.sym @@ -5,13 +5,13 @@ (const byte*) BITMAP = (byte*) 8192 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 -(const byte) PURPLE = (number) 4 +(const byte) PURPLE = (byte) 4 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 reg byte a 4.0 (byte~) abs_u16::$1 reg byte a 4.0 diff --git a/src/test/ref/bitmap-plot-0.cfg b/src/test/ref/bitmap-plot-0.cfg index ef0a2ffbb..1eb257d8a 100644 --- a/src/test/ref/bitmap-plot-0.cfg +++ b/src/test/ref/bitmap-plot-0.cfg @@ -32,9 +32,9 @@ main::@7: scope:[main] from main::toD0181 to:main::@1 main::@1: scope:[main] from main::@4 main::@7 [13] (byte) main::vy#2 ← phi( main::@7/(byte) 1 main::@4/(byte) main::vy#8 ) - [13] (word) main::vx#2 ← phi( main::@7/(byte) 1 main::@4/(word) main::vx#6 ) + [13] (word) main::vx#2 ← phi( main::@7/(word) 1 main::@4/(word) main::vx#6 ) [13] (byte) main::y#2 ← phi( main::@7/(byte) 0 main::@4/(byte) main::y#1 ) - [13] (word) main::x#2 ← phi( main::@7/(byte) 0 main::@4/(word) main::x#1 ) + [13] (word) main::x#2 ← phi( main::@7/(word) 0 main::@4/(word) main::x#1 ) to:main::@2 main::@2: scope:[main] from main::@1 [14] (word) bitmap_plot::x#0 ← (word) main::x#2 diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 7ac2a9319..f54c16bbd 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -96,7 +96,7 @@ bitmap_init: scope:[bitmap_init] from main (byte*) bitmap_init::gfx#1 ← phi( main/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -277,10 +277,10 @@ main::@11: scope:[main] from main::toD0181_@return main::@14: scope:[main] from main::@11 (byte*) bitmap_screen#17 ← phi( main::@11/(byte*) bitmap_screen#21 ) (byte*) bitmap_gfx#18 ← phi( main::@11/(byte*) bitmap_gfx#22 ) - (word) main::x#0 ← (number) 0 - (byte) main::y#0 ← (number) 0 - (word) main::vx#0 ← (number) 1 - (byte) main::vy#0 ← (number) 1 + (word) main::x#0 ← (word) 0 + (byte) main::y#0 ← (byte) 0 + (word) main::vx#0 ← (word) 1 + (byte) main::vy#0 ← (byte) 1 to:main::@1 main::@1: scope:[main] from main::@14 main::@5 (byte) main::vy#6 ← phi( main::@14/(byte) main::vy#0 main::@5/(byte) main::vy#8 ) @@ -369,7 +369,7 @@ main::@return: scope:[main] from main::@1 @16: scope:[] from @9 (byte*) bitmap_screen#19 ← phi( @9/(byte*) bitmap_screen#0 ) (byte*) bitmap_gfx#20 ← phi( @9/(byte*) bitmap_gfx#0 ) - (byte) frame_cnt ← (number) 1 + (byte) frame_cnt ← (byte) 1 to:@18 (void()) init_irq() @@ -427,26 +427,26 @@ SYMBOL TABLE SSA (label) @end (const byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*)(number) $d011 (const byte*) D018 = (byte*)(number) $d018 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (number~) bitmap_clear::$0 (number~) bitmap_clear::$1 @@ -748,7 +748,6 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#1) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#1) Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -777,32 +776,21 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) 0 in (word) main::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::y#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (word) main::vx#0 ← (number) 1 -Adding number conversion cast (unumber) 1 in (byte) main::vy#0 ← (number) 1 Adding number conversion cast (unumber) $13f in (bool~) main::$5 ← (word) main::x#1 == (number) $13f Adding number conversion cast (unumber) 0 in (bool~) main::$6 ← (word) main::x#1 == (number) 0 Adding number conversion cast (unumber) $c7 in (bool~) main::$10 ← (byte) main::y#4 == (number) $c7 Adding number conversion cast (unumber) 0 in (bool~) main::$11 ← (byte) main::y#4 == (number) 0 -Adding number conversion cast (unumber) 1 in (byte) frame_cnt ← (number) 1 Adding number conversion cast (unumber) $80 in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (number) $80 Adding number conversion cast (unumber) 0 in *((const byte*) RASTER) ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) irq::$1 ← (number) 0 != (byte) frame_cnt Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (word) main::x#0 ← (unumber)(number) 0 -Inlining cast (byte) main::y#0 ← (unumber)(number) 0 -Inlining cast (word) main::vx#0 ← (unumber)(number) 1 -Inlining cast (byte) main::vy#0 ← (unumber)(number) 1 -Inlining cast (byte) frame_cnt ← (unumber)(number) 1 Inlining cast *((const byte*) RASTER) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 @@ -819,7 +807,6 @@ Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -837,21 +824,15 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 Simplifying constant integer cast $13f Simplifying constant integer cast 0 Simplifying constant integer cast $c7 Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -866,15 +847,10 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $13f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c7 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -1132,7 +1108,7 @@ Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN&(word) $3fff*(byt Constant inlined main::toD0181_$1 = (word)(const byte*) SCREEN&(word) $3fff Constant inlined bitmap_gfx#1 = (const byte*) BITMAP Constant inlined main::toD0181_$0 = (word)(const byte*) SCREEN -Constant inlined main::x#0 = (byte) 0 +Constant inlined main::x#0 = (word) 0 Constant inlined bitmap_clear::fgcol#0 = (const byte) WHITE Constant inlined main::y#0 = (byte) 0 Constant inlined main::toD0181_$6 = >(word)(const byte*) BITMAP/(byte) 4 @@ -1141,7 +1117,7 @@ Constant inlined main::toD0181_$4 = (word)(const byte*) BITMAP Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4 Constant inlined bitmap_screen#1 = (const byte*) SCREEN Constant inlined main::vy#0 = (byte) 1 -Constant inlined main::vx#0 = (byte) 1 +Constant inlined main::vx#0 = (word) 1 Constant inlined bitmap_init::y#0 = (byte) 0 Constant inlined memset::c#0 = (const byte) bitmap_clear::col#0 Constant inlined bitmap_init::x#0 = (byte) 0 @@ -1271,9 +1247,9 @@ main::@7: scope:[main] from main::toD0181 to:main::@1 main::@1: scope:[main] from main::@4 main::@7 [13] (byte) main::vy#2 ← phi( main::@7/(byte) 1 main::@4/(byte) main::vy#8 ) - [13] (word) main::vx#2 ← phi( main::@7/(byte) 1 main::@4/(word) main::vx#6 ) + [13] (word) main::vx#2 ← phi( main::@7/(word) 1 main::@4/(word) main::vx#6 ) [13] (byte) main::y#2 ← phi( main::@7/(byte) 0 main::@4/(byte) main::y#1 ) - [13] (word) main::x#2 ← phi( main::@7/(byte) 0 main::@4/(word) main::x#1 ) + [13] (word) main::x#2 ← phi( main::@7/(word) 0 main::@4/(word) main::x#1 ) to:main::@2 main::@2: scope:[main] from main::@1 [14] (word) bitmap_plot::x#0 ← (word) main::x#2 @@ -1689,7 +1665,7 @@ main: { // [13] phi (byte) main::vy#2 = (byte) 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 lda #1 sta.z vy - // [13] phi (word) main::vx#2 = (byte) 1 [phi:main::@7->main::@1#1] -- vwuz1=vbuc1 + // [13] phi (word) main::vx#2 = (word) 1 [phi:main::@7->main::@1#1] -- vwuz1=vwuc1 lda #<1 sta.z vx lda #>1 @@ -1697,7 +1673,7 @@ main: { // [13] phi (byte) main::y#2 = (byte) 0 [phi:main::@7->main::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [13] phi (word) main::x#2 = (byte) 0 [phi:main::@7->main::@1#3] -- vwuz1=vbuc1 + // [13] phi (word) main::x#2 = (word) 0 [phi:main::@7->main::@1#3] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 @@ -2462,7 +2438,7 @@ main: { // [13] phi (byte) main::vy#2 = (byte) 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 lda #1 sta.z vy - // [13] phi (word) main::vx#2 = (byte) 1 [phi:main::@7->main::@1#1] -- vwuz1=vbuc1 + // [13] phi (word) main::vx#2 = (word) 1 [phi:main::@7->main::@1#1] -- vwuz1=vwuc1 lda #<1 sta.z vx lda #>1 @@ -2470,7 +2446,7 @@ main: { // [13] phi (byte) main::y#2 = (byte) 0 [phi:main::@7->main::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [13] phi (word) main::x#2 = (byte) 0 [phi:main::@7->main::@1#3] -- vwuz1=vbuc1 + // [13] phi (word) main::x#2 = (word) 0 [phi:main::@7->main::@1#3] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 @@ -3032,26 +3008,26 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -3277,13 +3253,13 @@ main: { // [13] phi (byte) main::vy#2 = (byte) 1 [phi:main::@7->main::@1#0] -- vbuz1=vbuc1 lda #1 sta.z vy - // [13] phi (word) main::vx#2 = (byte) 1 [phi:main::@7->main::@1#1] -- vwuz1=vbuc1 + // [13] phi (word) main::vx#2 = (word) 1 [phi:main::@7->main::@1#1] -- vwuz1=vwuc1 sta.z vx lda #>1 sta.z vx+1 // [13] phi (byte) main::y#2 = (byte) 0 [phi:main::@7->main::@1#2] -- vbuz1=vbuc1 sta.z y - // [13] phi (word) main::x#2 = (byte) 0 [phi:main::@7->main::@1#3] -- vwuz1=vbuc1 + // [13] phi (word) main::x#2 = (word) 0 [phi:main::@7->main::@1#3] -- vwuz1=vwuc1 sta.z x sta.z x+1 // main::@1 diff --git a/src/test/ref/bitmap-plot-0.sym b/src/test/ref/bitmap-plot-0.sym index 39b616bc4..68870234a 100644 --- a/src/test/ref/bitmap-plot-0.sym +++ b/src/test/ref/bitmap-plot-0.sym @@ -4,26 +4,26 @@ (label) @end (const byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return diff --git a/src/test/ref/bitmap-plot-1.asm b/src/test/ref/bitmap-plot-1.asm index 55e1d45c7..34edcbd40 100644 --- a/src/test/ref/bitmap-plot-1.asm +++ b/src/test/ref/bitmap-plot-1.asm @@ -43,9 +43,9 @@ .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $12 + .label frame_cnt = $e // Remainder after unsigned 16-bit division - .label rem16u = $c + .label rem16u = $13 __b1: // Counts frames - updated by the IRQ lda #1 @@ -54,20 +54,20 @@ __b1: rts main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __6 = 8 - .label __11 = 8 - .label __22 = $24 - .label __23 = $24 - .label cos_x = $24 - .label xpos = 8 - .label x = $1c - .label sin_y = $24 - .label ypos = 8 - .label y = $13 - .label idx_x = 2 - .label idx_y = $e - .label __24 = $24 - .label __25 = $24 + .label __6 = 6 + .label __11 = 6 + .label __22 = $a + .label __23 = $a + .label cos_x = $a + .label xpos = 6 + .label x = $f + .label sin_y = $a + .label ypos = 6 + .label y = $11 + .label idx_x = $c + .label idx_y = $20 + .label __24 = $a + .label __25 = $a jsr sin16s_gen2 jsr bitmap_init jsr bitmap_clear @@ -218,11 +218,11 @@ main: { jmp __b2 } // Plot a single dot in the bitmap -// bitmap_plot(word zp($1c) x, byte register(X) y) +// bitmap_plot(word zp($f) x, byte register(X) y) bitmap_plot: { - .label __1 = $15 - .label plotter = $13 - .label x = $1c + .label __1 = $13 + .label plotter = $11 + .label x = $f lda bitmap_plot_yhi,x sta.z plotter+1 lda bitmap_plot_ylo,x @@ -250,16 +250,16 @@ bitmap_plot: { } // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp($13) a, signed word zp($24) b) +// mul16s(signed word zp($11) a, signed word zp($a) b) mul16s: { - .label __9 = $15 - .label __13 = $22 - .label __16 = $15 - .label __17 = $13 - .label m = 8 - .label return = 8 - .label a = $13 - .label b = $24 + .label __9 = $13 + .label __13 = $1a + .label __16 = $13 + .label __17 = $11 + .label m = 6 + .label return = 6 + .label a = $11 + .label b = $a lda.z a sta.z mul16u.a lda.z a+1 @@ -268,13 +268,6 @@ mul16s: { sta.z mul16u.b lda.z b+1 sta.z mul16u.b+1 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u lda.z a+1 bpl __b1 @@ -315,18 +308,25 @@ mul16s: { rts } // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($c) a, word zp($15) b) +// mul16u(word zp($1a) a, word zp($13) b) mul16u: { - .label mb = $1e - .label a = $c - .label res = 8 - .label b = $15 - .label return = 8 - .label b_1 = 2 + .label mb = $1c + .label a = $1a + .label res = 6 + .label b = $13 + .label return = 6 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a @@ -417,12 +417,12 @@ bitmap_clear: { rts } // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($13) str, byte register(X) c, word zp($e) num) +// memset(void* zp($20) str, byte register(X) c, word zp($c) num) memset: { - .label end = $e - .label dst = $13 - .label num = $e - .label str = $13 + .label end = $c + .label dst = $20 + .label num = $c + .label str = $20 lda.z num bne !+ lda.z num+1 @@ -456,8 +456,8 @@ memset: { } // Initialize bitmap plotting tables bitmap_init: { - .label __7 = $17 - .label yoffs = $24 + .label __7 = $15 + .label yoffs = $11 ldx #0 lda #$80 __b1: @@ -502,30 +502,33 @@ bitmap_init: { // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($10) sintab) +// sin16s_gen2(signed word* zp($f) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = 8 - .label __9 = $1c - .label step = $18 - .label sintab = $10 + .label __6 = 6 + .label __9 = $1a + .label step = $16 + .label sintab = $f // u[4.28] // Iterate over the table - .label x = 4 - .label i = $e + .label x = 2 + .label i = $c jsr div32u16u lda #SINUS sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -593,20 +596,20 @@ sin16s_gen2: { // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp(8) x) +// sin16s(dword zp(6) x) sin16s: { - .label __4 = $1e - .label x = 8 - .label return = $13 + .label __4 = $1c + .label x = 6 + .label return = $11 .label x1 = $22 - .label x2 = $15 - .label x3 = $15 - .label x3_6 = $24 - .label usinx = $13 - .label x4 = $15 - .label x5 = $24 - .label x5_128 = $24 - .label sinx = $13 + .label x2 = $a + .label x3 = $a + .label x3_6 = $20 + .label usinx = $11 + .label x4 = $a + .label x5 = $20 + .label x5_128 = $20 + .label sinx = $11 lda.z x+3 cmp #>PI_u4f28>>$10 bcc b1 @@ -777,25 +780,18 @@ sin16s: { } // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($15) v1, word zp(2) v2, byte register(X) select) +// mulu16_sel(word zp($a) v1, word zp($13) v2, byte register(X) select) mulu16_sel: { - .label __0 = 8 - .label __1 = 8 - .label v1 = $15 - .label v2 = 2 - .label return = $24 - .label return_1 = $15 + .label __0 = 6 + .label __1 = 6 + .label v1 = $a + .label v2 = $13 + .label return = $20 + .label return_1 = $a lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u cpx #0 beq !e+ @@ -816,9 +812,9 @@ mulu16_sel: { // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $24 - .label quotient_lo = $10 - .label return = $18 + .label quotient_hi = $22 + .label quotient_lo = $c + .label return = $16 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 @@ -850,12 +846,12 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($e) dividend, word zp($c) rem) +// divr16u(word zp($1a) dividend, word zp($13) rem) divr16u: { - .label rem = $c - .label dividend = $e - .label quotient = $10 - .label return = $10 + .label rem = $13 + .label dividend = $1a + .label quotient = $c + .label return = $c ldx #0 txa sta.z quotient diff --git a/src/test/ref/bitmap-plot-1.cfg b/src/test/ref/bitmap-plot-1.cfg index 94f67104f..b46ec515a 100644 --- a/src/test/ref/bitmap-plot-1.cfg +++ b/src/test/ref/bitmap-plot-1.cfg @@ -35,8 +35,8 @@ main::@5: scope:[main] from main::toD0181 [14] call init_irq to:main::@1 main::@1: scope:[main] from main::@4 main::@5 - [15] (word) main::idx_y#3 ← phi( main::@5/(byte) $80 main::@4/(word) main::idx_y#10 ) - [15] (word) main::idx_x#3 ← phi( main::@5/(byte) 0 main::@4/(word) main::idx_x#10 ) + [15] (word) main::idx_y#3 ← phi( main::@5/(word) $80 main::@4/(word) main::idx_y#10 ) + [15] (word) main::idx_x#3 ← phi( main::@5/(word) 0 main::@4/(word) main::idx_x#10 ) to:main::@2 main::@2: scope:[main] from main::@1 [16] (word~) main::$22 ← (word) main::idx_x#3 << (byte) 1 @@ -137,324 +137,325 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [72] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [72] (dword) mul16u::mb#0 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [72] (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [73] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [73] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [73] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [74] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [74] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [74] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [75] return + [76] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [77] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [78] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [79] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [80] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [81] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [80] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [81] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [82] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (void()) init_irq() init_irq: scope:[init_irq] from main::@5 asm { sei } - [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK - [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO - [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR - [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 - [87] *((const byte*) RASTER) ← (byte) 0 - [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER - [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() + [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK + [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO + [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR + [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 + [88] *((const byte*) RASTER) ← (byte) 0 + [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER + [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() asm { cli } to:init_irq::@return init_irq::@return: scope:[init_irq] from init_irq - [91] return + [92] return to:@return (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) bitmap_clear: scope:[bitmap_clear] from main::@7 - [92] phi() - [93] call memset + [93] phi() + [94] call memset to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [94] phi() - [95] call memset + [95] phi() + [96] call memset to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [96] return + [97] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from bitmap_clear bitmap_clear::@1 - [97] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) - [97] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) - [97] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) - [98] if((word) memset::num#2<=(byte) 0) goto memset::@return + [98] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) + [98] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) + [98] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) + [99] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [101] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [102] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [103] return + [104] return to:@return memset::@3: scope:[memset] from memset::@2 - [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [105] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 (void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen) bitmap_init: scope:[bitmap_init] from main::@6 - [106] phi() + [107] phi() to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [107] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) - [107] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) - [108] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 - [109] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 - [110] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 + [108] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) + [108] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) + [109] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 + [110] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 + [111] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 to:bitmap_init::@2 bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1 - [111] phi() + [112] phi() to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6 - [112] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) - [113] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 - [114] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 + [113] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) + [114] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 + [115] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [115] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) - [115] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) - [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 - [117] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 - [118] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 - [119] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 - [120] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 - [121] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 - [122] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 + [116] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) + [116] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) + [117] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 + [118] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 + [119] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 + [120] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 + [121] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 + [122] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 + [123] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3 - [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 + [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5 - [124] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) - [125] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 - [126] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 + [125] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) + [126] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 + [127] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [127] return + [128] return to:@return (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) sin16s_gen2: scope:[sin16s_gen2] from main - [128] phi() - [129] call div32u16u - [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + [129] phi() + [130] call div32u16u + [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 - [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [132] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [132] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [132] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + [133] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) + [133] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [133] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [134] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [134] return + [135] return to:@return sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [136] call sin16s - [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 + [137] call sin16s + [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [139] call mul16s - [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [140] call mul16s + [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 + [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD + [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 + [147] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 to:sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [149] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [149] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [150] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [150] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [152] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [157] call mulu16_sel - [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [153] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [158] call mulu16_sel + [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [162] call mulu16_sel - [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [163] call mulu16_sel + [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [166] call mulu16_sel - [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [167] call mulu16_sel + [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [172] call mulu16_sel - [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [173] call mulu16_sel + [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [177] call mulu16_sel - [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [178] call mulu16_sel + [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [182] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [183] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [184] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [185] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [185] return + [186] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [187] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [187] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [187] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [190] call mul16u - [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [188] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [188] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [188] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [191] call mul16u + [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [194] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [195] return + [196] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [196] phi() - [197] call divr16u - [198] (word) divr16u::return#2 ← (word) divr16u::return#0 + [197] phi() + [198] call divr16u + [199] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [200] (word) divr16u::rem#4 ← (word) rem16u#1 - [201] call divr16u - [202] (word) divr16u::return#3 ← (word) divr16u::return#0 + [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [201] (word) divr16u::rem#4 ← (word) rem16u#1 + [202] call divr16u + [203] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [203] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [204] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [204] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [205] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [205] return + [206] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [206] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [206] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [207] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [207] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [207] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [207] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [207] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [207] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [208] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [210] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [211] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [208] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [208] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [208] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [208] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [209] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [211] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [212] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [213] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [214] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [215] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 + [214] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [215] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [216] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [217] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 + [218] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [219] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [219] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [220] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [221] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [220] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [220] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [221] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [222] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [222] (word) rem16u#1 ← (word) divr16u::rem#11 + [223] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [223] return + [224] return to:@return interrupt(HARDWARE_CLOBBER)(void()) irq() irq: scope:[irq] from - [224] *((const byte*) BGCOL) ← (const byte) WHITE - [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 + [225] *((const byte*) BGCOL) ← (const byte) WHITE + [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 to:irq::@2 irq::@2: scope:[irq] from irq - [226] (byte) frame_cnt ← ++ (byte) frame_cnt + [227] (byte) frame_cnt ← ++ (byte) frame_cnt to:irq::@1 irq::@1: scope:[irq] from irq irq::@2 - [227] *((const byte*) BGCOL) ← (const byte) BLACK - [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [228] *((const byte*) BGCOL) ← (const byte) BLACK + [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irq::@return irq::@return: scope:[irq] from irq::@1 - [229] return + [230] return to:@return diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index 7c57380a8..bec9e3865 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -78,7 +78,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@6 @6: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@29 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -86,7 +86,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -194,7 +194,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#13 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -209,8 +209,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul16u: scope:[mul16u] from mul16s mulu16_sel (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#2 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -340,8 +340,8 @@ sin16s_gen2::@7: scope:[sin16s_gen2] from sin16s_gen2 (dword~) sin16s_gen2::$3 ← (dword) div32u16u::return#4 (word) rem16u#6 ← (word) rem16u#15 (dword) sin16s_gen2::step#0 ← (dword~) sin16s_gen2::$3 - (dword) sin16s_gen2::x#0 ← (number) 0 - (word) sin16s_gen2::i#0 ← (number) 0 + (dword) sin16s_gen2::x#0 ← (dword) 0 + (word) sin16s_gen2::i#0 ← (word) 0 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@7 sin16s_gen2::@9 (dword) sin16s_gen2::step#4 ← phi( sin16s_gen2::@7/(dword) sin16s_gen2::step#0 sin16s_gen2::@9/(dword) sin16s_gen2::step#1 ) @@ -413,7 +413,7 @@ sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 (dword) sin16s::x#3 ← phi( sin16s_gen2::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -612,7 +612,7 @@ bitmap_init: scope:[bitmap_init] from main::@12 (byte*) bitmap_init::gfx#1 ← phi( main::@12/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -811,8 +811,8 @@ main::@15: scope:[main] from main::@11 (byte*) bitmap_screen#18 ← phi( main::@11/(byte*) bitmap_screen#22 ) (byte*) bitmap_gfx#19 ← phi( main::@11/(byte*) bitmap_gfx#23 ) (word) rem16u#27 ← phi( main::@11/(word) rem16u#31 ) - (word) main::idx_x#0 ← (number) 0 - (word) main::idx_y#0 ← (number) $80 + (word) main::idx_x#0 ← (word) 0 + (word) main::idx_y#0 ← (word) $80 to:main::@1 main::@1: scope:[main] from main::@15 main::@5 (word) main::idx_y#8 ← phi( main::@15/(word) main::idx_y#0 main::@5/(word) main::idx_y#10 ) @@ -933,7 +933,7 @@ main::@return: scope:[main] from main::@1 (byte*) bitmap_screen#20 ← phi( @29/(byte*) bitmap_screen#0 ) (byte*) bitmap_gfx#21 ← phi( @29/(byte*) bitmap_gfx#0 ) (word) rem16u#29 ← phi( @29/(word) rem16u#34 ) - (byte) frame_cnt ← (number) 1 + (byte) frame_cnt ← (byte) 1 to:@38 (void()) init_irq() @@ -995,31 +995,31 @@ SYMBOL TABLE SSA (label) @end (const byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*)(number) $d011 (const byte*) D018 = (byte*)(number) $d018 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $400 (const signed word*) SINUS[(number) $200] = { fill( $200, 0) } (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (number~) bitmap_clear::$0 (number~) bitmap_clear::$1 @@ -1801,8 +1801,6 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#1) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#1) Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1812,7 +1810,6 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (unumber)(number) 1 @@ -1822,9 +1819,6 @@ Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul Adding number conversion cast (snumber) 0 in (bool~) mul16s::$3 ← (signed word) mul16s::a#4 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mul16s::$5 ← (signed word) mul16s::b#4 < (number) 0 Adding number conversion cast (snumber) 1 in (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl#0 >> (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen2::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen2::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1836,7 +1830,6 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (nu Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -1868,8 +1861,6 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) 0 in (word) main::idx_x#0 ← (number) 0 -Adding number conversion cast (unumber) $80 in (word) main::idx_y#0 ← (number) $80 Adding number conversion cast (snumber) $a0 in (signed word) mul16s::a#1 ← (number) $a0 Adding number conversion cast (snumber) 4 in (signed dword~) main::$6 ← (signed dword) main::xpos#0 << (number) 4 Adding number conversion cast (unumber) $a0 in (number~) main::$8 ← (number) $a0 + (word~) main::$7 @@ -1882,24 +1873,17 @@ Adding number conversion cast (unumber) $200 in (bool~) main::$17 ← (word) mai Adding number conversion cast (unumber) $200 in (bool~) main::$19 ← (word) main::idx_y#1 == (number) $200 Adding number conversion cast (unumber) 0 in (word) main::idx_x#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) main::idx_y#2 ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) frame_cnt ← (number) 1 Adding number conversion cast (unumber) $80 in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (number) $80 Adding number conversion cast (unumber) 0 in *((const byte*) RASTER) ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) irq::$1 ← (number) 0 != (byte) frame_cnt Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#3 Inlining cast (word~) mul16s::$1 ← (word)(signed word) mul16s::b#3 Inlining cast (word~) mul16s::$10 ← (word)(signed word) mul16s::b#5 Inlining cast (signed dword~) mul16s::$7 ← (signed dword)(dword) mul16s::m#4 Inlining cast (word~) mul16s::$14 ← (word)(signed word) mul16s::a#5 -Inlining cast (dword) sin16s_gen2::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen2::i#0 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s_gen2::$8 ← (signed word)(word~) sin16s_gen2::$7 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -1911,7 +1895,6 @@ Inlining cast (signed word~) sin16s::$14 ← (signed word)(word) sin16s::usinx#1 Inlining cast (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#3 Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast (word) sin16s_gen2::wavelength#0 ← (unumber)(number) $200 @@ -1920,8 +1903,6 @@ Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $1001 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (word) main::idx_x#0 ← (unumber)(number) 0 -Inlining cast (word) main::idx_y#0 ← (unumber)(number) $80 Inlining cast (signed word) mul16s::a#1 ← (snumber)(number) $a0 Inlining cast (word~) main::$9 ← (word)(unumber~) main::$8 Inlining cast (signed word) mul16s::a#2 ← (snumber)(number) $64 @@ -1929,7 +1910,6 @@ Inlining cast (word~) main::$14 ← (word)(unumber~) main::$13 Inlining cast (byte~) main::$15 ← (byte)(word) main::y#0 Inlining cast (word) main::idx_x#2 ← (unumber)(number) 0 Inlining cast (word) main::idx_y#2 ← (unumber)(number) 0 -Inlining cast (byte) frame_cnt ← (unumber)(number) 1 Inlining cast *((const byte*) RASTER) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 @@ -1945,8 +1925,6 @@ Simplifying constant pointer cast (byte*) 56333 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1957,7 +1935,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -1965,9 +1942,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -1978,7 +1952,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -1999,8 +1972,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast $a0 Simplifying constant integer cast 4 Simplifying constant integer cast $a0 @@ -2011,13 +1982,10 @@ Simplifying constant integer cast $200 Simplifying constant integer cast $200 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2026,7 +1994,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -2034,9 +2001,6 @@ Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2047,7 +2011,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -2065,8 +2028,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized signed number type (signed word) $a0 Finalized signed number type (signed byte) 4 Finalized unsigned number type (byte) $a0 @@ -2077,7 +2038,6 @@ Finalized unsigned number type (word) $200 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -2142,7 +2102,6 @@ Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#2 Alias (word) mul16u::a#3 = (word) mul16u::a#4 (word) mul16u::a#7 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#4 (dword) mul16u::return#1 @@ -2425,8 +2384,8 @@ De-inlining pointer[w] to *(pointer+w) [409] (signed word) main::sin_y#0 ← * Successful SSA optimization Pass2DeInlineWordDerefIdx Simplifying expression containing zero bitmap_clear::$0 in [327] (byte) bitmap_clear::col#0 ← (byte~) bitmap_clear::$0 + (const byte) bitmap_clear::bgcol#0 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (void*) memset::return#2 and assignment [168] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [170] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#2 and assignment [169] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [171] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) bitmap_clear::bgcol#0 Eliminating unused constant (const word) rem16u#0 Eliminating unused constant (const byte*) bitmap_screen#0 @@ -2457,10 +2416,10 @@ Alias (word) main::y#0 = (word~) main::$13 Successful SSA optimization Pass2AliasElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [164] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 -Constant right-side identified [181] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [184] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Constant right-side identified [60] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 +Constant right-side identified [165] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 +Constant right-side identified [182] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff +Constant right-side identified [185] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = > (signed byte) 1 -Constant right-side identified [173] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 -Constant right-side identified [175] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 +Constant right-side identified [58] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1 +Constant right-side identified [174] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 +Constant right-side identified [176] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::$1 = sin16s_gen2::ampl#0>>1 Constant (const word) main::toD0181_$2 = main::toD0181_$1*4 Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [57] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 -Constant right-side identified [172] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 -Constant right-side identified [173] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f +Constant right-side identified [58] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 +Constant right-side identified [173] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 +Constant right-side identified [174] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1 Constant (const byte) main::toD0181_$3 = >main::toD0181_$2 @@ -2490,29 +2449,29 @@ Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f Successful SSA optimization Pass2ConstantIdentification Simplifying constant evaluating to zero (const signed word) sin16s_gen2::min#0+(const signed word) sin16s_gen2::$1 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero sin16s_gen2::$8 in [72] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 +Simplifying expression containing zero sin16s_gen2::$8 in [73] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const signed word) sin16s_gen2::$1 Eliminating unused constant (const signed word) sin16s_gen2::offs#0 Successful SSA optimization PassNEliminateUnusedVars Alias (signed word~) sin16s_gen2::$9 = (signed word~) sin16s_gen2::$8 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [171] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 +Constant right-side identified [172] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [47] (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 keeping mul16s::b#3 -Inlining Noop Cast [53] (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 keeping mul16s::a#3 -Inlining Noop Cast [110] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [114] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [128] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 -Inlining Noop Cast [130] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [48] (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 keeping mul16s::b#3 +Inlining Noop Cast [54] (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 keeping mul16s::a#3 +Inlining Noop Cast [111] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [115] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [129] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [131] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [70] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 -Inlining Noop Cast [160] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0 +Inlining Noop Cast [71] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 +Inlining Noop Cast [161] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [173] (word~) main::$22 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD -Rewriting multiplication to use shift [183] (word~) main::$23 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [174] (word~) main::$22 ← (word) main::idx_x#3 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [184] (word~) main::$23 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2553,7 +2512,7 @@ Inlining constant with var siblings (const word) main::idx_y#2 Constant inlined bitmap_init::screen#0 = (const byte*) SCREEN Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined bitmap_init::gfx#0 = (const byte*) BITMAP -Constant inlined sin16s_gen2::i#0 = (byte) 0 +Constant inlined sin16s_gen2::i#0 = (word) 0 Constant inlined sin16s::isUpper#0 = (byte) 0 Constant inlined memset::num#1 = (word) $1f40 Constant inlined memset::num#0 = (word) $3e8 @@ -2564,7 +2523,7 @@ Constant inlined mulu16_sel::select#0 = (byte) 0 Constant inlined sin16s::isUpper#1 = (byte) 1 Constant inlined mulu16_sel::select#1 = (byte) 1 Constant inlined main::idx_y#2 = (byte) 0 -Constant inlined main::idx_y#0 = (byte) $80 +Constant inlined main::idx_y#0 = (word) $80 Constant inlined mul16s::b#0 = (const signed word) sin16s_gen2::ampl#0 Constant inlined main::toD0181_$7 = >(word)(const byte*) BITMAP/(byte) 4&(byte) $f Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN&(word) $3fff*(byte) 4 @@ -2585,13 +2544,13 @@ Constant inlined divr16u::i#0 = (byte) 0 Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28 Constant inlined bitmap_init::bits#0 = (byte) $80 Constant inlined bitmap_init::bits#2 = (byte) $80 -Constant inlined divr16u::quotient#0 = (byte) 0 -Constant inlined sin16s_gen2::x#0 = (byte) 0 -Constant inlined mul16u::res#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 +Constant inlined sin16s_gen2::x#0 = (dword) 0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined main::idx_x#2 = (byte) 0 Constant inlined divr16u::divisor#1 = (const word) sin16s_gen2::wavelength#0 Constant inlined divr16u::divisor#0 = (const word) sin16s_gen2::wavelength#0 -Constant inlined main::idx_x#0 = (byte) 0 +Constant inlined main::idx_x#0 = (word) 0 Constant inlined mul16s::a#1 = (signed word) $a0 Constant inlined memset::str#1 = (void*)(const byte*) BITMAP Constant inlined mul16s::a#2 = (signed byte) $64 @@ -2650,11 +2609,11 @@ CALL GRAPH Calls in [] to main:5 Calls in [main] to sin16s_gen2:9 bitmap_init:11 bitmap_clear:13 init_irq:18 mul16s:26 mul16s:37 bitmap_plot:45 Calls in [mul16s] to mul16u:70 -Calls in [bitmap_clear] to memset:118 memset:120 -Calls in [sin16s_gen2] to div32u16u:165 sin16s:172 mul16s:176 -Calls in [sin16s] to mulu16_sel:201 mulu16_sel:208 mulu16_sel:213 mulu16_sel:221 mulu16_sel:228 -Calls in [mulu16_sel] to mul16u:246 -Calls in [div32u16u] to divr16u:253 divr16u:258 +Calls in [bitmap_clear] to memset:119 memset:121 +Calls in [sin16s_gen2] to div32u16u:166 sin16s:173 mul16s:177 +Calls in [sin16s] to mulu16_sel:202 mulu16_sel:209 mulu16_sel:214 mulu16_sel:222 mulu16_sel:229 +Calls in [mulu16_sel] to mul16u:247 +Calls in [div32u16u] to divr16u:254 divr16u:259 Created 43 initial phi equivalence classes Coalesced [25] mul16s::b#8 ← mul16s::b#1 @@ -2663,61 +2622,61 @@ Coalesced [55] main::idx_x#11 ← main::idx_x#10 Coalesced [56] main::idx_y#11 ← main::idx_y#10 Coalesced [57] main::idx_y#12 ← main::idx_y#1 Coalesced [58] main::idx_x#12 ← main::idx_x#1 -Coalesced [68] mul16u::mb#6 ← mul16u::b#0 +Coalesced [68] mul16u::b#3 ← mul16u::b#0 Coalesced [69] mul16u::a#8 ← mul16u::a#1 Coalesced [77] mul16s::m#7 ← mul16s::m#1 Coalesced [83] mul16s::m#10 ← mul16s::m#2 Coalesced [87] mul16s::m#9 ← mul16s::m#5 Coalesced [88] mul16s::m#8 ← mul16s::m#0 -Coalesced [90] mul16u::a#10 ← mul16u::a#6 -Coalesced [91] mul16u::mb#8 ← mul16u::mb#0 -Coalesced [99] mul16u::res#9 ← mul16u::res#1 -Coalesced [103] mul16u::a#11 ← mul16u::a#0 -Coalesced [104] mul16u::res#7 ← mul16u::res#6 -Coalesced [105] mul16u::mb#9 ← mul16u::mb#1 -Coalesced (already) [106] mul16u::res#8 ← mul16u::res#2 -Coalesced [133] memset::dst#5 ← memset::dst#1 -Coalesced [153] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [158] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [159] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [160] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [161] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [162] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [163] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [175] mul16s::a#8 ← mul16s::a#0 -Coalesced [184] sin16s_gen2::i#6 ← sin16s_gen2::i#1 -Coalesced [185] sin16s_gen2::x#6 ← sin16s_gen2::x#1 -Coalesced [186] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 -Coalesced [189] sin16s::x#9 ← sin16s::x#1 -Coalesced [193] sin16s::x#11 ← sin16s::x#2 -Coalesced [199] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [200] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [206] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [207] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [212] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [219] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [220] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [226] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [227] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [235] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [239] sin16s::x#10 ← sin16s::x#4 -Coalesced [240] sin16s::x#8 ← sin16s::x#0 -Coalesced [244] mul16u::mb#7 ← mul16u::b#1 -Coalesced [245] mul16u::a#9 ← mul16u::a#2 -Coalesced [257] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [264] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [265] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [272] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [279] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [280] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [286] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [287] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [288] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [289] divr16u::i#7 ← divr16u::i#1 -Coalesced [290] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [291] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [292] divr16u::rem#15 ← divr16u::rem#0 -Coalesced down to 29 phi equivalence classes +Coalesced [91] mul16u::a#10 ← mul16u::a#6 +Coalesced [92] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [100] mul16u::res#9 ← mul16u::res#1 +Coalesced [104] mul16u::a#11 ← mul16u::a#0 +Coalesced [105] mul16u::res#7 ← mul16u::res#6 +Coalesced [106] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [107] mul16u::res#8 ← mul16u::res#2 +Coalesced [134] memset::dst#5 ← memset::dst#1 +Coalesced [154] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [159] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [160] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [161] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [162] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [163] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [164] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [176] mul16s::a#8 ← mul16s::a#0 +Coalesced [185] sin16s_gen2::i#6 ← sin16s_gen2::i#1 +Coalesced [186] sin16s_gen2::x#6 ← sin16s_gen2::x#1 +Coalesced [187] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 +Coalesced [190] sin16s::x#9 ← sin16s::x#1 +Coalesced [194] sin16s::x#11 ← sin16s::x#2 +Coalesced [200] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [201] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [207] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [208] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [213] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [220] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [221] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [227] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [228] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [236] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [240] sin16s::x#10 ← sin16s::x#4 +Coalesced [241] sin16s::x#8 ← sin16s::x#0 +Coalesced [245] mul16u::b#4 ← mul16u::b#1 +Coalesced [246] mul16u::a#9 ← mul16u::a#2 +Coalesced [258] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [265] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [266] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [273] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [280] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [281] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [287] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [288] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [289] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [290] divr16u::i#7 ← divr16u::i#1 +Coalesced [291] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [292] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [293] divr16u::rem#15 ← divr16u::rem#0 +Coalesced down to 30 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @29 Culled Empty Block (label) @39 @@ -2830,8 +2789,8 @@ main::@5: scope:[main] from main::toD0181 [14] call init_irq to:main::@1 main::@1: scope:[main] from main::@4 main::@5 - [15] (word) main::idx_y#3 ← phi( main::@5/(byte) $80 main::@4/(word) main::idx_y#10 ) - [15] (word) main::idx_x#3 ← phi( main::@5/(byte) 0 main::@4/(word) main::idx_x#10 ) + [15] (word) main::idx_y#3 ← phi( main::@5/(word) $80 main::@4/(word) main::idx_y#10 ) + [15] (word) main::idx_x#3 ← phi( main::@5/(word) 0 main::@4/(word) main::idx_x#10 ) to:main::@2 main::@2: scope:[main] from main::@1 [16] (word~) main::$22 ← (word) main::idx_x#3 << (byte) 1 @@ -2932,326 +2891,327 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [72] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [72] (dword) mul16u::mb#0 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [72] (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [73] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [73] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [73] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [74] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [74] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [74] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [75] return + [76] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [77] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [78] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [79] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [80] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [81] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [80] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [81] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [82] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (void()) init_irq() init_irq: scope:[init_irq] from main::@5 asm { sei } - [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK - [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO - [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR - [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 - [87] *((const byte*) RASTER) ← (byte) 0 - [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER - [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() + [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK + [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO + [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR + [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 + [88] *((const byte*) RASTER) ← (byte) 0 + [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER + [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() asm { cli } to:init_irq::@return init_irq::@return: scope:[init_irq] from init_irq - [91] return + [92] return to:@return (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) bitmap_clear: scope:[bitmap_clear] from main::@7 - [92] phi() - [93] call memset + [93] phi() + [94] call memset to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [94] phi() - [95] call memset + [95] phi() + [96] call memset to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [96] return + [97] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from bitmap_clear bitmap_clear::@1 - [97] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) - [97] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) - [97] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) - [98] if((word) memset::num#2<=(byte) 0) goto memset::@return + [98] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) + [98] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) + [98] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) + [99] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [101] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [102] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [103] return + [104] return to:@return memset::@3: scope:[memset] from memset::@2 - [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [105] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 (void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen) bitmap_init: scope:[bitmap_init] from main::@6 - [106] phi() + [107] phi() to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [107] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) - [107] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) - [108] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 - [109] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 - [110] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 + [108] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) + [108] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) + [109] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 + [110] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 + [111] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 to:bitmap_init::@2 bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1 - [111] phi() + [112] phi() to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6 - [112] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) - [113] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 - [114] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 + [113] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) + [114] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 + [115] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [115] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) - [115] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) - [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 - [117] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 - [118] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 - [119] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 - [120] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 - [121] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 - [122] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 + [116] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) + [116] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) + [117] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 + [118] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 + [119] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 + [120] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 + [121] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 + [122] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 + [123] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3 - [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 + [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5 - [124] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) - [125] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 - [126] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 + [125] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) + [126] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 + [127] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [127] return + [128] return to:@return (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) sin16s_gen2: scope:[sin16s_gen2] from main - [128] phi() - [129] call div32u16u - [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + [129] phi() + [130] call div32u16u + [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 - [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [132] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [132] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [132] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + [133] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) + [133] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [133] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [134] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [134] return + [135] return to:@return sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [136] call sin16s - [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 + [137] call sin16s + [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [139] call mul16s - [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [140] call mul16s + [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 + [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD + [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 + [147] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 to:sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [149] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [149] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [150] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [150] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [152] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [157] call mulu16_sel - [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [153] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [158] call mulu16_sel + [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [162] call mulu16_sel - [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [163] call mulu16_sel + [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [166] call mulu16_sel - [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [167] call mulu16_sel + [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [172] call mulu16_sel - [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [173] call mulu16_sel + [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [177] call mulu16_sel - [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [178] call mulu16_sel + [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [182] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [183] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [184] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [185] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [185] return + [186] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [187] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [187] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [187] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [190] call mul16u - [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [188] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [188] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [188] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [191] call mul16u + [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [194] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [195] return + [196] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [196] phi() - [197] call divr16u - [198] (word) divr16u::return#2 ← (word) divr16u::return#0 + [197] phi() + [198] call divr16u + [199] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [200] (word) divr16u::rem#4 ← (word) rem16u#1 - [201] call divr16u - [202] (word) divr16u::return#3 ← (word) divr16u::return#0 + [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [201] (word) divr16u::rem#4 ← (word) rem16u#1 + [202] call divr16u + [203] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [203] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [204] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [204] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [205] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [205] return + [206] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [206] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [206] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [207] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [207] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [207] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [207] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [207] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [207] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [208] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [210] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [211] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [208] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [208] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [208] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [208] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [209] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [211] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [212] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [213] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [214] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [215] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 + [214] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [215] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [216] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [217] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 + [218] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [219] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [219] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [220] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [221] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [220] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [220] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [221] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [222] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [222] (word) rem16u#1 ← (word) divr16u::rem#11 + [223] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [223] return + [224] return to:@return interrupt(HARDWARE_CLOBBER)(void()) irq() irq: scope:[irq] from - [224] *((const byte*) BGCOL) ← (const byte) WHITE - [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 + [225] *((const byte*) BGCOL) ← (const byte) WHITE + [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 to:irq::@2 irq::@2: scope:[irq] from irq - [226] (byte) frame_cnt ← ++ (byte) frame_cnt + [227] (byte) frame_cnt ← ++ (byte) frame_cnt to:irq::@1 irq::@1: scope:[irq] from irq irq::@2 - [227] *((const byte*) BGCOL) ← (const byte) BLACK - [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [228] *((const byte*) BGCOL) ← (const byte) BLACK + [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irq::@return irq::@return: scope:[irq] from irq::@1 - [229] return + [230] return to:@return @@ -3411,12 +3371,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (word) mul16u::a#1 2.0 (word) mul16u::a#2 2.0 (word) mul16u::a#3 67.66666666666666 -(word) mul16u::a#6 6.0 +(word) mul16u::a#6 3.0 (word) mul16u::b (word) mul16u::b#0 4.0 (word) mul16u::b#1 4.0 +(word) mul16u::b#2 4.0 (dword) mul16u::mb -(dword) mul16u::mb#0 6.0 +(dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 (dword) mul16u::mb#2 43.57142857142858 (dword) mul16u::res @@ -3506,16 +3467,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (dword) sin16s_gen2::x#1 11.0 (dword) sin16s_gen2::x#2 2.75 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#0 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 Initial phi equivalence classes [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] [ mul16s::a#3 mul16s::a#0 ] [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -[ mul16u::b#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3614,8 +3572,7 @@ Complete equivalence classes [ mul16s::a#3 mul16s::a#0 ] [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -[ mul16u::b#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3713,100 +3670,99 @@ Allocated zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] Allocated zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] Allocated zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] Allocated zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -Allocated zp[2]:14 [ mul16u::b#0 ] -Allocated zp[2]:16 [ mul16u::b#1 ] -Allocated zp[2]:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated zp[4]:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -Allocated zp[4]:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -Allocated zp[2]:28 [ memset::num#2 ] -Allocated zp[2]:30 [ memset::str#3 ] -Allocated zp[1]:32 [ memset::c#4 ] -Allocated zp[2]:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] -Allocated zp[1]:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] -Allocated zp[1]:36 [ bitmap_init::x#2 bitmap_init::x#1 ] -Allocated zp[1]:37 [ bitmap_init::y#2 bitmap_init::y#1 ] -Allocated zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -Allocated zp[2]:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -Allocated zp[4]:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated zp[2]:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] -Allocated zp[1]:48 [ sin16s::isUpper#2 ] -Allocated zp[4]:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] -Allocated zp[2]:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] -Allocated zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] -Allocated zp[2]:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] -Allocated zp[1]:59 [ mulu16_sel::select#5 ] -Allocated zp[2]:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp[2]:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] -Allocated zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp[1]:66 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp[1]:67 [ frame_cnt ] -Allocated zp[2]:68 [ main::$22 ] -Allocated zp[2]:70 [ main::$24 ] -Allocated zp[2]:72 [ main::cos_x#0 ] -Allocated zp[4]:74 [ mul16s::return#3 ] -Allocated zp[4]:78 [ main::xpos#0 ] -Allocated zp[4]:82 [ main::$6 ] -Allocated zp[2]:86 [ main::$7 ] -Allocated zp[2]:88 [ main::x#0 ] -Allocated zp[2]:90 [ main::$23 ] -Allocated zp[2]:92 [ main::$25 ] -Allocated zp[2]:94 [ main::sin_y#0 ] -Allocated zp[4]:96 [ mul16s::return#4 ] -Allocated zp[4]:100 [ main::ypos#0 ] -Allocated zp[4]:104 [ main::$11 ] -Allocated zp[2]:108 [ main::$12 ] -Allocated zp[2]:110 [ main::y#0 ] -Allocated zp[1]:112 [ bitmap_plot::y#0 ] -Allocated zp[2]:113 [ bitmap_plot::x#0 ] -Allocated zp[2]:115 [ bitmap_plot::plotter#0 ] -Allocated zp[2]:117 [ bitmap_plot::$1 ] -Allocated zp[2]:119 [ bitmap_plot::plotter#1 ] -Allocated zp[1]:121 [ bitmap_plot::$2 ] -Allocated zp[4]:122 [ mul16u::return#2 ] -Allocated zp[2]:126 [ mul16s::$9 ] -Allocated zp[2]:128 [ mul16s::$16 ] -Allocated zp[2]:130 [ mul16s::$13 ] -Allocated zp[2]:132 [ mul16s::$17 ] -Allocated zp[4]:134 [ mul16s::return#0 ] -Allocated zp[1]:138 [ mul16u::$1 ] -Allocated zp[2]:139 [ memset::end#0 ] -Allocated zp[1]:141 [ bitmap_init::$7 ] -Allocated zp[1]:142 [ bitmap_init::$4 ] -Allocated zp[1]:143 [ bitmap_init::$5 ] -Allocated zp[1]:144 [ bitmap_init::$6 ] -Allocated zp[4]:145 [ div32u16u::return#2 ] -Allocated zp[4]:149 [ sin16s_gen2::step#0 ] -Allocated zp[2]:153 [ sin16s::return#0 ] -Allocated zp[4]:155 [ mul16s::return#2 ] -Allocated zp[4]:159 [ sin16s_gen2::$6 ] -Allocated zp[2]:163 [ sin16s_gen2::$9 ] -Allocated zp[4]:165 [ sin16s::$4 ] -Allocated zp[2]:169 [ sin16s::x1#0 ] -Allocated zp[2]:171 [ mulu16_sel::return#0 ] -Allocated zp[2]:173 [ sin16s::x2#0 ] -Allocated zp[2]:175 [ mulu16_sel::return#1 ] -Allocated zp[2]:177 [ sin16s::x3#0 ] -Allocated zp[2]:179 [ mulu16_sel::return#2 ] -Allocated zp[2]:181 [ sin16s::x3_6#0 ] -Allocated zp[2]:183 [ sin16s::usinx#0 ] -Allocated zp[2]:185 [ mulu16_sel::return#10 ] -Allocated zp[2]:187 [ sin16s::x4#0 ] -Allocated zp[2]:189 [ mulu16_sel::return#11 ] -Allocated zp[2]:191 [ sin16s::x5#0 ] -Allocated zp[2]:193 [ sin16s::x5_128#0 ] -Allocated zp[2]:195 [ sin16s::usinx#1 ] -Allocated zp[4]:197 [ mul16u::return#3 ] -Allocated zp[4]:201 [ mulu16_sel::$0 ] -Allocated zp[4]:205 [ mulu16_sel::$1 ] -Allocated zp[2]:209 [ mulu16_sel::return#12 ] -Allocated zp[2]:211 [ divr16u::return#2 ] -Allocated zp[2]:213 [ div32u16u::quotient_hi#0 ] -Allocated zp[2]:215 [ divr16u::return#3 ] -Allocated zp[2]:217 [ div32u16u::quotient_lo#0 ] -Allocated zp[4]:219 [ div32u16u::return#0 ] -Allocated zp[1]:223 [ divr16u::$1 ] -Allocated zp[1]:224 [ divr16u::$2 ] -Allocated zp[2]:225 [ rem16u#1 ] +Allocated zp[2]:14 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] +Allocated zp[2]:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +Allocated zp[4]:18 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] +Allocated zp[4]:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated zp[2]:26 [ memset::num#2 ] +Allocated zp[2]:28 [ memset::str#3 ] +Allocated zp[1]:30 [ memset::c#4 ] +Allocated zp[2]:31 [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated zp[1]:33 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] +Allocated zp[1]:34 [ bitmap_init::x#2 bitmap_init::x#1 ] +Allocated zp[1]:35 [ bitmap_init::y#2 bitmap_init::y#1 ] +Allocated zp[2]:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] +Allocated zp[2]:38 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] +Allocated zp[4]:40 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated zp[2]:44 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated zp[1]:46 [ sin16s::isUpper#2 ] +Allocated zp[4]:47 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] +Allocated zp[2]:51 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] +Allocated zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] +Allocated zp[2]:55 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +Allocated zp[1]:57 [ mulu16_sel::select#5 ] +Allocated zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp[2]:60 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +Allocated zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp[1]:64 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp[1]:65 [ frame_cnt ] +Allocated zp[2]:66 [ main::$22 ] +Allocated zp[2]:68 [ main::$24 ] +Allocated zp[2]:70 [ main::cos_x#0 ] +Allocated zp[4]:72 [ mul16s::return#3 ] +Allocated zp[4]:76 [ main::xpos#0 ] +Allocated zp[4]:80 [ main::$6 ] +Allocated zp[2]:84 [ main::$7 ] +Allocated zp[2]:86 [ main::x#0 ] +Allocated zp[2]:88 [ main::$23 ] +Allocated zp[2]:90 [ main::$25 ] +Allocated zp[2]:92 [ main::sin_y#0 ] +Allocated zp[4]:94 [ mul16s::return#4 ] +Allocated zp[4]:98 [ main::ypos#0 ] +Allocated zp[4]:102 [ main::$11 ] +Allocated zp[2]:106 [ main::$12 ] +Allocated zp[2]:108 [ main::y#0 ] +Allocated zp[1]:110 [ bitmap_plot::y#0 ] +Allocated zp[2]:111 [ bitmap_plot::x#0 ] +Allocated zp[2]:113 [ bitmap_plot::plotter#0 ] +Allocated zp[2]:115 [ bitmap_plot::$1 ] +Allocated zp[2]:117 [ bitmap_plot::plotter#1 ] +Allocated zp[1]:119 [ bitmap_plot::$2 ] +Allocated zp[4]:120 [ mul16u::return#2 ] +Allocated zp[2]:124 [ mul16s::$9 ] +Allocated zp[2]:126 [ mul16s::$16 ] +Allocated zp[2]:128 [ mul16s::$13 ] +Allocated zp[2]:130 [ mul16s::$17 ] +Allocated zp[4]:132 [ mul16s::return#0 ] +Allocated zp[1]:136 [ mul16u::$1 ] +Allocated zp[2]:137 [ memset::end#0 ] +Allocated zp[1]:139 [ bitmap_init::$7 ] +Allocated zp[1]:140 [ bitmap_init::$4 ] +Allocated zp[1]:141 [ bitmap_init::$5 ] +Allocated zp[1]:142 [ bitmap_init::$6 ] +Allocated zp[4]:143 [ div32u16u::return#2 ] +Allocated zp[4]:147 [ sin16s_gen2::step#0 ] +Allocated zp[2]:151 [ sin16s::return#0 ] +Allocated zp[4]:153 [ mul16s::return#2 ] +Allocated zp[4]:157 [ sin16s_gen2::$6 ] +Allocated zp[2]:161 [ sin16s_gen2::$9 ] +Allocated zp[4]:163 [ sin16s::$4 ] +Allocated zp[2]:167 [ sin16s::x1#0 ] +Allocated zp[2]:169 [ mulu16_sel::return#0 ] +Allocated zp[2]:171 [ sin16s::x2#0 ] +Allocated zp[2]:173 [ mulu16_sel::return#1 ] +Allocated zp[2]:175 [ sin16s::x3#0 ] +Allocated zp[2]:177 [ mulu16_sel::return#2 ] +Allocated zp[2]:179 [ sin16s::x3_6#0 ] +Allocated zp[2]:181 [ sin16s::usinx#0 ] +Allocated zp[2]:183 [ mulu16_sel::return#10 ] +Allocated zp[2]:185 [ sin16s::x4#0 ] +Allocated zp[2]:187 [ mulu16_sel::return#11 ] +Allocated zp[2]:189 [ sin16s::x5#0 ] +Allocated zp[2]:191 [ sin16s::x5_128#0 ] +Allocated zp[2]:193 [ sin16s::usinx#1 ] +Allocated zp[4]:195 [ mul16u::return#3 ] +Allocated zp[4]:199 [ mulu16_sel::$0 ] +Allocated zp[4]:203 [ mulu16_sel::$1 ] +Allocated zp[2]:207 [ mulu16_sel::return#12 ] +Allocated zp[2]:209 [ divr16u::return#2 ] +Allocated zp[2]:211 [ div32u16u::quotient_hi#0 ] +Allocated zp[2]:213 [ divr16u::return#3 ] +Allocated zp[2]:215 [ div32u16u::quotient_lo#0 ] +Allocated zp[4]:217 [ div32u16u::return#0 ] +Allocated zp[1]:221 [ divr16u::$1 ] +Allocated zp[1]:222 [ divr16u::$2 ] +Allocated zp[2]:223 [ rem16u#1 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -3858,9 +3814,9 @@ Target platform is c64basic / MOS6502X .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $43 + .label frame_cnt = $41 // Remainder after unsigned 16-bit division - .label rem16u = $e1 + .label rem16u = $df // @begin __bbegin: jmp __b1 @@ -3887,24 +3843,24 @@ __bend: // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __6 = $52 - .label __7 = $56 - .label __11 = $68 - .label __12 = $6c - .label __22 = $44 - .label __23 = $5a - .label cos_x = $48 - .label xpos = $4e - .label x = $58 - .label sin_y = $5e - .label ypos = $64 - .label y = $6e + .label __6 = $50 + .label __7 = $54 + .label __11 = $66 + .label __12 = $6a + .label __22 = $42 + .label __23 = $58 + .label cos_x = $46 + .label xpos = $4c + .label x = $56 + .label sin_y = $5c + .label ypos = $62 + .label y = $6c .label idx_x = 2 .label idx_y = 4 - .label __24 = $46 - .label __25 = $5c + .label __24 = $44 + .label __25 = $5a // [6] call sin16s_gen2 - // [128] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] + // [129] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] sin16s_gen2_from_main: jsr sin16s_gen2 // [7] phi from main to main::@6 [phi:main->main::@6] @@ -3913,7 +3869,7 @@ main: { // main::@6 __b6: // [8] call bitmap_init - // [106] phi from main::@6 to bitmap_init [phi:main::@6->bitmap_init] + // [107] phi from main::@6 to bitmap_init [phi:main::@6->bitmap_init] bitmap_init_from___b6: jsr bitmap_init // [9] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -3922,7 +3878,7 @@ main: { // main::@7 __b7: // [10] call bitmap_clear - // [92] phi from main::@7 to bitmap_clear [phi:main::@7->bitmap_clear] + // [93] phi from main::@7 to bitmap_clear [phi:main::@7->bitmap_clear] bitmap_clear_from___b7: jsr bitmap_clear jmp __b8 @@ -3946,12 +3902,12 @@ main: { jsr init_irq // [15] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: - // [15] phi (word) main::idx_y#3 = (byte) $80 [phi:main::@5->main::@1#0] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_y#3 = (word) $80 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 lda #<$80 sta.z idx_y lda #>$80 sta.z idx_y+1 - // [15] phi (word) main::idx_x#3 = (byte) 0 [phi:main::@5->main::@1#1] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_x#3 = (word) 0 [phi:main::@5->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z idx_x lda #>0 @@ -4240,14 +4196,14 @@ main: { } // bitmap_plot // Plot a single dot in the bitmap -// bitmap_plot(word zp($71) x, byte zp($70) y) +// bitmap_plot(word zp($6f) x, byte zp($6e) y) bitmap_plot: { - .label __1 = $75 - .label __2 = $79 - .label plotter = $73 - .label plotter_1 = $77 - .label x = $71 - .label y = $70 + .label __1 = $73 + .label __2 = $77 + .label plotter = $71 + .label plotter_1 = $75 + .label x = $6f + .label y = $6e // [48] (word) bitmap_plot::plotter#0 ← *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#0) w= *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#0) -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 ldy.z y lda bitmap_plot_yhi,y @@ -4290,17 +4246,17 @@ bitmap_plot: { // Fixes offsets introduced by using unsigned multiplication // mul16s(signed word zp(6) a, signed word zp(8) b) mul16s: { - .label __9 = $7e - .label __13 = $82 - .label __16 = $80 - .label __17 = $84 + .label __9 = $7c + .label __13 = $80 + .label __16 = $7e + .label __17 = $82 .label m = $a - .label return = $86 + .label return = $84 .label a = 6 - .label return_1 = $9b + .label return_1 = $99 .label b = 8 - .label return_2 = $4a - .label return_3 = $60 + .label return_2 = $48 + .label return_3 = $5e // [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a @@ -4315,14 +4271,7 @@ mul16s: { // [72] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [72] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [72] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [72] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -4424,31 +4373,40 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($12) a, word zp($e) b) +// mul16u(word zp($10) a, word zp($e) b) mul16u: { - .label __1 = $8a - .label mb = $18 - .label a = $12 - .label res = $14 + .label __1 = $88 + .label mb = $16 + .label a = $10 + .label res = $12 .label b = $e - .label return = $7a - .label b_1 = $10 - .label return_1 = $c5 - // [73] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + .label return = $78 + .label return_1 = $c3 + // [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [74] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [73] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [73] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [74] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [74] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [73] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [74] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -4456,22 +4414,22 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [75] return + // [76] return rts // mul16u::@2 __b2: - // [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 + // [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [77] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 + // [78] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -4485,26 +4443,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [79] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [80] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [79] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [80] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [80] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [81] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [81] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [82] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [73] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [74] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [73] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [73] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [73] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [74] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [74] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [74] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // init_irq @@ -4512,30 +4470,30 @@ mul16u: { init_irq: { // asm { sei } sei - // [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 ora VIC_CONTROL sta VIC_CONTROL - // [87] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [88] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta RASTER - // [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 + // [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #memset] + // [94] call memset + // [98] phi from bitmap_clear to memset [phi:bitmap_clear->memset] memset_from_bitmap_clear: - // [97] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuz1=vbuc1 + // [98] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuz1=vbuc1 lda #col sta.z memset.c - // [97] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [98] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [97] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [98] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [94] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [95] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] __b1_from_bitmap_clear: jmp __b1 // bitmap_clear::@1 __b1: - // [95] call memset - // [97] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [96] call memset + // [98] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] memset_from___b1: - // [97] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuz1=vbuc1 + // [98] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuz1=vbuc1 lda #0 sta.z memset.c - // [97] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [98] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [97] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [98] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -4597,19 +4555,19 @@ bitmap_clear: { jmp __breturn // bitmap_clear::@return __breturn: - // [96] return + // [97] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($1e) str, byte zp($20) c, word zp($1c) num) +// memset(void* zp($1c) str, byte zp($1e) c, word zp($1a) num) memset: { - .label end = $8b - .label dst = $21 - .label num = $1c - .label str = $1e - .label c = $20 - // [98] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + .label end = $89 + .label dst = $1f + .label num = $1a + .label str = $1c + .label c = $1e + // [99] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -4618,7 +4576,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 + // [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z str clc adc.z num @@ -4626,19 +4584,19 @@ memset: { lda.z str+1 adc.z num+1 sta.z end+1 - // [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + // [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 lda.z str sta.z dst lda.z str+1 sta.z dst+1 - // [101] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [102] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [101] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -4648,15 +4606,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [103] return + // [104] return rts // memset::@3 __b3: - // [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + // [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 lda.z c ldy #0 sta (dst),y - // [105] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -4666,111 +4624,111 @@ memset: { // bitmap_init // Initialize bitmap plotting tables bitmap_init: { - .label __4 = $8e - .label __5 = $8f - .label __6 = $90 - .label __7 = $8d - .label bits = $23 - .label x = $24 - .label y = $25 - .label yoffs = $26 - // [107] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + .label __4 = $8c + .label __5 = $8d + .label __6 = $8e + .label __7 = $8b + .label bits = $21 + .label x = $22 + .label y = $23 + .label yoffs = $24 + // [108] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] __b1_from_bitmap_init: - // [107] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 + // [108] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [107] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 + // [108] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 lda #$80 sta.z bits jmp __b1 - // [107] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [108] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] __b1_from___b2: - // [107] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [107] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [108] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [108] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp __b1 // bitmap_init::@1 __b1: - // [108] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2 + // [109] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z bits ldy.z x sta bitmap_plot_bit,y - // [109] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [110] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z bits - // [110] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuz1_neq_0_then_la1 + // [111] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuz1_neq_0_then_la1 lda.z bits cmp #0 bne __b6_from___b1 - // [112] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [113] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] __b2_from___b1: - // [112] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 + // [113] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 lda #$80 sta.z bits jmp __b2 - // [111] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [112] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] __b6_from___b1: jmp __b6 // bitmap_init::@6 __b6: - // [112] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [113] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] __b2_from___b6: - // [112] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [113] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy jmp __b2 // bitmap_init::@2 __b2: - // [113] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuz1=_inc_vbuz1 + // [114] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [114] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuz1_neq_0_then_la1 + // [115] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuz1_neq_0_then_la1 lda.z x cmp #0 bne __b1_from___b2 - // [115] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [116] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] __b3_from___b2: - // [115] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [116] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [115] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 + // [116] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b3 - // [115] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [116] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] __b3_from___b4: - // [115] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [115] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [116] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [116] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp __b3 // bitmap_init::@3 __b3: - // [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [117] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z y sta.z __7 - // [117] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuz1=_lo_pbuz2 + // [118] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuz1=_lo_pbuz2 lda.z yoffs sta.z __4 - // [118] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuz1=vbuz2_bor_vbuz3 + // [119] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuz1=vbuz2_bor_vbuz3 lda.z __7 ora.z __4 sta.z __5 - // [119] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuz1=vbuz2 + // [120] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __5 ldy.z y sta bitmap_plot_ylo,y - // [120] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuz1=_hi_pbuz2 + // [121] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuz1=_hi_pbuz2 lda.z yoffs+1 sta.z __6 - // [121] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 + // [122] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __6 ldy.z y sta bitmap_plot_yhi,y - // [122] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [123] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4_from___b3 jmp __b5 // bitmap_init::@5 __b5: - // [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -4778,48 +4736,48 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [124] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [125] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] __b4_from___b3: __b4_from___b5: - // [124] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [125] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy jmp __b4 // bitmap_init::@4 __b4: - // [125] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuz1=_inc_vbuz1 + // [126] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [126] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuz1_neq_0_then_la1 + // [127] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuz1_neq_0_then_la1 lda.z y cmp #0 bne __b3_from___b4 jmp __breturn // bitmap_init::@return __breturn: - // [127] return + // [128] return rts } // sin16s_gen2 // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($2e) sintab) +// sin16s_gen2(signed word* zp($2c) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = $9f - .label __9 = $a3 - .label step = $95 - .label sintab = $2e + .label __6 = $9d + .label __9 = $a1 + .label step = $93 + .label sintab = $2c // u[4.28] // Iterate over the table - .label x = $2a - .label i = $28 - // [129] call div32u16u - // [196] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + .label x = $28 + .label i = $26 + // [130] call div32u16u + // [197] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u - // [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 + // [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 lda.z div32u16u.return sta.z div32u16u.return_1 lda.z div32u16u.return+1 @@ -4831,7 +4789,7 @@ sin16s_gen2: { jmp __b3 // sin16s_gen2::@3 __b3: - // [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 + // [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 lda.z div32u16u.return_1 sta.z step lda.z div32u16u.return_1+1 @@ -4840,21 +4798,23 @@ sin16s_gen2: { sta.z step+2 lda.z div32u16u.return_1+3 sta.z step+3 - // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] + // [133] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] __b1_from___b3: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [133] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 lda #SINUS sta.z sintab+1 - // [132] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [133] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [132] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [133] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4863,7 +4823,7 @@ sin16s_gen2: { // u[4.28] // sin16s_gen2::@1 __b1: - // [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + // [134] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>wavelength bcc __b2 @@ -4875,11 +4835,11 @@ sin16s_gen2: { jmp __breturn // sin16s_gen2::@return __breturn: - // [134] return + // [135] return rts // sin16s_gen2::@2 __b2: - // [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 lda.z x sta.z sin16s.x lda.z x+1 @@ -4888,9 +4848,9 @@ sin16s_gen2: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [136] call sin16s + // [137] call sin16s jsr sin16s - // [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda.z sin16s.return_1 sta.z sin16s.return lda.z sin16s.return_1+1 @@ -4898,12 +4858,12 @@ sin16s_gen2: { jmp __b4 // sin16s_gen2::@4 __b4: - // [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda.z sin16s.return sta.z mul16s.a lda.z sin16s.return+1 sta.z mul16s.a+1 - // [139] call mul16s + // [140] call mul16s // [54] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from___b4: // [54] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -4913,7 +4873,7 @@ sin16s_gen2: { sta.z mul16s.b+1 // [54] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 + // [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 lda.z mul16s.return sta.z mul16s.return_1 lda.z mul16s.return+1 @@ -4925,7 +4885,7 @@ sin16s_gen2: { jmp __b5 // sin16s_gen2::@5 __b5: - // [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 + // [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 lda.z mul16s.return_1 sta.z __6 lda.z mul16s.return_1+1 @@ -4934,19 +4894,19 @@ sin16s_gen2: { sta.z __6+2 lda.z mul16s.return_1+3 sta.z __6+3 - // [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda.z __6+2 sta.z __9 lda.z __6+3 sta.z __9+1 - // [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __9 sta (sintab),y iny lda.z __9+1 sta (sintab),y - // [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab @@ -4954,7 +4914,7 @@ sin16s_gen2: { bcc !+ inc.z sintab+1 !: - // [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step @@ -4968,41 +4928,41 @@ sin16s_gen2: { lda.z x+3 adc.z step+3 sta.z x+3 - // [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [147] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [132] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] + // [133] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] __b1_from___b5: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [132] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [132] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy + // [133] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy + // [133] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy + // [133] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp($31) x) +// sin16s(dword zp($2f) x) sin16s: { - .label __4 = $a5 - .label x = $31 - .label return = $99 - .label x1 = $a9 - .label x2 = $ad - .label x3 = $b1 - .label x3_6 = $b5 - .label usinx = $b7 - .label x4 = $bb - .label x5 = $bf - .label x5_128 = $c1 - .label usinx_1 = $c3 - .label return_1 = $35 - .label sinx = $35 + .label __4 = $a3 + .label x = $2f + .label return = $97 + .label x1 = $a7 + .label x2 = $ab + .label x3 = $af + .label x3_6 = $b3 + .label usinx = $b5 + .label x4 = $b9 + .label x5 = $bd + .label x5_128 = $bf + .label usinx_1 = $c1 + .label return_1 = $33 + .label sinx = $33 // Move x1 into the range 0-PI/2 using sinus mirror symmetries - .label isUpper = $30 - // [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + .label isUpper = $2e + // [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -5022,7 +4982,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [149] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [150] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [149] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 + // [150] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [149] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [150] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [149] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [150] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [149] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 + // [150] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [149] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [150] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -5072,7 +5032,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [152] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [153] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [152] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [153] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -5114,31 +5074,31 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [157] call mulu16_sel - // [187] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [158] call mulu16_sel + // [188] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return lda.z mulu16_sel.return_5+1 @@ -5146,31 +5106,31 @@ sin16s: { jmp __b7 // sin16s::@7 __b7: - // [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 + // [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 lda.z x2 sta.z mulu16_sel.v1 lda.z x2+1 sta.z mulu16_sel.v1+1 - // [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [162] call mulu16_sel - // [187] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [163] call mulu16_sel + // [188] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_1 lda.z mulu16_sel.return_5+1 @@ -5178,30 +5138,30 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 + // [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x3 lda.z mulu16_sel.return_1+1 sta.z x3+1 - // [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [166] call mulu16_sel - // [187] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [167] call mulu16_sel + // [188] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [187] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [188] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_2 lda.z mulu16_sel.return_5+1 @@ -5209,12 +5169,12 @@ sin16s: { jmp __b9 // sin16s::@9 __b9: - // [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 + // [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 lda.z mulu16_sel.return_2 sta.z x3_6 lda.z mulu16_sel.return_2+1 sta.z x3_6+1 - // [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -5222,26 +5182,26 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [172] call mulu16_sel - // [187] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [173] call mulu16_sel + // [188] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_3 lda.z mulu16_sel.return_5+1 @@ -5249,31 +5209,31 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 + // [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 lda.z mulu16_sel.return_3 sta.z x4 lda.z mulu16_sel.return_3+1 sta.z x4+1 - // [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 + // [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 lda.z x4 sta.z mulu16_sel.v1 lda.z x4+1 sta.z mulu16_sel.v1+1 - // [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [177] call mulu16_sel - // [187] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [178] call mulu16_sel + // [188] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_4 lda.z mulu16_sel.return_5+1 @@ -5281,12 +5241,12 @@ sin16s: { jmp __b11 // sin16s::@11 __b11: - // [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 + // [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 lda.z mulu16_sel.return_4 sta.z x5 lda.z mulu16_sel.return_4+1 sta.z x5+1 - // [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 + // [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 lda.z x5+1 lsr sta.z x5_128+1 @@ -5299,7 +5259,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 + // [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z usinx clc adc.z x5_128 @@ -5307,14 +5267,14 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx_1+1 - // [182] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 + // [183] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 + // [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z usinx_1 @@ -5322,21 +5282,21 @@ sin16s: { lda #0 sbc.z usinx_1+1 sta.z sinx+1 - // [184] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [185] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [184] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [185] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [185] return + // [186] return rts // sin16s::@12 __b12: - // [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 + // [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 lda.z usinx_1 sta.z return_1 lda.z usinx_1+1 @@ -5346,43 +5306,36 @@ sin16s: { // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($37) v1, word zp($39) v2, byte zp($3b) select) +// mulu16_sel(word zp($35) v1, word zp($37) v2, byte zp($39) select) mulu16_sel: { - .label __0 = $c9 - .label __1 = $cd - .label v1 = $37 - .label v2 = $39 - .label return = $ab - .label return_1 = $af - .label return_2 = $b3 - .label return_3 = $b9 - .label return_4 = $bd - .label select = $3b - .label return_5 = $d1 - // [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + .label __0 = $c7 + .label __1 = $cb + .label v1 = $35 + .label v2 = $37 + .label return = $a9 + .label return_1 = $ad + .label return_2 = $b1 + .label return_3 = $b7 + .label return_4 = $bb + .label select = $39 + .label return_5 = $cf + // [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 + // [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 lda.z v2 - sta.z mul16u.b_1 + sta.z mul16u.b lda.z v2+1 - sta.z mul16u.b_1+1 - // [190] call mul16u + sta.z mul16u.b+1 + // [191] call mul16u // [72] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [72] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [72] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [72] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 + // [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res sta.z mul16u.return_1 lda.z mul16u.res+1 @@ -5394,7 +5347,7 @@ mulu16_sel: { jmp __b1 // mulu16_sel::@1 __b1: - // [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 + // [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 lda.z mul16u.return_1 sta.z __0 lda.z mul16u.return_1+1 @@ -5403,7 +5356,7 @@ mulu16_sel: { sta.z __0+2 lda.z mul16u.return_1+3 sta.z __0+3 - // [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 + // [194] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 lda.z __0 sta.z __1 lda.z __0+1 @@ -5422,7 +5375,7 @@ mulu16_sel: { dex bne !- !e: - // [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_5 lda.z __1+3 @@ -5430,32 +5383,32 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [195] return + // [196] return rts } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $d5 - .label quotient_lo = $d9 - .label return = $db - .label return_1 = $91 - // [197] call divr16u - // [206] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + .label quotient_hi = $d3 + .label quotient_lo = $d7 + .label return = $d9 + .label return_1 = $8f + // [198] call divr16u + // [207] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [206] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [207] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [206] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [207] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [198] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [199] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_1 lda.z divr16u.return+1 @@ -5463,27 +5416,27 @@ div32u16u: { jmp __b1 // div32u16u::@1 __b1: - // [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return_1 sta.z quotient_hi lda.z divr16u.return_1+1 sta.z quotient_hi+1 - // [200] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 + // [201] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 lda.z rem16u sta.z divr16u.rem lda.z rem16u+1 sta.z divr16u.rem+1 - // [201] call divr16u - // [206] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [202] call divr16u + // [207] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [206] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [207] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [206] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [207] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [202] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [203] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_2 lda.z divr16u.return+1 @@ -5491,12 +5444,12 @@ div32u16u: { jmp __b2 // div32u16u::@2 __b2: - // [203] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 + // [204] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 lda.z divr16u.return_2 sta.z quotient_lo lda.z divr16u.return_2+1 sta.z quotient_lo+1 - // [204] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [205] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -5508,7 +5461,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [205] return + // [206] return rts } // divr16u @@ -5516,74 +5469,74 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($3e) dividend, word zp($3c) rem) +// divr16u(word zp($3c) dividend, word zp($3a) rem) divr16u: { - .label __1 = $df - .label __2 = $e0 - .label rem = $3c - .label dividend = $3e - .label quotient = $40 - .label i = $42 - .label return = $40 - .label return_1 = $d3 - .label return_2 = $d7 - // [207] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label __1 = $dd + .label __2 = $de + .label rem = $3a + .label dividend = $3c + .label quotient = $3e + .label i = $40 + .label return = $3e + .label return_1 = $d1 + .label return_2 = $d5 + // [208] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [207] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + // [208] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [207] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [208] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [207] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [207] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [208] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [208] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [207] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [208] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [207] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [207] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [207] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [207] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [208] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [208] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [208] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [208] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [208] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [209] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 + // [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 lda.z dividend+1 sta.z __1 - // [210] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [211] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z __1 sta.z __2 - // [211] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 + // [212] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda.z __2 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [213] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [214] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [213] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [214] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [214] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [215] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [215] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [216] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>sin16s_gen2.wavelength bcc __b3_from___b2 @@ -5595,12 +5548,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [217] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [218] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 + // [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #sin16s_gen2.wavelength sta.z rem+1 - // [219] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [220] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [219] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [219] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [220] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [220] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [220] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 + // [221] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [221] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 + // [222] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [222] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 + // [223] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 lda.z rem sta.z rem16u lda.z rem+1 @@ -5633,7 +5586,7 @@ divr16u: { jmp __breturn // divr16u::@return __breturn: - // [223] return + // [224] return rts } // irq @@ -5643,32 +5596,32 @@ irq: { sta rega+1 stx regx+1 sty regy+1 - // [224] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 + // [225] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BGCOL - // [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 + // [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z frame_cnt beq __b1 jmp __b2 // irq::@2 __b2: - // [226] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 + // [227] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 inc.z frame_cnt jmp __b1 // irq::@1 __b1: - // [227] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + // [228] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL - // [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irq::@return __breturn: - // [229] return - exit interrupt(HARDWARE_CLOBBER) + // [230] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -5687,9 +5640,9 @@ irq: { SINUS: .fill 2*$200, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Equivalence Class zp[2]:86 [ main::$7 ] has ALU potential. -Equivalence Class zp[2]:108 [ main::$12 ] has ALU potential. -Equivalence Class zp[1]:142 [ bitmap_init::$4 ] has ALU potential. +Equivalence Class zp[2]:84 [ main::$7 ] has ALU potential. +Equivalence Class zp[2]:106 [ main::$12 ] has ALU potential. +Equivalence Class zp[1]:140 [ bitmap_init::$4 ] has ALU potential. Statement [1] (byte) frame_cnt ← (byte) 1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [11] *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a Statement [13] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a @@ -5711,7 +5664,7 @@ Statement [33] (signed dword~) main::$11 ← (signed dword) main::ypos#0 << (sig Statement [35] (word) main::y#0 ← (byte) $64 + (word~) main::$12 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 main::y#0 ] ( main:3 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 main::y#0 ] ) always clobbers reg byte a Statement [36] (byte) bitmap_plot::y#0 ← (byte)(word) main::y#0 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 bitmap_plot::y#0 ] ( main:3 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 bitmap_plot::y#0 ] ) always clobbers reg byte a Statement [37] (word) bitmap_plot::x#0 ← (word) main::x#0 [ frame_cnt main::idx_x#3 main::idx_y#3 bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:3 [ frame_cnt main::idx_x#3 main::idx_y#3 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:112 [ bitmap_plot::y#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:110 [ bitmap_plot::y#0 ] Statement [40] if((word) main::idx_x#1!=(word) $200) goto main::@12 [ frame_cnt main::idx_y#3 main::idx_x#1 ] ( main:3 [ frame_cnt main::idx_y#3 main::idx_x#1 ] ) always clobbers reg byte a Statement [44] if((word) main::idx_y#1!=(word) $200) goto main::@13 [ frame_cnt main::idx_x#10 main::idx_y#1 ] ( main:3 [ frame_cnt main::idx_x#10 main::idx_y#1 ] ) always clobbers reg byte a Statement [47] *((const byte*) plots_per_frame + (byte) frame_cnt) ← ++ *((const byte*) plots_per_frame + (byte) frame_cnt) [ frame_cnt main::idx_x#10 main::idx_y#10 ] ( main:3 [ frame_cnt main::idx_x#10 main::idx_y#10 ] ) always clobbers reg byte x @@ -5720,105 +5673,106 @@ Statement [49] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff Statement [50] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:38 [ frame_cnt main::idx_x#3 main::idx_y#3 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a Statement [51] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::bitmap_plot:38 [ frame_cnt main::idx_x#3 main::idx_y#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a Statement [52] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte*) bitmap_plot_bit + (byte~) bitmap_plot::$2) [ ] ( main:3::bitmap_plot:38 [ frame_cnt main::idx_x#3 main::idx_y#3 ] ) always clobbers reg byte a reg byte y -Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a -Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a -Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:48 [ sin16s::isUpper#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:59 [ mulu16_sel::select#5 ] -Statement [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [87] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [98] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:32 [ memset::c#4 ] -Statement [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:32 [ memset::c#4 ] -Statement [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:37 [ bitmap_init::y#2 bitmap_init::y#1 ] -Statement [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a -Statement [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [198] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [200] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [202] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [203] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [204] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a -Statement [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:66 [ divr16u::i#2 divr16u::i#1 ] -Statement [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [222] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [224] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a -Statement [227] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a -Statement [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [229] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a +Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a +Statement [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:46 [ sin16s::isUpper#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:57 [ mulu16_sel::select#5 ] +Statement [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [88] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [99] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:30 [ memset::c#4 ] +Statement [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:30 [ memset::c#4 ] +Statement [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:35 [ bitmap_init::y#2 bitmap_init::y#1 ] +Statement [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a +Statement [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a +Statement [134] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a +Statement [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a +Statement [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y +Statement [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [194] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [199] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [201] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [203] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [204] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [205] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a +Statement [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:64 [ divr16u::i#2 divr16u::i#1 ] +Statement [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [223] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [225] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a +Statement [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [228] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a +Statement [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [230] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y Statement [1] (byte) frame_cnt ← (byte) 1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [11] *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a Statement [13] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a @@ -5848,330 +5802,329 @@ Statement [49] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff Statement [50] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:38 [ frame_cnt main::idx_x#3 main::idx_y#3 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a Statement [51] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::bitmap_plot:38 [ frame_cnt main::idx_x#3 main::idx_y#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a Statement [52] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte*) bitmap_plot_bit + (byte~) bitmap_plot::$2) [ ] ( main:3::bitmap_plot:38 [ frame_cnt main::idx_x#3 main::idx_y#3 ] ) always clobbers reg byte a reg byte y -Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a -Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a -Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:139 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:139::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177::mul16u:190 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [87] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [98] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Statement [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:93 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:95 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a -Statement [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Statement [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a -Statement [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:136 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:157 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:162 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:136::mulu16_sel:177 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [198] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [200] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [202] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [203] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [204] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:129 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a -Statement [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [222] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:129::divr16u:197 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:129::divr16u:201 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [224] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a -Statement [227] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a -Statement [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [229] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [56] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [59] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [60] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [61] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [62] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [63] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [65] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [66] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [67] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#5 mul16s::$17 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::m#2 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a +Statement [70] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:20 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::return#0 ] main:3::mul16s:30 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:140 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a +Statement [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:20::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:30::mul16u:57 [ frame_cnt main::idx_x#3 main::idx_y#3 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:140::mul16u:57 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178::mul16u:191 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [88] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [99] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Statement [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:94 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:96 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [117] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a +Statement [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a +Statement [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a +Statement [134] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a +Statement [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a +Statement [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y +Statement [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:137 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [194] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:158 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:163 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:173 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:137::mulu16_sel:178 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [199] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [201] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [203] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [204] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [205] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:130 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a +Statement [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [223] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:130::divr16u:198 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:130::divr16u:202 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [225] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a +Statement [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [228] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a +Statement [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [230] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y Potential registers zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] : zp[2]:4 , Potential registers zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] : zp[2]:6 , Potential registers zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] : zp[2]:8 , Potential registers zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] : zp[4]:10 , -Potential registers zp[2]:14 [ mul16u::b#0 ] : zp[2]:14 , -Potential registers zp[2]:16 [ mul16u::b#1 ] : zp[2]:16 , -Potential registers zp[2]:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:18 , -Potential registers zp[4]:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:20 , -Potential registers zp[4]:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:24 , -Potential registers zp[2]:28 [ memset::num#2 ] : zp[2]:28 , -Potential registers zp[2]:30 [ memset::str#3 ] : zp[2]:30 , -Potential registers zp[1]:32 [ memset::c#4 ] : zp[1]:32 , reg byte x , -Potential registers zp[2]:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:33 , -Potential registers zp[1]:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:36 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:37 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:37 , reg byte x , reg byte y , -Potential registers zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:38 , -Potential registers zp[2]:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:40 , -Potential registers zp[4]:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:42 , -Potential registers zp[2]:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:46 , -Potential registers zp[1]:48 [ sin16s::isUpper#2 ] : zp[1]:48 , reg byte x , reg byte y , -Potential registers zp[4]:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:49 , -Potential registers zp[2]:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:53 , -Potential registers zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] : zp[2]:55 , -Potential registers zp[2]:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp[2]:57 , -Potential registers zp[1]:59 [ mulu16_sel::select#5 ] : zp[1]:59 , reg byte x , reg byte y , -Potential registers zp[2]:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:60 , -Potential registers zp[2]:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:62 , -Potential registers zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:64 , -Potential registers zp[1]:66 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:66 , reg byte x , reg byte y , -Potential registers zp[1]:67 [ frame_cnt ] : zp[1]:67 , -Potential registers zp[2]:68 [ main::$22 ] : zp[2]:68 , -Potential registers zp[2]:70 [ main::$24 ] : zp[2]:70 , -Potential registers zp[2]:72 [ main::cos_x#0 ] : zp[2]:72 , -Potential registers zp[4]:74 [ mul16s::return#3 ] : zp[4]:74 , -Potential registers zp[4]:78 [ main::xpos#0 ] : zp[4]:78 , -Potential registers zp[4]:82 [ main::$6 ] : zp[4]:82 , -Potential registers zp[2]:86 [ main::$7 ] : zp[2]:86 , reg byte alu , -Potential registers zp[2]:88 [ main::x#0 ] : zp[2]:88 , -Potential registers zp[2]:90 [ main::$23 ] : zp[2]:90 , -Potential registers zp[2]:92 [ main::$25 ] : zp[2]:92 , -Potential registers zp[2]:94 [ main::sin_y#0 ] : zp[2]:94 , -Potential registers zp[4]:96 [ mul16s::return#4 ] : zp[4]:96 , -Potential registers zp[4]:100 [ main::ypos#0 ] : zp[4]:100 , -Potential registers zp[4]:104 [ main::$11 ] : zp[4]:104 , -Potential registers zp[2]:108 [ main::$12 ] : zp[2]:108 , reg byte alu , -Potential registers zp[2]:110 [ main::y#0 ] : zp[2]:110 , -Potential registers zp[1]:112 [ bitmap_plot::y#0 ] : zp[1]:112 , reg byte x , reg byte y , -Potential registers zp[2]:113 [ bitmap_plot::x#0 ] : zp[2]:113 , -Potential registers zp[2]:115 [ bitmap_plot::plotter#0 ] : zp[2]:115 , -Potential registers zp[2]:117 [ bitmap_plot::$1 ] : zp[2]:117 , -Potential registers zp[2]:119 [ bitmap_plot::plotter#1 ] : zp[2]:119 , -Potential registers zp[1]:121 [ bitmap_plot::$2 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:122 [ mul16u::return#2 ] : zp[4]:122 , -Potential registers zp[2]:126 [ mul16s::$9 ] : zp[2]:126 , -Potential registers zp[2]:128 [ mul16s::$16 ] : zp[2]:128 , -Potential registers zp[2]:130 [ mul16s::$13 ] : zp[2]:130 , -Potential registers zp[2]:132 [ mul16s::$17 ] : zp[2]:132 , -Potential registers zp[4]:134 [ mul16s::return#0 ] : zp[4]:134 , -Potential registers zp[1]:138 [ mul16u::$1 ] : zp[1]:138 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:139 [ memset::end#0 ] : zp[2]:139 , -Potential registers zp[1]:141 [ bitmap_init::$7 ] : zp[1]:141 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:142 [ bitmap_init::$4 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp[1]:143 [ bitmap_init::$5 ] : zp[1]:143 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:144 [ bitmap_init::$6 ] : zp[1]:144 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:145 [ div32u16u::return#2 ] : zp[4]:145 , -Potential registers zp[4]:149 [ sin16s_gen2::step#0 ] : zp[4]:149 , -Potential registers zp[2]:153 [ sin16s::return#0 ] : zp[2]:153 , -Potential registers zp[4]:155 [ mul16s::return#2 ] : zp[4]:155 , -Potential registers zp[4]:159 [ sin16s_gen2::$6 ] : zp[4]:159 , -Potential registers zp[2]:163 [ sin16s_gen2::$9 ] : zp[2]:163 , -Potential registers zp[4]:165 [ sin16s::$4 ] : zp[4]:165 , -Potential registers zp[2]:169 [ sin16s::x1#0 ] : zp[2]:169 , -Potential registers zp[2]:171 [ mulu16_sel::return#0 ] : zp[2]:171 , -Potential registers zp[2]:173 [ sin16s::x2#0 ] : zp[2]:173 , -Potential registers zp[2]:175 [ mulu16_sel::return#1 ] : zp[2]:175 , -Potential registers zp[2]:177 [ sin16s::x3#0 ] : zp[2]:177 , -Potential registers zp[2]:179 [ mulu16_sel::return#2 ] : zp[2]:179 , -Potential registers zp[2]:181 [ sin16s::x3_6#0 ] : zp[2]:181 , -Potential registers zp[2]:183 [ sin16s::usinx#0 ] : zp[2]:183 , -Potential registers zp[2]:185 [ mulu16_sel::return#10 ] : zp[2]:185 , -Potential registers zp[2]:187 [ sin16s::x4#0 ] : zp[2]:187 , -Potential registers zp[2]:189 [ mulu16_sel::return#11 ] : zp[2]:189 , -Potential registers zp[2]:191 [ sin16s::x5#0 ] : zp[2]:191 , -Potential registers zp[2]:193 [ sin16s::x5_128#0 ] : zp[2]:193 , -Potential registers zp[2]:195 [ sin16s::usinx#1 ] : zp[2]:195 , -Potential registers zp[4]:197 [ mul16u::return#3 ] : zp[4]:197 , -Potential registers zp[4]:201 [ mulu16_sel::$0 ] : zp[4]:201 , -Potential registers zp[4]:205 [ mulu16_sel::$1 ] : zp[4]:205 , -Potential registers zp[2]:209 [ mulu16_sel::return#12 ] : zp[2]:209 , -Potential registers zp[2]:211 [ divr16u::return#2 ] : zp[2]:211 , -Potential registers zp[2]:213 [ div32u16u::quotient_hi#0 ] : zp[2]:213 , -Potential registers zp[2]:215 [ divr16u::return#3 ] : zp[2]:215 , -Potential registers zp[2]:217 [ div32u16u::quotient_lo#0 ] : zp[2]:217 , -Potential registers zp[4]:219 [ div32u16u::return#0 ] : zp[4]:219 , -Potential registers zp[1]:223 [ divr16u::$1 ] : zp[1]:223 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:224 [ divr16u::$2 ] : zp[1]:224 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:225 [ rem16u#1 ] : zp[2]:225 , +Potential registers zp[2]:14 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] : zp[2]:14 , +Potential registers zp[2]:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:16 , +Potential registers zp[4]:18 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:18 , +Potential registers zp[4]:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:22 , +Potential registers zp[2]:26 [ memset::num#2 ] : zp[2]:26 , +Potential registers zp[2]:28 [ memset::str#3 ] : zp[2]:28 , +Potential registers zp[1]:30 [ memset::c#4 ] : zp[1]:30 , reg byte x , +Potential registers zp[2]:31 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:31 , +Potential registers zp[1]:33 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:35 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:35 , reg byte x , reg byte y , +Potential registers zp[2]:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:36 , +Potential registers zp[2]:38 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:38 , +Potential registers zp[4]:40 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:40 , +Potential registers zp[2]:44 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:44 , +Potential registers zp[1]:46 [ sin16s::isUpper#2 ] : zp[1]:46 , reg byte x , reg byte y , +Potential registers zp[4]:47 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:47 , +Potential registers zp[2]:51 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:51 , +Potential registers zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] : zp[2]:53 , +Potential registers zp[2]:55 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp[2]:55 , +Potential registers zp[1]:57 [ mulu16_sel::select#5 ] : zp[1]:57 , reg byte x , reg byte y , +Potential registers zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:58 , +Potential registers zp[2]:60 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:60 , +Potential registers zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:62 , +Potential registers zp[1]:64 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:64 , reg byte x , reg byte y , +Potential registers zp[1]:65 [ frame_cnt ] : zp[1]:65 , +Potential registers zp[2]:66 [ main::$22 ] : zp[2]:66 , +Potential registers zp[2]:68 [ main::$24 ] : zp[2]:68 , +Potential registers zp[2]:70 [ main::cos_x#0 ] : zp[2]:70 , +Potential registers zp[4]:72 [ mul16s::return#3 ] : zp[4]:72 , +Potential registers zp[4]:76 [ main::xpos#0 ] : zp[4]:76 , +Potential registers zp[4]:80 [ main::$6 ] : zp[4]:80 , +Potential registers zp[2]:84 [ main::$7 ] : zp[2]:84 , reg byte alu , +Potential registers zp[2]:86 [ main::x#0 ] : zp[2]:86 , +Potential registers zp[2]:88 [ main::$23 ] : zp[2]:88 , +Potential registers zp[2]:90 [ main::$25 ] : zp[2]:90 , +Potential registers zp[2]:92 [ main::sin_y#0 ] : zp[2]:92 , +Potential registers zp[4]:94 [ mul16s::return#4 ] : zp[4]:94 , +Potential registers zp[4]:98 [ main::ypos#0 ] : zp[4]:98 , +Potential registers zp[4]:102 [ main::$11 ] : zp[4]:102 , +Potential registers zp[2]:106 [ main::$12 ] : zp[2]:106 , reg byte alu , +Potential registers zp[2]:108 [ main::y#0 ] : zp[2]:108 , +Potential registers zp[1]:110 [ bitmap_plot::y#0 ] : zp[1]:110 , reg byte x , reg byte y , +Potential registers zp[2]:111 [ bitmap_plot::x#0 ] : zp[2]:111 , +Potential registers zp[2]:113 [ bitmap_plot::plotter#0 ] : zp[2]:113 , +Potential registers zp[2]:115 [ bitmap_plot::$1 ] : zp[2]:115 , +Potential registers zp[2]:117 [ bitmap_plot::plotter#1 ] : zp[2]:117 , +Potential registers zp[1]:119 [ bitmap_plot::$2 ] : zp[1]:119 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:120 [ mul16u::return#2 ] : zp[4]:120 , +Potential registers zp[2]:124 [ mul16s::$9 ] : zp[2]:124 , +Potential registers zp[2]:126 [ mul16s::$16 ] : zp[2]:126 , +Potential registers zp[2]:128 [ mul16s::$13 ] : zp[2]:128 , +Potential registers zp[2]:130 [ mul16s::$17 ] : zp[2]:130 , +Potential registers zp[4]:132 [ mul16s::return#0 ] : zp[4]:132 , +Potential registers zp[1]:136 [ mul16u::$1 ] : zp[1]:136 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:137 [ memset::end#0 ] : zp[2]:137 , +Potential registers zp[1]:139 [ bitmap_init::$7 ] : zp[1]:139 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:140 [ bitmap_init::$4 ] : zp[1]:140 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp[1]:141 [ bitmap_init::$5 ] : zp[1]:141 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:142 [ bitmap_init::$6 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:143 [ div32u16u::return#2 ] : zp[4]:143 , +Potential registers zp[4]:147 [ sin16s_gen2::step#0 ] : zp[4]:147 , +Potential registers zp[2]:151 [ sin16s::return#0 ] : zp[2]:151 , +Potential registers zp[4]:153 [ mul16s::return#2 ] : zp[4]:153 , +Potential registers zp[4]:157 [ sin16s_gen2::$6 ] : zp[4]:157 , +Potential registers zp[2]:161 [ sin16s_gen2::$9 ] : zp[2]:161 , +Potential registers zp[4]:163 [ sin16s::$4 ] : zp[4]:163 , +Potential registers zp[2]:167 [ sin16s::x1#0 ] : zp[2]:167 , +Potential registers zp[2]:169 [ mulu16_sel::return#0 ] : zp[2]:169 , +Potential registers zp[2]:171 [ sin16s::x2#0 ] : zp[2]:171 , +Potential registers zp[2]:173 [ mulu16_sel::return#1 ] : zp[2]:173 , +Potential registers zp[2]:175 [ sin16s::x3#0 ] : zp[2]:175 , +Potential registers zp[2]:177 [ mulu16_sel::return#2 ] : zp[2]:177 , +Potential registers zp[2]:179 [ sin16s::x3_6#0 ] : zp[2]:179 , +Potential registers zp[2]:181 [ sin16s::usinx#0 ] : zp[2]:181 , +Potential registers zp[2]:183 [ mulu16_sel::return#10 ] : zp[2]:183 , +Potential registers zp[2]:185 [ sin16s::x4#0 ] : zp[2]:185 , +Potential registers zp[2]:187 [ mulu16_sel::return#11 ] : zp[2]:187 , +Potential registers zp[2]:189 [ sin16s::x5#0 ] : zp[2]:189 , +Potential registers zp[2]:191 [ sin16s::x5_128#0 ] : zp[2]:191 , +Potential registers zp[2]:193 [ sin16s::usinx#1 ] : zp[2]:193 , +Potential registers zp[4]:195 [ mul16u::return#3 ] : zp[4]:195 , +Potential registers zp[4]:199 [ mulu16_sel::$0 ] : zp[4]:199 , +Potential registers zp[4]:203 [ mulu16_sel::$1 ] : zp[4]:203 , +Potential registers zp[2]:207 [ mulu16_sel::return#12 ] : zp[2]:207 , +Potential registers zp[2]:209 [ divr16u::return#2 ] : zp[2]:209 , +Potential registers zp[2]:211 [ div32u16u::quotient_hi#0 ] : zp[2]:211 , +Potential registers zp[2]:213 [ divr16u::return#3 ] : zp[2]:213 , +Potential registers zp[2]:215 [ div32u16u::quotient_lo#0 ] : zp[2]:215 , +Potential registers zp[4]:217 [ div32u16u::return#0 ] : zp[4]:217 , +Potential registers zp[1]:221 [ divr16u::$1 ] : zp[1]:221 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:222 [ divr16u::$2 ] : zp[1]:222 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:223 [ rem16u#1 ] : zp[2]:223 , REGISTER UPLIFT SCOPES -Uplift Scope [mul16u] 346.86: zp[4]:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 251.57: zp[4]:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:138 [ mul16u::$1 ] 178.67: zp[2]:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp[2]:14 [ mul16u::b#0 ] 4: zp[2]:16 [ mul16u::b#1 ] 4: zp[4]:122 [ mul16u::return#2 ] 4: zp[4]:197 [ mul16u::return#3 ] -Uplift Scope [main] 23.18: zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 22: zp[2]:68 [ main::$22 ] 22: zp[2]:70 [ main::$24 ] 22: zp[2]:72 [ main::cos_x#0 ] 22: zp[4]:78 [ main::xpos#0 ] 22: zp[4]:82 [ main::$6 ] 22: zp[2]:86 [ main::$7 ] 22: zp[2]:90 [ main::$23 ] 22: zp[2]:92 [ main::$25 ] 22: zp[2]:94 [ main::sin_y#0 ] 22: zp[4]:100 [ main::ypos#0 ] 22: zp[4]:104 [ main::$11 ] 22: zp[2]:108 [ main::$12 ] 16.04: zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] 11: zp[2]:110 [ main::y#0 ] 1.83: zp[2]:88 [ main::x#0 ] -Uplift Scope [divr16u] 106.92: zp[2]:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:223 [ divr16u::$1 ] 22: zp[1]:224 [ divr16u::$2 ] 18.19: zp[1]:66 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:211 [ divr16u::return#2 ] 4: zp[2]:215 [ divr16u::return#3 ] -Uplift Scope [bitmap_init] 39.88: zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp[1]:35 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp[1]:36 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp[1]:37 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp[1]:142 [ bitmap_init::$4 ] 22: zp[1]:143 [ bitmap_init::$5 ] 22: zp[1]:144 [ bitmap_init::$6 ] 5.5: zp[1]:141 [ bitmap_init::$7 ] -Uplift Scope [mul16s] 46.18: zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] 23: zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] 22: zp[4]:74 [ mul16s::return#3 ] 22: zp[4]:96 [ mul16s::return#4 ] 22: zp[4]:155 [ mul16s::return#2 ] 16.5: zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp[4]:134 [ mul16s::return#0 ] 4: zp[2]:126 [ mul16s::$9 ] 4: zp[2]:128 [ mul16s::$16 ] 4: zp[2]:130 [ mul16s::$13 ] 4: zp[2]:132 [ mul16s::$17 ] -Uplift Scope [sin16s] 27.5: zp[4]:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:153 [ sin16s::return#0 ] 13: zp[2]:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:165 [ sin16s::$4 ] 4: zp[2]:173 [ sin16s::x2#0 ] 4: zp[2]:181 [ sin16s::x3_6#0 ] 4: zp[2]:187 [ sin16s::x4#0 ] 4: zp[2]:191 [ sin16s::x5#0 ] 4: zp[2]:193 [ sin16s::x5_128#0 ] 1: zp[2]:177 [ sin16s::x3#0 ] 1: zp[2]:195 [ sin16s::usinx#1 ] 0.64: zp[2]:169 [ sin16s::x1#0 ] 0.33: zp[2]:183 [ sin16s::usinx#0 ] 0.06: zp[1]:48 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen2] 24.54: zp[2]:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp[4]:159 [ sin16s_gen2::$6 ] 13.75: zp[4]:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp[2]:163 [ sin16s_gen2::$9 ] 10.33: zp[2]:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp[4]:149 [ sin16s_gen2::step#0 ] -Uplift Scope [mulu16_sel] 24: zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:171 [ mulu16_sel::return#0 ] 4: zp[2]:175 [ mulu16_sel::return#1 ] 4: zp[2]:179 [ mulu16_sel::return#2 ] 4: zp[2]:185 [ mulu16_sel::return#10 ] 4: zp[2]:189 [ mulu16_sel::return#11 ] 4: zp[4]:201 [ mulu16_sel::$0 ] 4: zp[4]:205 [ mulu16_sel::$1 ] 1.71: zp[2]:209 [ mulu16_sel::return#12 ] 0.33: zp[1]:59 [ mulu16_sel::select#5 ] -Uplift Scope [memset] 41.33: zp[2]:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:139 [ memset::end#0 ] 2: zp[2]:28 [ memset::num#2 ] 1.38: zp[1]:32 [ memset::c#4 ] 0: zp[2]:30 [ memset::str#3 ] -Uplift Scope [bitmap_plot] 7.5: zp[1]:112 [ bitmap_plot::y#0 ] 4: zp[2]:117 [ bitmap_plot::$1 ] 4: zp[1]:121 [ bitmap_plot::$2 ] 3.75: zp[2]:113 [ bitmap_plot::x#0 ] 3: zp[2]:119 [ bitmap_plot::plotter#1 ] 1: zp[2]:115 [ bitmap_plot::plotter#0 ] -Uplift Scope [div32u16u] 4: zp[4]:145 [ div32u16u::return#2 ] 4: zp[2]:217 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:219 [ div32u16u::return#0 ] 0.8: zp[2]:213 [ div32u16u::quotient_hi#0 ] -Uplift Scope [] 0.8: zp[2]:225 [ rem16u#1 ] 0.65: zp[1]:67 [ frame_cnt ] +Uplift Scope [mul16u] 346.86: zp[4]:18 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:136 [ mul16u::$1 ] 175.67: zp[2]:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 12: zp[2]:14 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] 4: zp[4]:120 [ mul16u::return#2 ] 4: zp[4]:195 [ mul16u::return#3 ] +Uplift Scope [main] 23.18: zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 22: zp[2]:66 [ main::$22 ] 22: zp[2]:68 [ main::$24 ] 22: zp[2]:70 [ main::cos_x#0 ] 22: zp[4]:76 [ main::xpos#0 ] 22: zp[4]:80 [ main::$6 ] 22: zp[2]:84 [ main::$7 ] 22: zp[2]:88 [ main::$23 ] 22: zp[2]:90 [ main::$25 ] 22: zp[2]:92 [ main::sin_y#0 ] 22: zp[4]:98 [ main::ypos#0 ] 22: zp[4]:102 [ main::$11 ] 22: zp[2]:106 [ main::$12 ] 16.04: zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] 11: zp[2]:108 [ main::y#0 ] 1.83: zp[2]:86 [ main::x#0 ] +Uplift Scope [divr16u] 106.92: zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:221 [ divr16u::$1 ] 22: zp[1]:222 [ divr16u::$2 ] 18.19: zp[1]:64 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:60 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:209 [ divr16u::return#2 ] 4: zp[2]:213 [ divr16u::return#3 ] +Uplift Scope [bitmap_init] 39.88: zp[2]:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp[1]:33 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp[1]:34 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp[1]:35 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp[1]:140 [ bitmap_init::$4 ] 22: zp[1]:141 [ bitmap_init::$5 ] 22: zp[1]:142 [ bitmap_init::$6 ] 5.5: zp[1]:139 [ bitmap_init::$7 ] +Uplift Scope [mul16s] 46.18: zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] 23: zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] 22: zp[4]:72 [ mul16s::return#3 ] 22: zp[4]:94 [ mul16s::return#4 ] 22: zp[4]:153 [ mul16s::return#2 ] 16.5: zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp[4]:132 [ mul16s::return#0 ] 4: zp[2]:124 [ mul16s::$9 ] 4: zp[2]:126 [ mul16s::$16 ] 4: zp[2]:128 [ mul16s::$13 ] 4: zp[2]:130 [ mul16s::$17 ] +Uplift Scope [sin16s] 27.5: zp[4]:47 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:151 [ sin16s::return#0 ] 13: zp[2]:51 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:163 [ sin16s::$4 ] 4: zp[2]:171 [ sin16s::x2#0 ] 4: zp[2]:179 [ sin16s::x3_6#0 ] 4: zp[2]:185 [ sin16s::x4#0 ] 4: zp[2]:189 [ sin16s::x5#0 ] 4: zp[2]:191 [ sin16s::x5_128#0 ] 1: zp[2]:175 [ sin16s::x3#0 ] 1: zp[2]:193 [ sin16s::usinx#1 ] 0.64: zp[2]:167 [ sin16s::x1#0 ] 0.33: zp[2]:181 [ sin16s::usinx#0 ] 0.06: zp[1]:46 [ sin16s::isUpper#2 ] +Uplift Scope [sin16s_gen2] 24.54: zp[2]:38 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp[4]:157 [ sin16s_gen2::$6 ] 13.75: zp[4]:40 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp[2]:161 [ sin16s_gen2::$9 ] 10.33: zp[2]:44 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp[4]:147 [ sin16s_gen2::step#0 ] +Uplift Scope [mulu16_sel] 24: zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:55 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:169 [ mulu16_sel::return#0 ] 4: zp[2]:173 [ mulu16_sel::return#1 ] 4: zp[2]:177 [ mulu16_sel::return#2 ] 4: zp[2]:183 [ mulu16_sel::return#10 ] 4: zp[2]:187 [ mulu16_sel::return#11 ] 4: zp[4]:199 [ mulu16_sel::$0 ] 4: zp[4]:203 [ mulu16_sel::$1 ] 1.71: zp[2]:207 [ mulu16_sel::return#12 ] 0.33: zp[1]:57 [ mulu16_sel::select#5 ] +Uplift Scope [memset] 41.33: zp[2]:31 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:137 [ memset::end#0 ] 2: zp[2]:26 [ memset::num#2 ] 1.38: zp[1]:30 [ memset::c#4 ] 0: zp[2]:28 [ memset::str#3 ] +Uplift Scope [bitmap_plot] 7.5: zp[1]:110 [ bitmap_plot::y#0 ] 4: zp[2]:115 [ bitmap_plot::$1 ] 4: zp[1]:119 [ bitmap_plot::$2 ] 3.75: zp[2]:111 [ bitmap_plot::x#0 ] 3: zp[2]:117 [ bitmap_plot::plotter#1 ] 1: zp[2]:113 [ bitmap_plot::plotter#0 ] +Uplift Scope [div32u16u] 4: zp[4]:143 [ div32u16u::return#2 ] 4: zp[2]:215 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:217 [ div32u16u::return#0 ] 0.8: zp[2]:211 [ div32u16u::quotient_hi#0 ] +Uplift Scope [] 0.8: zp[2]:223 [ rem16u#1 ] 0.65: zp[1]:65 [ frame_cnt ] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] -Uplifting [mul16u] best 27221 combination zp[4]:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:14 [ mul16u::b#0 ] zp[2]:16 [ mul16u::b#1 ] zp[4]:122 [ mul16u::return#2 ] zp[4]:197 [ mul16u::return#3 ] -Uplifting [main] best 26981 combination zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:68 [ main::$22 ] zp[2]:70 [ main::$24 ] zp[2]:72 [ main::cos_x#0 ] zp[4]:78 [ main::xpos#0 ] zp[4]:82 [ main::$6 ] reg byte alu [ main::$7 ] zp[2]:90 [ main::$23 ] zp[2]:92 [ main::$25 ] zp[2]:94 [ main::sin_y#0 ] zp[4]:100 [ main::ypos#0 ] zp[4]:104 [ main::$11 ] reg byte alu [ main::$12 ] zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp[2]:110 [ main::y#0 ] zp[2]:88 [ main::x#0 ] -Uplifting [divr16u] best 26771 combination zp[2]:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:211 [ divr16u::return#2 ] zp[2]:215 [ divr16u::return#3 ] -Uplifting [bitmap_init] best 26261 combination zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:143 [ bitmap_init::$5 ] zp[1]:144 [ bitmap_init::$6 ] zp[1]:141 [ bitmap_init::$7 ] +Uplifting [mul16u] best 27641 combination zp[4]:18 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:14 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:120 [ mul16u::return#2 ] zp[4]:195 [ mul16u::return#3 ] +Uplifting [main] best 27401 combination zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:66 [ main::$22 ] zp[2]:68 [ main::$24 ] zp[2]:70 [ main::cos_x#0 ] zp[4]:76 [ main::xpos#0 ] zp[4]:80 [ main::$6 ] reg byte alu [ main::$7 ] zp[2]:88 [ main::$23 ] zp[2]:90 [ main::$25 ] zp[2]:92 [ main::sin_y#0 ] zp[4]:98 [ main::ypos#0 ] zp[4]:102 [ main::$11 ] reg byte alu [ main::$12 ] zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp[2]:108 [ main::y#0 ] zp[2]:86 [ main::x#0 ] +Uplifting [divr16u] best 27191 combination zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:60 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:209 [ divr16u::return#2 ] zp[2]:213 [ divr16u::return#3 ] +Uplifting [bitmap_init] best 26681 combination zp[2]:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:141 [ bitmap_init::$5 ] zp[1]:142 [ bitmap_init::$6 ] zp[1]:139 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [mul16s] best 26261 combination zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] zp[4]:74 [ mul16s::return#3 ] zp[4]:96 [ mul16s::return#4 ] zp[4]:155 [ mul16s::return#2 ] zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[4]:134 [ mul16s::return#0 ] zp[2]:126 [ mul16s::$9 ] zp[2]:128 [ mul16s::$16 ] zp[2]:130 [ mul16s::$13 ] zp[2]:132 [ mul16s::$17 ] -Uplifting [sin16s] best 26252 combination zp[4]:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:153 [ sin16s::return#0 ] zp[2]:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:165 [ sin16s::$4 ] zp[2]:173 [ sin16s::x2#0 ] zp[2]:181 [ sin16s::x3_6#0 ] zp[2]:187 [ sin16s::x4#0 ] zp[2]:191 [ sin16s::x5#0 ] zp[2]:193 [ sin16s::x5_128#0 ] zp[2]:177 [ sin16s::x3#0 ] zp[2]:195 [ sin16s::usinx#1 ] zp[2]:169 [ sin16s::x1#0 ] zp[2]:183 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 26252 combination zp[2]:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:159 [ sin16s_gen2::$6 ] zp[4]:42 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:163 [ sin16s_gen2::$9 ] zp[2]:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:149 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 26236 combination zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:171 [ mulu16_sel::return#0 ] zp[2]:175 [ mulu16_sel::return#1 ] zp[2]:179 [ mulu16_sel::return#2 ] zp[2]:185 [ mulu16_sel::return#10 ] zp[2]:189 [ mulu16_sel::return#11 ] zp[4]:201 [ mulu16_sel::$0 ] zp[4]:205 [ mulu16_sel::$1 ] zp[2]:209 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [memset] best 26220 combination zp[2]:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:139 [ memset::end#0 ] zp[2]:28 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp[2]:30 [ memset::str#3 ] -Uplifting [bitmap_plot] best 26203 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:117 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:113 [ bitmap_plot::x#0 ] zp[2]:119 [ bitmap_plot::plotter#1 ] zp[2]:115 [ bitmap_plot::plotter#0 ] -Uplifting [div32u16u] best 26203 combination zp[4]:145 [ div32u16u::return#2 ] zp[2]:217 [ div32u16u::quotient_lo#0 ] zp[4]:219 [ div32u16u::return#0 ] zp[2]:213 [ div32u16u::quotient_hi#0 ] -Uplifting [] best 26203 combination zp[2]:225 [ rem16u#1 ] zp[1]:67 [ frame_cnt ] -Uplifting [bitmap_clear] best 26203 combination -Uplifting [init_irq] best 26203 combination -Uplifting [irq] best 26203 combination -Attempting to uplift remaining variables inzp[1]:143 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 26143 combination reg byte a [ bitmap_init::$5 ] -Attempting to uplift remaining variables inzp[1]:144 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 26083 combination reg byte a [ bitmap_init::$6 ] -Attempting to uplift remaining variables inzp[1]:141 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 26083 combination zp[1]:141 [ bitmap_init::$7 ] -Attempting to uplift remaining variables inzp[1]:67 [ frame_cnt ] -Uplifting [] best 26083 combination zp[1]:67 [ frame_cnt ] -Coalescing zero page register [ zp[2]:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:195 [ sin16s::usinx#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:177 [ sin16s::x3#0 ] ] - score: 2 -Coalescing zero page register [ zp[2]:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:225 [ rem16u#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] ] with [ zp[2]:132 [ mul16s::$17 ] ] - score: 1 -Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 ] ] with [ zp[2]:153 [ sin16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] ] with [ zp[2]:72 [ main::cos_x#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 ] ] with [ zp[2]:94 [ main::sin_y#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] ] with [ zp[4]:122 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 ] ] with [ zp[4]:134 [ mul16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:16 [ mul16u::b#1 ] ] with [ zp[2]:57 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 -Coalescing zero page register [ zp[4]:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:197 [ mul16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:28 [ memset::num#2 ] ] with [ zp[2]:139 [ memset::end#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:30 [ memset::str#3 ] ] with [ zp[2]:33 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:173 [ sin16s::x2#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:187 [ sin16s::x4#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:211 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:215 [ divr16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:68 [ main::$22 ] ] with [ zp[2]:70 [ main::$24 ] ] - score: 1 -Coalescing zero page register [ zp[4]:74 [ mul16s::return#3 ] ] with [ zp[4]:78 [ main::xpos#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:88 [ main::x#0 ] ] with [ zp[2]:113 [ bitmap_plot::x#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:90 [ main::$23 ] ] with [ zp[2]:92 [ main::$25 ] ] - score: 1 -Coalescing zero page register [ zp[4]:96 [ mul16s::return#4 ] ] with [ zp[4]:100 [ main::ypos#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:115 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:119 [ bitmap_plot::plotter#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:126 [ mul16s::$9 ] ] with [ zp[2]:128 [ mul16s::$16 ] ] - score: 1 -Coalescing zero page register [ zp[4]:145 [ div32u16u::return#2 ] ] with [ zp[4]:149 [ sin16s_gen2::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:145 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp[4]:219 [ div32u16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:155 [ mul16s::return#2 ] ] with [ zp[4]:159 [ sin16s_gen2::$6 ] ] - score: 1 -Coalescing zero page register [ zp[2]:171 [ mulu16_sel::return#0 ] ] with [ zp[2]:209 [ mulu16_sel::return#12 ] ] - score: 1 -Coalescing zero page register [ zp[2]:179 [ mulu16_sel::return#2 ] ] with [ zp[2]:181 [ sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:189 [ mulu16_sel::return#11 ] ] with [ zp[2]:191 [ sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:201 [ mulu16_sel::$0 ] ] with [ zp[4]:205 [ mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 ] ] with [ zp[2]:53 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 ] ] with [ zp[2]:68 [ main::$22 main::$24 ] ] - score: 1 -Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 ] ] with [ zp[2]:90 [ main::$23 main::$25 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:20 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:74 [ mul16s::return#3 main::xpos#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 ] ] with [ zp[4]:96 [ mul16s::return#4 main::ypos#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 ] ] with [ zp[4]:155 [ mul16s::return#2 sin16s_gen2::$6 ] ] - score: 1 -Coalescing zero page register [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:175 [ mulu16_sel::return#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:185 [ mulu16_sel::return#10 ] ] - score: 1 -Coalescing zero page register [ zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:217 [ div32u16u::quotient_lo#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:171 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:179 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:171 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:189 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:183 [ sin16s::usinx#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 ] ] with [ zp[4]:82 [ main::$6 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 ] ] with [ zp[4]:104 [ main::$11 ] ] - score: 1 -Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 ] ] with [ zp[4]:201 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:171 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:193 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:16 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] ] -Coalescing zero page register [ zp[2]:28 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] -Coalescing zero page register [ zp[2]:30 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ] -Coalescing zero page register [ zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] ] -Coalescing zero page register [ zp[4]:49 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] ] -Coalescing zero page register [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:14 [ mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:60 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:18 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp[2]:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:40 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] -Coalescing zero page register [ zp[2]:64 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:46 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] -Coalescing zero page register [ zp[2]:115 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:110 [ main::y#0 ] ] -Coalescing zero page register [ zp[2]:126 [ mul16s::$9 mul16s::$16 ] ] with [ zp[2]:117 [ bitmap_plot::$1 ] ] -Coalescing zero page register [ zp[2]:163 [ sin16s_gen2::$9 ] ] with [ zp[2]:88 [ main::x#0 bitmap_plot::x#0 ] ] -Coalescing zero page register [ zp[4]:165 [ sin16s::$4 ] ] with [ zp[4]:24 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] -Coalescing zero page register [ zp[2]:169 [ sin16s::x1#0 ] ] with [ zp[2]:130 [ mul16s::$13 ] ] -Coalescing zero page register [ zp[2]:213 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:171 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] -Coalescing zero page register [ zp[2]:62 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:28 [ memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] -Coalescing zero page register [ zp[2]:115 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 ] ] with [ zp[2]:30 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ] -Coalescing zero page register [ zp[2]:126 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp[2]:55 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:213 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] ] -Allocated (was zp[2]:16) zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] -Allocated (was zp[4]:42) zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated (was zp[4]:49) zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] -Allocated (was zp[2]:60) zp[2]:12 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated (was zp[2]:62) zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -Allocated (was zp[2]:64) zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] -Allocated (was zp[1]:67) zp[1]:18 [ frame_cnt ] -Allocated (was zp[2]:115) zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] -Allocated (was zp[2]:126) zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] -Allocated (was zp[1]:141) zp[1]:23 [ bitmap_init::$7 ] -Allocated (was zp[4]:145) zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -Allocated (was zp[2]:163) zp[2]:28 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ] -Allocated (was zp[4]:165) zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -Allocated (was zp[2]:169) zp[2]:34 [ sin16s::x1#0 mul16s::$13 ] -Allocated (was zp[2]:213) zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] +Uplifting [mul16s] best 26681 combination zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] zp[4]:72 [ mul16s::return#3 ] zp[4]:94 [ mul16s::return#4 ] zp[4]:153 [ mul16s::return#2 ] zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[4]:132 [ mul16s::return#0 ] zp[2]:124 [ mul16s::$9 ] zp[2]:126 [ mul16s::$16 ] zp[2]:128 [ mul16s::$13 ] zp[2]:130 [ mul16s::$17 ] +Uplifting [sin16s] best 26672 combination zp[4]:47 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:151 [ sin16s::return#0 ] zp[2]:51 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:163 [ sin16s::$4 ] zp[2]:171 [ sin16s::x2#0 ] zp[2]:179 [ sin16s::x3_6#0 ] zp[2]:185 [ sin16s::x4#0 ] zp[2]:189 [ sin16s::x5#0 ] zp[2]:191 [ sin16s::x5_128#0 ] zp[2]:175 [ sin16s::x3#0 ] zp[2]:193 [ sin16s::usinx#1 ] zp[2]:167 [ sin16s::x1#0 ] zp[2]:181 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16s_gen2] best 26672 combination zp[2]:38 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:157 [ sin16s_gen2::$6 ] zp[4]:40 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:161 [ sin16s_gen2::$9 ] zp[2]:44 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:147 [ sin16s_gen2::step#0 ] +Uplifting [mulu16_sel] best 26656 combination zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:55 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:169 [ mulu16_sel::return#0 ] zp[2]:173 [ mulu16_sel::return#1 ] zp[2]:177 [ mulu16_sel::return#2 ] zp[2]:183 [ mulu16_sel::return#10 ] zp[2]:187 [ mulu16_sel::return#11 ] zp[4]:199 [ mulu16_sel::$0 ] zp[4]:203 [ mulu16_sel::$1 ] zp[2]:207 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [memset] best 26640 combination zp[2]:31 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:137 [ memset::end#0 ] zp[2]:26 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp[2]:28 [ memset::str#3 ] +Uplifting [bitmap_plot] best 26623 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:115 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:111 [ bitmap_plot::x#0 ] zp[2]:117 [ bitmap_plot::plotter#1 ] zp[2]:113 [ bitmap_plot::plotter#0 ] +Uplifting [div32u16u] best 26623 combination zp[4]:143 [ div32u16u::return#2 ] zp[2]:215 [ div32u16u::quotient_lo#0 ] zp[4]:217 [ div32u16u::return#0 ] zp[2]:211 [ div32u16u::quotient_hi#0 ] +Uplifting [] best 26623 combination zp[2]:223 [ rem16u#1 ] zp[1]:65 [ frame_cnt ] +Uplifting [bitmap_clear] best 26623 combination +Uplifting [init_irq] best 26623 combination +Uplifting [irq] best 26623 combination +Attempting to uplift remaining variables inzp[1]:141 [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 26563 combination reg byte a [ bitmap_init::$5 ] +Attempting to uplift remaining variables inzp[1]:142 [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 26503 combination reg byte a [ bitmap_init::$6 ] +Attempting to uplift remaining variables inzp[1]:139 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 26503 combination zp[1]:139 [ bitmap_init::$7 ] +Attempting to uplift remaining variables inzp[1]:65 [ frame_cnt ] +Uplifting [] best 26503 combination zp[1]:65 [ frame_cnt ] +Coalescing zero page register [ zp[2]:51 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:193 [ sin16s::usinx#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:175 [ sin16s::x3#0 ] ] - score: 2 +Coalescing zero page register [ zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:223 [ rem16u#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 ] ] with [ zp[2]:130 [ mul16s::$17 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 ] ] with [ zp[2]:151 [ sin16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 ] ] with [ zp[2]:70 [ main::cos_x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 ] ] with [ zp[2]:92 [ main::sin_y#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] ] with [ zp[4]:120 [ mul16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 ] ] with [ zp[4]:132 [ mul16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:14 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] ] with [ zp[2]:55 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 +Coalescing zero page register [ zp[4]:18 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:195 [ mul16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ memset::num#2 ] ] with [ zp[2]:137 [ memset::end#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:28 [ memset::str#3 ] ] with [ zp[2]:31 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:171 [ sin16s::x2#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:185 [ sin16s::x4#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:209 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:213 [ divr16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:66 [ main::$22 ] ] with [ zp[2]:68 [ main::$24 ] ] - score: 1 +Coalescing zero page register [ zp[4]:72 [ mul16s::return#3 ] ] with [ zp[4]:76 [ main::xpos#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:86 [ main::x#0 ] ] with [ zp[2]:111 [ bitmap_plot::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:88 [ main::$23 ] ] with [ zp[2]:90 [ main::$25 ] ] - score: 1 +Coalescing zero page register [ zp[4]:94 [ mul16s::return#4 ] ] with [ zp[4]:98 [ main::ypos#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:113 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:117 [ bitmap_plot::plotter#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:124 [ mul16s::$9 ] ] with [ zp[2]:126 [ mul16s::$16 ] ] - score: 1 +Coalescing zero page register [ zp[4]:143 [ div32u16u::return#2 ] ] with [ zp[4]:147 [ sin16s_gen2::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:143 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp[4]:217 [ div32u16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:153 [ mul16s::return#2 ] ] with [ zp[4]:157 [ sin16s_gen2::$6 ] ] - score: 1 +Coalescing zero page register [ zp[2]:169 [ mulu16_sel::return#0 ] ] with [ zp[2]:207 [ mulu16_sel::return#12 ] ] - score: 1 +Coalescing zero page register [ zp[2]:177 [ mulu16_sel::return#2 ] ] with [ zp[2]:179 [ sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:187 [ mulu16_sel::return#11 ] ] with [ zp[2]:189 [ sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:199 [ mulu16_sel::$0 ] ] with [ zp[4]:203 [ mulu16_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 ] ] with [ zp[2]:51 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 ] ] with [ zp[2]:66 [ main::$22 main::$24 ] ] - score: 1 +Coalescing zero page register [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 ] ] with [ zp[2]:88 [ main::$23 main::$25 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:18 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:72 [ mul16s::return#3 main::xpos#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 ] ] with [ zp[4]:94 [ mul16s::return#4 main::ypos#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 ] ] with [ zp[4]:153 [ mul16s::return#2 sin16s_gen2::$6 ] ] - score: 1 +Coalescing zero page register [ zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:173 [ mulu16_sel::return#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:183 [ mulu16_sel::return#10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:215 [ div32u16u::quotient_lo#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:169 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:177 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:169 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:187 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:181 [ sin16s::usinx#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 ] ] with [ zp[4]:80 [ main::$6 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 ] ] with [ zp[4]:102 [ main::$11 ] ] - score: 1 +Coalescing zero page register [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 ] ] with [ zp[4]:199 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:169 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:191 [ sin16s::x5_128#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] ] +Coalescing zero page register [ zp[2]:28 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] +Coalescing zero page register [ zp[2]:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp[2]:6 [ mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ] +Coalescing zero page register [ zp[4]:47 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:10 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] ] +Coalescing zero page register [ zp[2]:53 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:8 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] ] +Coalescing zero page register [ zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:14 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] +Coalescing zero page register [ zp[2]:60 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:38 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] +Coalescing zero page register [ zp[2]:86 [ main::x#0 bitmap_plot::x#0 ] ] with [ zp[2]:44 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] +Coalescing zero page register [ zp[2]:113 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:108 [ main::y#0 ] ] +Coalescing zero page register [ zp[2]:124 [ mul16s::$9 mul16s::$16 ] ] with [ zp[2]:115 [ bitmap_plot::$1 ] ] +Coalescing zero page register [ zp[2]:161 [ sin16s_gen2::$9 ] ] with [ zp[2]:128 [ mul16s::$13 ] ] +Coalescing zero page register [ zp[4]:163 [ sin16s::$4 ] ] with [ zp[4]:22 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] +Coalescing zero page register [ zp[2]:211 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:167 [ sin16s::x1#0 ] ] +Coalescing zero page register [ zp[2]:62 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:26 [ memset::num#2 memset::end#0 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] ] +Coalescing zero page register [ zp[2]:113 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 ] ] with [ zp[2]:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] ] +Coalescing zero page register [ zp[2]:124 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp[2]:58 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] +Coalescing zero page register [ zp[2]:161 [ sin16s_gen2::$9 mul16s::$13 ] ] with [ zp[2]:60 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:169 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:28 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] +Allocated (was zp[4]:40) zp[4]:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated (was zp[4]:47) zp[4]:6 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] +Allocated (was zp[2]:53) zp[2]:10 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] +Allocated (was zp[2]:62) zp[2]:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] +Allocated (was zp[1]:65) zp[1]:14 [ frame_cnt ] +Allocated (was zp[2]:86) zp[2]:15 [ main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated (was zp[2]:113) zp[2]:17 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] +Allocated (was zp[2]:124) zp[2]:19 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +Allocated (was zp[1]:139) zp[1]:21 [ bitmap_init::$7 ] +Allocated (was zp[4]:143) zp[4]:22 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] +Allocated (was zp[2]:161) zp[2]:26 [ sin16s_gen2::$9 mul16s::$13 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +Allocated (was zp[4]:163) zp[4]:28 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated (was zp[2]:169) zp[2]:32 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +Allocated (was zp[2]:211) zp[2]:34 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] Interrupt procedure irq clobbers ACNZ -Removing interrupt register storage stx regx+1 in CHU421 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in CHU421 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in CHU430 [229] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in CHU430 [229] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in CHU430 [229] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in CHU430 [229] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage stx regx+1 in CHU422 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage sty regy+1 in CHU422 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regx: in CHU431 [230] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldx #00 in CHU431 [230] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regy: in CHU431 [230] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldy #00 in CHU431 [230] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -6222,9 +6175,9 @@ ASSEMBLER BEFORE OPTIMIZATION .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $12 + .label frame_cnt = $e // Remainder after unsigned 16-bit division - .label rem16u = $c + .label rem16u = $13 // @begin __bbegin: jmp __b1 @@ -6251,22 +6204,22 @@ __bend: // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __6 = 8 - .label __11 = 8 - .label __22 = $24 - .label __23 = $24 - .label cos_x = $24 - .label xpos = 8 - .label x = $1c - .label sin_y = $24 - .label ypos = 8 - .label y = $13 - .label idx_x = 2 - .label idx_y = $e - .label __24 = $24 - .label __25 = $24 + .label __6 = 6 + .label __11 = 6 + .label __22 = $a + .label __23 = $a + .label cos_x = $a + .label xpos = 6 + .label x = $f + .label sin_y = $a + .label ypos = 6 + .label y = $11 + .label idx_x = $c + .label idx_y = $20 + .label __24 = $a + .label __25 = $a // [6] call sin16s_gen2 - // [128] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] + // [129] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] sin16s_gen2_from_main: jsr sin16s_gen2 // [7] phi from main to main::@6 [phi:main->main::@6] @@ -6275,7 +6228,7 @@ main: { // main::@6 __b6: // [8] call bitmap_init - // [106] phi from main::@6 to bitmap_init [phi:main::@6->bitmap_init] + // [107] phi from main::@6 to bitmap_init [phi:main::@6->bitmap_init] bitmap_init_from___b6: jsr bitmap_init // [9] phi from main::@6 to main::@7 [phi:main::@6->main::@7] @@ -6284,7 +6237,7 @@ main: { // main::@7 __b7: // [10] call bitmap_clear - // [92] phi from main::@7 to bitmap_clear [phi:main::@7->bitmap_clear] + // [93] phi from main::@7 to bitmap_clear [phi:main::@7->bitmap_clear] bitmap_clear_from___b7: jsr bitmap_clear jmp __b8 @@ -6308,12 +6261,12 @@ main: { jsr init_irq // [15] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: - // [15] phi (word) main::idx_y#3 = (byte) $80 [phi:main::@5->main::@1#0] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_y#3 = (word) $80 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 lda #<$80 sta.z idx_y lda #>$80 sta.z idx_y+1 - // [15] phi (word) main::idx_x#3 = (byte) 0 [phi:main::@5->main::@1#1] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_x#3 = (word) 0 [phi:main::@5->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z idx_x lda #>0 @@ -6538,11 +6491,11 @@ main: { } // bitmap_plot // Plot a single dot in the bitmap -// bitmap_plot(word zp($1c) x, byte register(X) y) +// bitmap_plot(word zp($f) x, byte register(X) y) bitmap_plot: { - .label __1 = $15 - .label plotter = $13 - .label x = $1c + .label __1 = $13 + .label plotter = $11 + .label x = $f // [48] (word) bitmap_plot::plotter#0 ← *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#0) w= *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#0) -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx lda bitmap_plot_yhi,x sta.z plotter+1 @@ -6581,16 +6534,16 @@ bitmap_plot: { // mul16s // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp($13) a, signed word zp($24) b) +// mul16s(signed word zp($11) a, signed word zp($a) b) mul16s: { - .label __9 = $15 - .label __13 = $22 - .label __16 = $15 - .label __17 = $13 - .label m = 8 - .label return = 8 - .label a = $13 - .label b = $24 + .label __9 = $13 + .label __13 = $1a + .label __16 = $13 + .label __17 = $11 + .label m = 6 + .label return = 6 + .label a = $11 + .label b = $a // [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a @@ -6605,14 +6558,7 @@ mul16s: { // [72] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [72] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [72] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [72] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b5 @@ -6690,29 +6636,38 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($c) a, word zp($15) b) +// mul16u(word zp($1a) a, word zp($13) b) mul16u: { - .label mb = $1e - .label a = $c - .label res = 8 - .label b = $15 - .label return = 8 - .label b_1 = 2 - // [73] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + .label mb = $1c + .label a = $1a + .label res = 6 + .label b = $13 + .label return = 6 + // [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [74] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [73] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [73] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [74] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [74] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [73] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [74] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -6720,20 +6675,20 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [75] return + // [76] return rts // mul16u::@2 __b2: - // [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a - // [77] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [78] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -6747,26 +6702,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [79] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [80] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [79] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [80] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [80] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [81] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [81] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [82] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [73] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [74] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [73] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [73] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [73] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [74] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [74] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [74] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // init_irq @@ -6774,30 +6729,30 @@ mul16u: { init_irq: { // asm { sei } sei - // [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 ora VIC_CONTROL sta VIC_CONTROL - // [87] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [88] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta RASTER - // [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 + // [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #memset] + // [94] call memset + // [98] phi from bitmap_clear to memset [phi:bitmap_clear->memset] memset_from_bitmap_clear: - // [97] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 + // [98] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 ldx #col - // [97] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [98] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [97] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [98] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [94] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [95] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] __b1_from_bitmap_clear: jmp __b1 // bitmap_clear::@1 __b1: - // [95] call memset - // [97] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [96] call memset + // [98] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] memset_from___b1: - // [97] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 + // [98] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 ldx #0 - // [97] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [98] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [97] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [98] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -6857,18 +6812,18 @@ bitmap_clear: { jmp __breturn // bitmap_clear::@return __breturn: - // [96] return + // [97] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($13) str, byte register(X) c, word zp($e) num) +// memset(void* zp($20) str, byte register(X) c, word zp($c) num) memset: { - .label end = $e - .label dst = $13 - .label num = $e - .label str = $13 - // [98] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + .label end = $c + .label dst = $20 + .label num = $c + .label str = $20 + // [99] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -6877,7 +6832,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda.z end clc adc.z str @@ -6885,15 +6840,15 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [101] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [102] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [101] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -6903,15 +6858,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [103] return + // [104] return rts // memset::@3 __b3: - // [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [105] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -6921,88 +6876,88 @@ memset: { // bitmap_init // Initialize bitmap plotting tables bitmap_init: { - .label __7 = $17 - .label yoffs = $24 - // [107] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + .label __7 = $15 + .label yoffs = $11 + // [108] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] __b1_from_bitmap_init: - // [107] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + // [108] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [107] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + // [108] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 jmp __b1 - // [107] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [108] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] __b1_from___b2: - // [107] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [107] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [108] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [108] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp __b1 // bitmap_init::@1 __b1: - // [108] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa + // [109] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x - // [109] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // [110] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 lsr - // [110] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 + // [111] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6_from___b1 - // [112] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [113] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] __b2_from___b1: - // [112] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + // [113] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 jmp __b2 - // [111] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [112] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] __b6_from___b1: jmp __b6 // bitmap_init::@6 __b6: - // [112] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [113] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] __b2_from___b6: - // [112] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [113] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy jmp __b2 // bitmap_init::@2 __b2: - // [113] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx + // [114] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx inx - // [114] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 + // [115] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1_from___b2 - // [115] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [116] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] __b3_from___b2: - // [115] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [116] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [115] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + // [116] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [115] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [116] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] __b3_from___b4: - // [115] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [115] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [116] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [116] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp __b3 // bitmap_init::@3 __b3: - // [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [117] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __7 - // [117] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1 + // [118] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1 lda.z yoffs - // [118] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa + // [119] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa ora.z __7 - // [119] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa + // [120] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_ylo,x - // [120] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 + // [121] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 lda.z yoffs+1 - // [121] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [122] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x - // [122] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [123] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4_from___b3 jmp __b5 // bitmap_init::@5 __b5: - // [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -7010,66 +6965,68 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [124] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [125] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] __b4_from___b3: __b4_from___b5: - // [124] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [125] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy jmp __b4 // bitmap_init::@4 __b4: - // [125] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx + // [126] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx inx - // [126] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 + // [127] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3_from___b4 jmp __breturn // bitmap_init::@return __breturn: - // [127] return + // [128] return rts } // sin16s_gen2 // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($10) sintab) +// sin16s_gen2(signed word* zp($f) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = 8 - .label __9 = $1c - .label step = $18 - .label sintab = $10 + .label __6 = 6 + .label __9 = $1a + .label step = $16 + .label sintab = $f // u[4.28] // Iterate over the table - .label x = 4 - .label i = $e - // [129] call div32u16u - // [196] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + .label x = 2 + .label i = $c + // [130] call div32u16u + // [197] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u - // [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + // [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 jmp __b3 // sin16s_gen2::@3 __b3: - // [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] + // [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + // [133] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] __b1_from___b3: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [133] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 lda #SINUS sta.z sintab+1 - // [132] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [133] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [132] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [133] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7078,7 +7035,7 @@ sin16s_gen2: { // u[4.28] // sin16s_gen2::@1 __b1: - // [133] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + // [134] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>wavelength bcc __b2 @@ -7090,11 +7047,11 @@ sin16s_gen2: { jmp __breturn // sin16s_gen2::@return __breturn: - // [134] return + // [135] return rts // sin16s_gen2::@2 __b2: - // [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 lda.z x sta.z sin16s.x lda.z x+1 @@ -7103,14 +7060,14 @@ sin16s_gen2: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [136] call sin16s + // [137] call sin16s jsr sin16s - // [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp __b4 // sin16s_gen2::@4 __b4: - // [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [139] call mul16s + // [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [140] call mul16s // [54] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from___b4: // [54] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -7120,24 +7077,24 @@ sin16s_gen2: { sta.z mul16s.b+1 // [54] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 jmp __b5 // sin16s_gen2::@5 __b5: - // [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - // [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda.z __6+2 sta.z __9 lda.z __6+3 sta.z __9+1 - // [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __9 sta (sintab),y iny lda.z __9+1 sta (sintab),y - // [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab @@ -7145,7 +7102,7 @@ sin16s_gen2: { bcc !+ inc.z sintab+1 !: - // [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step @@ -7159,37 +7116,37 @@ sin16s_gen2: { lda.z x+3 adc.z step+3 sta.z x+3 - // [146] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [147] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [132] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] + // [133] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] __b1_from___b5: - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [132] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [132] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy + // [133] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy + // [133] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy + // [133] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp(8) x) +// sin16s(dword zp(6) x) sin16s: { - .label __4 = $1e - .label x = 8 - .label return = $13 + .label __4 = $1c + .label x = 6 + .label return = $11 .label x1 = $22 - .label x2 = $15 - .label x3 = $15 - .label x3_6 = $24 - .label usinx = $13 - .label x4 = $15 - .label x5 = $24 - .label x5_128 = $24 - .label sinx = $13 - // [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + .label x2 = $a + .label x3 = $a + .label x3_6 = $20 + .label usinx = $11 + .label x4 = $a + .label x5 = $20 + .label x5_128 = $20 + .label sinx = $11 + // [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -7209,7 +7166,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [149] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [150] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [149] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [150] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [149] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [150] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [149] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [150] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [149] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [150] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [149] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [150] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -7257,7 +7214,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [152] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [153] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [152] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [153] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -7299,53 +7256,53 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [157] call mulu16_sel - // [187] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [158] call mulu16_sel + // [188] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 jmp __b7 // sin16s::@7 __b7: - // [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [162] call mulu16_sel - // [187] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [163] call mulu16_sel + // [188] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -7353,26 +7310,26 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - // [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [166] call mulu16_sel - // [187] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [167] call mulu16_sel + // [188] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [187] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [188] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 jmp __b9 // sin16s::@9 __b9: - // [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - // [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -7380,21 +7337,21 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [172] call mulu16_sel - // [187] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [173] call mulu16_sel + // [188] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -7402,27 +7359,27 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - // [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [177] call mulu16_sel - // [187] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [178] call mulu16_sel + // [188] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 jmp __b11 // sin16s::@11 __b11: - // [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - // [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -7431,7 +7388,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -7439,13 +7396,13 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 - // [182] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [183] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -7453,59 +7410,52 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [184] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [185] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [184] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [185] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [185] return + // [186] return rts // sin16s::@12 __b12: - // [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 jmp __b3_from___b12 } // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($15) v1, word zp(2) v2, byte register(X) select) +// mulu16_sel(word zp($a) v1, word zp($13) v2, byte register(X) select) mulu16_sel: { - .label __0 = 8 - .label __1 = 8 - .label v1 = $15 - .label v2 = 2 - .label return = $24 - .label return_1 = $15 - // [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + .label __0 = 6 + .label __1 = 6 + .label v1 = $a + .label v2 = $13 + .label return = $20 + .label return_1 = $a + // [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [190] call mul16u + // [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [191] call mul16u // [72] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [72] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [72] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [72] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 jmp __b1 // mulu16_sel::@1 __b1: - // [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - // [193] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx + // [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [194] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx cpx #0 beq !e+ !: @@ -7516,7 +7466,7 @@ mulu16_sel: { dex bne !- !e: - // [194] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 @@ -7524,56 +7474,56 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [195] return + // [196] return rts } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $24 - .label quotient_lo = $10 - .label return = $18 - // [197] call divr16u - // [206] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + .label quotient_hi = $22 + .label quotient_lo = $c + .label return = $16 + // [198] call divr16u + // [207] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [206] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [207] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [206] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [207] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [198] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [199] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp __b1 // div32u16u::@1 __b1: - // [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 - // [200] (word) divr16u::rem#4 ← (word) rem16u#1 - // [201] call divr16u - // [206] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [201] (word) divr16u::rem#4 ← (word) rem16u#1 + // [202] call divr16u + // [207] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [206] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [207] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [206] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [207] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [202] (word) divr16u::return#3 ← (word) divr16u::return#0 + // [203] (word) divr16u::return#3 ← (word) divr16u::return#0 jmp __b2 // div32u16u::@2 __b2: - // [203] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - // [204] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [204] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + // [205] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -7585,7 +7535,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [205] return + // [206] return rts } // divr16u @@ -7593,64 +7543,64 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($e) dividend, word zp($c) rem) +// divr16u(word zp($1a) dividend, word zp($13) rem) divr16u: { - .label rem = $c - .label dividend = $e - .label quotient = $10 - .label return = $10 - // [207] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label rem = $13 + .label dividend = $1a + .label quotient = $c + .label return = $c + // [208] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [207] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [208] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [207] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [208] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [207] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [207] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [208] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [208] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [207] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [208] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [207] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [207] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [207] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [207] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [208] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [208] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [208] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [208] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [208] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [209] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 - // [210] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [211] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 - // [211] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [212] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [213] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [214] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [213] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [214] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [214] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [215] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [215] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [216] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>sin16s_gen2.wavelength bcc __b3_from___b2 @@ -7662,12 +7612,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [217] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [218] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 + // [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #sin16s_gen2.wavelength sta.z rem+1 - // [219] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [220] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [219] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [219] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [220] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [220] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [220] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [221] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [221] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [222] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [222] (word) rem16u#1 ← (word) divr16u::rem#11 + // [223] (word) rem16u#1 ← (word) divr16u::rem#11 jmp __breturn // divr16u::@return __breturn: - // [223] return + // [224] return rts } // irq @@ -7703,32 +7653,32 @@ divr16u: { irq: { // entry interrupt(HARDWARE_CLOBBER) sta rega+1 - // [224] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 + // [225] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BGCOL - // [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 + // [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z frame_cnt beq __b1 jmp __b2 // irq::@2 __b2: - // [226] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 + // [227] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 inc.z frame_cnt jmp __b1 // irq::@1 __b1: - // [227] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + // [228] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL - // [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irq::@return __breturn: - // [229] return - exit interrupt(HARDWARE_CLOBBER) + // [230] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 rti @@ -7821,9 +7771,8 @@ Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #<0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA @@ -7985,6 +7934,8 @@ Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b12: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction rts @@ -7997,31 +7948,31 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const signed word*) SINUS[(number) $200] = { fill( $200, 0) } (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -8034,7 +7985,7 @@ FINAL SYMBOL TABLE (byte~) bitmap_init::$4 reg byte a 22.0 (byte~) bitmap_init::$5 reg byte a 22.0 (byte~) bitmap_init::$6 reg byte a 22.0 -(byte~) bitmap_init::$7 zp[1]:23 5.5 +(byte~) bitmap_init::$7 zp[1]:21 5.5 (label) bitmap_init::@1 (label) bitmap_init::@2 (label) bitmap_init::@3 @@ -8055,18 +8006,18 @@ FINAL SYMBOL TABLE (byte) bitmap_init::y#1 reg byte x 16.5 (byte) bitmap_init::y#2 reg byte x 5.5 (byte*) bitmap_init::yoffs -(byte*) bitmap_init::yoffs#1 yoffs zp[2]:36 22.0 -(byte*) bitmap_init::yoffs#2 yoffs zp[2]:36 6.875 -(byte*) bitmap_init::yoffs#4 yoffs zp[2]:36 11.0 +(byte*) bitmap_init::yoffs#1 yoffs zp[2]:17 22.0 +(byte*) bitmap_init::yoffs#2 yoffs zp[2]:17 6.875 +(byte*) bitmap_init::yoffs#4 yoffs zp[2]:17 11.0 (void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y) -(word~) bitmap_plot::$1 zp[2]:21 4.0 +(word~) bitmap_plot::$1 zp[2]:19 4.0 (byte~) bitmap_plot::$2 reg byte a 4.0 (label) bitmap_plot::@return (byte*) bitmap_plot::plotter -(word) bitmap_plot::plotter#0 plotter zp[2]:19 1.0 -(byte*) bitmap_plot::plotter#1 plotter zp[2]:19 3.0 +(word) bitmap_plot::plotter#0 plotter zp[2]:17 1.0 +(byte*) bitmap_plot::plotter#1 plotter zp[2]:17 3.0 (word) bitmap_plot::x -(word) bitmap_plot::x#0 x zp[2]:28 3.75 +(word) bitmap_plot::x#0 x zp[2]:15 3.75 (byte) bitmap_plot::y (byte) bitmap_plot::y#0 reg byte x 7.5 (const byte*) bitmap_plot_bit[(number) $100] = { fill( $100, 0) } @@ -8081,12 +8032,12 @@ FINAL SYMBOL TABLE (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:36 0.8 +(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:34 0.8 (word) div32u16u::quotient_lo -(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0 +(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:12 4.0 (dword) div32u16u::return -(dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333 -(dword) div32u16u::return#2 return zp[4]:24 4.0 +(dword) div32u16u::return#0 return zp[4]:22 1.3333333333333333 +(dword) div32u16u::return#2 return zp[4]:22 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 22.0 (byte~) divr16u::$2 reg byte a 22.0 @@ -8098,31 +8049,31 @@ FINAL SYMBOL TABLE (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp[2]:14 2.75 -(word) divr16u::dividend#3 dividend zp[2]:14 5.0 -(word) divr16u::dividend#5 dividend zp[2]:14 2.0 +(word) divr16u::dividend#0 dividend zp[2]:26 2.75 +(word) divr16u::dividend#3 dividend zp[2]:26 5.0 +(word) divr16u::dividend#5 dividend zp[2]:26 2.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 16.5 (byte) divr16u::i#2 reg byte x 1.6923076923076923 (word) divr16u::quotient -(word) divr16u::quotient#1 quotient zp[2]:16 16.5 -(word) divr16u::quotient#2 quotient zp[2]:16 11.0 -(word) divr16u::quotient#3 quotient zp[2]:16 2.75 +(word) divr16u::quotient#1 quotient zp[2]:12 16.5 +(word) divr16u::quotient#2 quotient zp[2]:12 11.0 +(word) divr16u::quotient#3 quotient zp[2]:12 2.75 (word) divr16u::rem -(word) divr16u::rem#0 rem zp[2]:12 8.25 -(word) divr16u::rem#1 rem zp[2]:12 22.0 -(word) divr16u::rem#10 rem zp[2]:12 4.0 -(word) divr16u::rem#11 rem zp[2]:12 11.666666666666666 -(word) divr16u::rem#2 rem zp[2]:12 22.0 -(word) divr16u::rem#4 rem zp[2]:12 4.0 -(word) divr16u::rem#5 rem zp[2]:12 24.0 -(word) divr16u::rem#6 rem zp[2]:12 11.0 +(word) divr16u::rem#0 rem zp[2]:19 8.25 +(word) divr16u::rem#1 rem zp[2]:19 22.0 +(word) divr16u::rem#10 rem zp[2]:19 4.0 +(word) divr16u::rem#11 rem zp[2]:19 11.666666666666666 +(word) divr16u::rem#2 rem zp[2]:19 22.0 +(word) divr16u::rem#4 rem zp[2]:19 4.0 +(word) divr16u::rem#5 rem zp[2]:19 24.0 +(word) divr16u::rem#6 rem zp[2]:19 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp[2]:16 5.285714285714286 -(word) divr16u::return#2 return zp[2]:16 4.0 -(word) divr16u::return#3 return zp[2]:16 4.0 -(byte) frame_cnt loadstore zp[1]:18 0.6521739130434783 +(word) divr16u::return#0 return zp[2]:12 5.285714285714286 +(word) divr16u::return#2 return zp[2]:12 4.0 +(word) divr16u::return#3 return zp[2]:12 4.0 +(byte) frame_cnt loadstore zp[1]:14 0.6521739130434783 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() @@ -8130,13 +8081,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) irq::@2 (label) irq::@return (void()) main() -(signed dword~) main::$11 zp[4]:8 22.0 +(signed dword~) main::$11 zp[4]:6 22.0 (word~) main::$12 reg byte alu 22.0 -(word~) main::$22 zp[2]:36 22.0 -(word~) main::$23 zp[2]:36 22.0 -(signed word*~) main::$24 zp[2]:36 22.0 -(signed word*~) main::$25 zp[2]:36 22.0 -(signed dword~) main::$6 zp[4]:8 22.0 +(word~) main::$22 zp[2]:10 22.0 +(word~) main::$23 zp[2]:10 22.0 +(signed word*~) main::$24 zp[2]:10 22.0 +(signed word*~) main::$25 zp[2]:10 22.0 +(signed dword~) main::$6 zp[4]:6 22.0 (word~) main::$7 reg byte alu 22.0 (label) main::@1 (label) main::@10 @@ -8152,30 +8103,30 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) main::@8 (label) main::@9 (signed word) main::cos_x -(signed word) main::cos_x#0 cos_x zp[2]:36 22.0 +(signed word) main::cos_x#0 cos_x zp[2]:10 22.0 (word) main::idx_x -(word) main::idx_x#1 idx_x zp[2]:2 11.0 -(word) main::idx_x#10 idx_x zp[2]:2 3.6666666666666665 -(word) main::idx_x#3 idx_x zp[2]:2 1.375 +(word) main::idx_x#1 idx_x zp[2]:12 11.0 +(word) main::idx_x#10 idx_x zp[2]:12 3.6666666666666665 +(word) main::idx_x#3 idx_x zp[2]:12 1.375 (word) main::idx_y -(word) main::idx_y#1 idx_y zp[2]:14 11.0 -(word) main::idx_y#10 idx_y zp[2]:14 11.0 -(word) main::idx_y#3 idx_y zp[2]:14 1.1785714285714286 +(word) main::idx_y#1 idx_y zp[2]:32 11.0 +(word) main::idx_y#10 idx_y zp[2]:32 11.0 +(word) main::idx_y#3 idx_y zp[2]:32 1.1785714285714286 (signed word) main::sin_y -(signed word) main::sin_y#0 sin_y zp[2]:36 22.0 +(signed word) main::sin_y#0 sin_y zp[2]:10 22.0 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return (const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP/(byte) 4&(byte) $f (byte*) main::toD0181_screen (word) main::x -(word) main::x#0 x zp[2]:28 1.8333333333333333 +(word) main::x#0 x zp[2]:15 1.8333333333333333 (signed dword) main::xpos -(signed dword) main::xpos#0 xpos zp[4]:8 22.0 +(signed dword) main::xpos#0 xpos zp[4]:6 22.0 (word) main::y -(word) main::y#0 y zp[2]:19 11.0 +(word) main::y#0 y zp[2]:17 11.0 (signed dword) main::ypos -(signed dword) main::ypos#0 ypos zp[4]:8 22.0 +(signed dword) main::ypos#0 ypos zp[4]:6 22.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -8184,21 +8135,21 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) memset::c (byte) memset::c#4 reg byte x 1.375 (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:19 22.0 -(byte*) memset::dst#2 dst zp[2]:19 15.333333333333332 -(byte*) memset::dst#4 dst zp[2]:19 4.0 +(byte*) memset::dst#1 dst zp[2]:32 22.0 +(byte*) memset::dst#2 dst zp[2]:32 15.333333333333332 +(byte*) memset::dst#4 dst zp[2]:32 4.0 (byte*) memset::end -(byte*) memset::end#0 end zp[2]:14 2.1666666666666665 +(byte*) memset::end#0 end zp[2]:12 2.1666666666666665 (word) memset::num -(word) memset::num#2 num zp[2]:14 2.0 +(word) memset::num#2 num zp[2]:12 2.0 (void*) memset::return (void*) memset::str -(void*) memset::str#3 str zp[2]:19 +(void*) memset::str#3 str zp[2]:32 (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) -(word~) mul16s::$13 zp[2]:34 4.0 -(word~) mul16s::$16 zp[2]:21 4.0 -(word~) mul16s::$17 zp[2]:19 4.0 -(word~) mul16s::$9 zp[2]:21 4.0 +(word~) mul16s::$13 zp[2]:26 4.0 +(word~) mul16s::$16 zp[2]:19 4.0 +(word~) mul16s::$17 zp[2]:17 4.0 +(word~) mul16s::$9 zp[2]:19 4.0 (label) mul16s::@1 (label) mul16s::@2 (label) mul16s::@3 @@ -8206,23 +8157,23 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) mul16s::@5 (label) mul16s::@return (signed word) mul16s::a -(signed word) mul16s::a#0 a zp[2]:19 22.0 -(signed word) mul16s::a#3 a zp[2]:19 1.0 +(signed word) mul16s::a#0 a zp[2]:17 22.0 +(signed word) mul16s::a#3 a zp[2]:17 1.0 (signed word) mul16s::b -(signed word) mul16s::b#1 b zp[2]:36 22.0 -(signed word) mul16s::b#2 b zp[2]:36 22.0 -(signed word) mul16s::b#3 b zp[2]:36 2.1818181818181817 +(signed word) mul16s::b#1 b zp[2]:10 22.0 +(signed word) mul16s::b#2 b zp[2]:10 22.0 +(signed word) mul16s::b#3 b zp[2]:10 2.1818181818181817 (dword) mul16s::m -(dword) mul16s::m#0 m zp[4]:8 2.0 -(dword) mul16s::m#1 m zp[4]:8 4.0 -(dword) mul16s::m#2 m zp[4]:8 4.0 -(dword) mul16s::m#4 m zp[4]:8 4.0 -(dword) mul16s::m#5 m zp[4]:8 2.5 +(dword) mul16s::m#0 m zp[4]:6 2.0 +(dword) mul16s::m#1 m zp[4]:6 4.0 +(dword) mul16s::m#2 m zp[4]:6 4.0 +(dword) mul16s::m#4 m zp[4]:6 4.0 +(dword) mul16s::m#5 m zp[4]:6 2.5 (signed dword) mul16s::return -(signed dword) mul16s::return#0 return zp[4]:8 7.000000000000001 -(signed dword) mul16s::return#2 return zp[4]:8 22.0 -(signed dword) mul16s::return#3 return zp[4]:8 22.0 -(signed dword) mul16s::return#4 return zp[4]:8 22.0 +(signed dword) mul16s::return#0 return zp[4]:6 7.000000000000001 +(signed dword) mul16s::return#2 return zp[4]:6 22.0 +(signed dword) mul16s::return#3 return zp[4]:6 22.0 +(signed dword) mul16s::return#4 return zp[4]:6 22.0 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (byte~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 @@ -8231,57 +8182,58 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) mul16u::@4 (label) mul16u::@return (word) mul16u::a -(word) mul16u::a#0 a zp[2]:12 101.0 -(word) mul16u::a#1 a zp[2]:12 2.0 -(word) mul16u::a#2 a zp[2]:12 2.0 -(word) mul16u::a#3 a zp[2]:12 67.66666666666666 -(word) mul16u::a#6 a zp[2]:12 6.0 +(word) mul16u::a#0 a zp[2]:26 101.0 +(word) mul16u::a#1 a zp[2]:26 2.0 +(word) mul16u::a#2 a zp[2]:26 2.0 +(word) mul16u::a#3 a zp[2]:26 67.66666666666666 +(word) mul16u::a#6 a zp[2]:26 3.0 (word) mul16u::b -(word) mul16u::b#0 b zp[2]:21 4.0 -(word) mul16u::b#1 b_1 zp[2]:2 4.0 +(word) mul16u::b#0 b zp[2]:19 4.0 +(word) mul16u::b#1 b zp[2]:19 4.0 +(word) mul16u::b#2 b zp[2]:19 4.0 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:30 6.0 -(dword) mul16u::mb#1 mb zp[4]:30 202.0 -(dword) mul16u::mb#2 mb zp[4]:30 43.57142857142858 +(dword) mul16u::mb#0 mb zp[4]:28 4.0 +(dword) mul16u::mb#1 mb zp[4]:28 202.0 +(dword) mul16u::mb#2 mb zp[4]:28 43.57142857142858 (dword) mul16u::res -(dword) mul16u::res#1 res zp[4]:8 202.0 -(dword) mul16u::res#2 res zp[4]:8 43.85714285714286 -(dword) mul16u::res#6 res zp[4]:8 101.0 +(dword) mul16u::res#1 res zp[4]:6 202.0 +(dword) mul16u::res#2 res zp[4]:6 43.85714285714286 +(dword) mul16u::res#6 res zp[4]:6 101.0 (dword) mul16u::return -(dword) mul16u::return#2 return zp[4]:8 4.0 -(dword) mul16u::return#3 return zp[4]:8 4.0 +(dword) mul16u::return#2 return zp[4]:6 4.0 +(dword) mul16u::return#3 return zp[4]:6 4.0 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) -(dword~) mulu16_sel::$0 zp[4]:8 4.0 -(dword~) mulu16_sel::$1 zp[4]:8 4.0 +(dword~) mulu16_sel::$0 zp[4]:6 4.0 +(dword~) mulu16_sel::$1 zp[4]:6 4.0 (label) mulu16_sel::@1 (label) mulu16_sel::@return (word) mulu16_sel::return -(word) mulu16_sel::return#0 return zp[2]:36 4.0 -(word) mulu16_sel::return#1 return_1 zp[2]:21 4.0 -(word) mulu16_sel::return#10 return_1 zp[2]:21 4.0 -(word) mulu16_sel::return#11 return zp[2]:36 4.0 -(word) mulu16_sel::return#12 return zp[2]:36 1.714285714285714 -(word) mulu16_sel::return#2 return zp[2]:36 4.0 +(word) mulu16_sel::return#0 return zp[2]:32 4.0 +(word) mulu16_sel::return#1 return_1 zp[2]:10 4.0 +(word) mulu16_sel::return#10 return_1 zp[2]:10 4.0 +(word) mulu16_sel::return#11 return zp[2]:32 4.0 +(word) mulu16_sel::return#12 return zp[2]:32 1.714285714285714 +(word) mulu16_sel::return#2 return zp[2]:32 4.0 (byte) mulu16_sel::select (byte) mulu16_sel::select#5 reg byte x 0.3333333333333333 (word) mulu16_sel::v1 -(word) mulu16_sel::v1#0 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#1 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#2 v1 zp[2]:21 4.0 -(word) mulu16_sel::v1#3 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#4 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#5 v1 zp[2]:21 12.0 +(word) mulu16_sel::v1#0 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#1 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#2 v1 zp[2]:10 4.0 +(word) mulu16_sel::v1#3 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#4 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#5 v1 zp[2]:10 12.0 (word) mulu16_sel::v2 -(word) mulu16_sel::v2#0 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#1 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#3 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#4 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#5 v2 zp[2]:2 5.0 +(word) mulu16_sel::v2#0 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#1 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#3 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#4 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#5 v2 zp[2]:19 5.0 (const byte*) plots_per_frame[(number) $100] = { fill( $100, 0) } (word) rem16u -(word) rem16u#1 rem16u zp[2]:12 0.8 +(word) rem16u#1 rem16u zp[2]:19 0.8 (signed word()) sin16s((dword) sin16s::x) -(dword~) sin16s::$4 zp[4]:30 4.0 +(dword~) sin16s::$4 zp[4]:28 4.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 @@ -8298,37 +8250,37 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) sin16s::isUpper (byte) sin16s::isUpper#2 reg byte y 0.06060606060606061 (signed word) sin16s::return -(signed word) sin16s::return#0 return zp[2]:19 22.0 -(signed word) sin16s::return#1 return zp[2]:19 5.0 -(signed word) sin16s::return#5 return zp[2]:19 4.0 +(signed word) sin16s::return#0 return zp[2]:17 22.0 +(signed word) sin16s::return#1 return zp[2]:17 5.0 +(signed word) sin16s::return#5 return zp[2]:17 4.0 (signed word) sin16s::sinx -(signed word) sin16s::sinx#1 sinx zp[2]:19 4.0 +(signed word) sin16s::sinx#1 sinx zp[2]:17 4.0 (word) sin16s::usinx -(word) sin16s::usinx#0 usinx zp[2]:19 0.3333333333333333 -(word) sin16s::usinx#1 usinx zp[2]:19 1.0 +(word) sin16s::usinx#0 usinx zp[2]:17 0.3333333333333333 +(word) sin16s::usinx#1 usinx zp[2]:17 1.0 (dword) sin16s::x -(dword) sin16s::x#0 x zp[4]:8 8.5 -(dword) sin16s::x#1 x zp[4]:8 4.0 -(dword) sin16s::x#2 x zp[4]:8 4.0 -(dword) sin16s::x#4 x zp[4]:8 5.0 -(dword) sin16s::x#6 x zp[4]:8 6.0 +(dword) sin16s::x#0 x zp[4]:6 8.5 +(dword) sin16s::x#1 x zp[4]:6 4.0 +(dword) sin16s::x#2 x zp[4]:6 4.0 +(dword) sin16s::x#4 x zp[4]:6 5.0 +(dword) sin16s::x#6 x zp[4]:6 6.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp[2]:34 0.6363636363636365 (word) sin16s::x2 -(word) sin16s::x2#0 x2 zp[2]:21 4.0 +(word) sin16s::x2#0 x2 zp[2]:10 4.0 (word) sin16s::x3 -(word) sin16s::x3#0 x3 zp[2]:21 1.0 +(word) sin16s::x3#0 x3 zp[2]:10 1.0 (word) sin16s::x3_6 -(word) sin16s::x3_6#0 x3_6 zp[2]:36 4.0 +(word) sin16s::x3_6#0 x3_6 zp[2]:32 4.0 (word) sin16s::x4 -(word) sin16s::x4#0 x4 zp[2]:21 4.0 +(word) sin16s::x4#0 x4 zp[2]:10 4.0 (word) sin16s::x5 -(word) sin16s::x5#0 x5 zp[2]:36 4.0 +(word) sin16s::x5#0 x5 zp[2]:32 4.0 (word) sin16s::x5_128 -(word) sin16s::x5_128#0 x5_128 zp[2]:36 4.0 +(word) sin16s::x5_128#0 x5_128 zp[2]:32 4.0 (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) -(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0 -(word~) sin16s_gen2::$9 zp[2]:28 11.0 +(signed dword~) sin16s_gen2::$6 zp[4]:6 22.0 +(word~) sin16s_gen2::$9 zp[2]:26 11.0 (label) sin16s_gen2::@1 (label) sin16s_gen2::@2 (label) sin16s_gen2::@3 @@ -8338,60 +8290,59 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (signed word) sin16s_gen2::ampl (const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0 (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 i zp[2]:14 22.0 -(word) sin16s_gen2::i#2 i zp[2]:14 2.5384615384615383 +(word) sin16s_gen2::i#1 i zp[2]:12 22.0 +(word) sin16s_gen2::i#2 i zp[2]:12 2.5384615384615383 (signed word) sin16s_gen2::max (const signed word) sin16s_gen2::max#0 max = (signed word) $1001 (signed word) sin16s_gen2::min (const signed word) sin16s_gen2::min#0 min = (signed word) -$1001 (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0 +(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:15 7.333333333333333 +(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:15 3.0 (dword) sin16s_gen2::step -(dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666 +(dword) sin16s_gen2::step#0 step zp[4]:22 0.8666666666666666 (word) sin16s_gen2::wavelength (const word) sin16s_gen2::wavelength#0 wavelength = (word) $200 (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 x zp[4]:4 11.0 -(dword) sin16s_gen2::x#2 x zp[4]:4 2.75 +(dword) sin16s_gen2::x#1 x zp[4]:2 11.0 +(dword) sin16s_gen2::x#2 x zp[4]:2 2.75 -zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] reg byte x [ memset::c#4 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] -zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +zp[4]:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] reg byte y [ sin16s::isUpper#2 ] -zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] +zp[4]:6 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] +zp[2]:10 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] reg byte x [ mulu16_sel::select#5 ] -zp[2]:12 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +zp[2]:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp[1]:18 [ frame_cnt ] +zp[1]:14 [ frame_cnt ] reg byte alu [ main::$7 ] +zp[2]:15 [ main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] reg byte alu [ main::$12 ] reg byte x [ bitmap_plot::y#0 ] -zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] +zp[2]:17 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] reg byte a [ bitmap_plot::$2 ] -zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] +zp[2]:19 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] reg byte a [ mul16u::$1 ] -zp[1]:23 [ bitmap_init::$7 ] +zp[1]:21 [ bitmap_init::$7 ] reg byte a [ bitmap_init::$4 ] reg byte a [ bitmap_init::$5 ] reg byte a [ bitmap_init::$6 ] -zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -zp[2]:28 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ] -zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -zp[2]:34 [ sin16s::x1#0 mul16s::$13 ] -zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] +zp[4]:22 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] +zp[2]:26 [ sin16s_gen2::$9 mul16s::$13 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +zp[4]:28 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +zp[2]:32 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +zp[2]:34 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 20428 +Score: 20668 // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ @@ -8441,9 +8392,9 @@ Score: 20428 .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $12 + .label frame_cnt = $e // Remainder after unsigned 16-bit division - .label rem16u = $c + .label rem16u = $13 // @begin // @1 __b1: @@ -8463,35 +8414,35 @@ __b1: // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __6 = 8 - .label __11 = 8 - .label __22 = $24 - .label __23 = $24 - .label cos_x = $24 - .label xpos = 8 - .label x = $1c - .label sin_y = $24 - .label ypos = 8 - .label y = $13 - .label idx_x = 2 - .label idx_y = $e - .label __24 = $24 - .label __25 = $24 + .label __6 = 6 + .label __11 = 6 + .label __22 = $a + .label __23 = $a + .label cos_x = $a + .label xpos = 6 + .label x = $f + .label sin_y = $a + .label ypos = 6 + .label y = $11 + .label idx_x = $c + .label idx_y = $20 + .label __24 = $a + .label __25 = $a // sin16s_gen2(SINUS, 512, -0x1001, 0x1001) // [6] call sin16s_gen2 - // [128] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] + // [129] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] jsr sin16s_gen2 // [7] phi from main to main::@6 [phi:main->main::@6] // main::@6 // bitmap_init(BITMAP, SCREEN) // [8] call bitmap_init - // [106] phi from main::@6 to bitmap_init [phi:main::@6->bitmap_init] + // [107] phi from main::@6 to bitmap_init [phi:main::@6->bitmap_init] jsr bitmap_init // [9] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // bitmap_clear(BLACK, WHITE) // [10] call bitmap_clear - // [92] phi from main::@7 to bitmap_clear [phi:main::@7->bitmap_clear] + // [93] phi from main::@7 to bitmap_clear [phi:main::@7->bitmap_clear] jsr bitmap_clear // main::@8 // *D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3 @@ -8509,12 +8460,12 @@ main: { // [14] call init_irq jsr init_irq // [15] phi from main::@5 to main::@1 [phi:main::@5->main::@1] - // [15] phi (word) main::idx_y#3 = (byte) $80 [phi:main::@5->main::@1#0] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_y#3 = (word) $80 [phi:main::@5->main::@1#0] -- vwuz1=vwuc1 lda #<$80 sta.z idx_y lda #>$80 sta.z idx_y+1 - // [15] phi (word) main::idx_x#3 = (byte) 0 [phi:main::@5->main::@1#1] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_x#3 = (word) 0 [phi:main::@5->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z idx_x sta.z idx_x+1 @@ -8728,11 +8679,11 @@ main: { } // bitmap_plot // Plot a single dot in the bitmap -// bitmap_plot(word zp($1c) x, byte register(X) y) +// bitmap_plot(word zp($f) x, byte register(X) y) bitmap_plot: { - .label __1 = $15 - .label plotter = $13 - .label x = $1c + .label __1 = $13 + .label plotter = $11 + .label x = $f // (byte*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] } // [48] (word) bitmap_plot::plotter#0 ← *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#0) w= *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#0) -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx lda bitmap_plot_yhi,x @@ -8774,16 +8725,16 @@ bitmap_plot: { // mul16s // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp($13) a, signed word zp($24) b) +// mul16s(signed word zp($11) a, signed word zp($a) b) mul16s: { - .label __9 = $15 - .label __13 = $22 - .label __16 = $15 - .label __17 = $13 - .label m = 8 - .label return = 8 - .label a = $13 - .label b = $24 + .label __9 = $13 + .label __13 = $1a + .label __16 = $13 + .label __17 = $11 + .label m = 6 + .label return = 6 + .label a = $11 + .label b = $a // mul16u((word)a, (word) b) // [55] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 -- vwuz1=vwuz2 lda.z a @@ -8798,14 +8749,7 @@ mul16s: { // [57] call mul16u // [72] phi from mul16s to mul16u [phi:mul16s->mul16u] // [72] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [72] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [72] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // mul16u((word)a, (word) b) // [58] (dword) mul16u::return#2 ← (dword) mul16u::res#2 @@ -8879,48 +8823,57 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($c) a, word zp($15) b) +// mul16u(word zp($1a) a, word zp($13) b) mul16u: { - .label mb = $1e - .label a = $c - .label res = 8 - .label b = $15 - .label return = 8 - .label b_1 = 2 - // [73] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [73] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [73] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + .label mb = $1c + .label a = $1a + .label res = 6 + .label b = $13 + .label return = 6 + // mb = b + // [73] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 + // [74] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [74] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [74] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [73] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [74] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 __b1: // while(a!=0) - // [74] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [75] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 // mul16u::@return // } - // [75] return + // [76] return rts // mul16u::@2 __b2: // a&1 - // [76] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [77] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // if( (a&1) != 0) - // [77] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [78] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul16u::@4 // res = res + mb - // [78] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [79] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -8934,24 +8887,24 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [79] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - // [79] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [80] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [80] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy // mul16u::@3 __b3: // a = a>>1 - // [80] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [81] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // mb = mb<<1 - // [81] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [82] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [73] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - // [73] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [73] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [73] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [74] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [74] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [74] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [74] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // init_irq @@ -8961,36 +8914,36 @@ init_irq: { // asm { sei } sei // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK - // [83] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [84] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR // *PROCPORT = PROCPORT_RAM_IO - // [84] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [85] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [85] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [86] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT // *VIC_CONTROL |=$80 - // [86] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [87] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 ora VIC_CONTROL sta VIC_CONTROL // *RASTER = $00 - // [87] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [88] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta RASTER // *IRQ_ENABLE = IRQ_RASTER - // [88] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [89] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE // *HARDWARE_IRQ = &irq - // [89] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 + // [90] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #memset] - // [97] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 + // [94] call memset + // [98] phi from bitmap_clear to memset [phi:bitmap_clear->memset] + // [98] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 ldx #col - // [97] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [98] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [97] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [98] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [94] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [95] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] // bitmap_clear::@1 // memset(bitmap_gfx, 0, 8000uw) - // [95] call memset - // [97] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] - // [97] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 + // [96] call memset + // [98] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [98] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 ldx #0 - // [97] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [98] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [97] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [98] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -9046,19 +8999,19 @@ bitmap_clear: { jsr memset // bitmap_clear::@return // } - // [96] return + // [97] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($13) str, byte register(X) c, word zp($e) num) +// memset(void* zp($20) str, byte register(X) c, word zp($c) num) memset: { - .label end = $e - .label dst = $13 - .label num = $e - .label str = $13 + .label end = $c + .label dst = $20 + .label num = $c + .label str = $20 // if(num>0) - // [98] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [99] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -9066,7 +9019,7 @@ memset: { !: // memset::@1 // end = (char*)str + num - // [99] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [100] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda.z end clc adc.z str @@ -9074,13 +9027,13 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [100] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [101] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [101] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [101] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [102] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [102] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) - // [102] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [103] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -9090,17 +9043,17 @@ memset: { // memset::@return __breturn: // } - // [103] return + // [104] return rts // memset::@3 __b3: // *dst = c - // [104] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [105] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [105] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [106] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -9110,83 +9063,83 @@ memset: { // bitmap_init // Initialize bitmap plotting tables bitmap_init: { - .label __7 = $17 - .label yoffs = $24 - // [107] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] - // [107] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + .label __7 = $15 + .label yoffs = $11 + // [108] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + // [108] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [107] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + // [108] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 - // [107] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] - // [107] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [107] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [108] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [108] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [108] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy // bitmap_init::@1 __b1: // bitmap_plot_bit[x] = bits - // [108] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa + // [109] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x // bits >>= 1 - // [109] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // [110] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 lsr // if(bits==0) - // [110] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 + // [111] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b2 - // [112] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] - // [112] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + // [113] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [113] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 - // [111] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [112] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] // bitmap_init::@6 - // [112] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] - // [112] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [113] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [113] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy // bitmap_init::@2 __b2: // for(byte x : 0..255) - // [113] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx + // [114] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx inx - // [114] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 + // [115] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1 - // [115] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] - // [115] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [116] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [116] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [115] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + // [116] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 - // [115] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] - // [115] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [115] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [116] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [116] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [116] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy // bitmap_init::@3 __b3: // y&$7 - // [116] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [117] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __7 // yoffs - // [120] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 + // [121] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 lda.z yoffs+1 // bitmap_plot_yhi[y] = >yoffs - // [121] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [122] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x // if((y&$7)==7) - // [122] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [123] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4 // bitmap_init::@5 // yoffs = yoffs + 40*8 - // [123] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [124] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -9194,68 +9147,71 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [124] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] - // [124] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [125] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [125] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy // bitmap_init::@4 __b4: // for(byte y : 0..255) - // [125] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx + // [126] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx inx - // [126] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 + // [127] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3 // bitmap_init::@return // } - // [127] return + // [128] return rts } // sin16s_gen2 // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($10) sintab) +// sin16s_gen2(signed word* zp($f) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = 8 - .label __9 = $1c - .label step = $18 - .label sintab = $10 + .label __6 = 6 + .label __9 = $1a + .label step = $16 + .label sintab = $f // u[4.28] // Iterate over the table - .label x = 4 - .label i = $e + .label x = 2 + .label i = $c // div32u16u(PI2_u4f28, wavelength) - // [129] call div32u16u - // [196] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [130] call div32u16u + // [197] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] jsr div32u16u // div32u16u(PI2_u4f28, wavelength) - // [130] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + // [131] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 // sin16s_gen2::@3 // step = div32u16u(PI2_u4f28, wavelength) - // [131] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [132] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [132] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + // [133] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] + // [133] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 lda #SINUS sta.z sintab+1 - // [132] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [133] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [132] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [133] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] // sin16s_gen2::@1 __b1: // for( word i=0; iwavelength bcc __b2 @@ -9266,12 +9222,12 @@ sin16s_gen2: { !: // sin16s_gen2::@return // } - // [134] return + // [135] return rts // sin16s_gen2::@2 __b2: // sin16s(x) - // [135] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [136] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 lda.z x sta.z sin16s.x lda.z x+1 @@ -9280,13 +9236,13 @@ sin16s_gen2: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [136] call sin16s + // [137] call sin16s jsr sin16s - // [137] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [138] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen2::@4 // mul16s(sin16s(x), ampl) - // [138] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [139] call mul16s + // [139] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [140] call mul16s // [54] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] // [54] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 lda #mul16s#1] -- register_copy jsr mul16s // mul16s(sin16s(x), ampl) - // [140] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [141] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 // sin16s_gen2::@5 - // [141] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [142] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 // >mul16s(sin16s(x), ampl) - // [142] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [143] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda.z __6+2 sta.z __9 lda.z __6+3 sta.z __9+1 // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl) - // [143] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [144] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __9 sta (sintab),y @@ -9314,7 +9270,7 @@ sin16s_gen2: { lda.z __9+1 sta (sintab),y // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); - // [144] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [145] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab @@ -9323,7 +9279,7 @@ sin16s_gen2: { inc.z sintab+1 !: // x = x + step - // [145] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [146] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step @@ -9338,37 +9294,37 @@ sin16s_gen2: { adc.z step+3 sta.z x+3 // for( word i=0; isin16s_gen2::@1] - // [132] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [132] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [132] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy + // [133] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] + // [133] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy + // [133] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy + // [133] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp(8) x) +// sin16s(dword zp(6) x) sin16s: { - .label __4 = $1e - .label x = 8 - .label return = $13 + .label __4 = $1c + .label x = 6 + .label return = $11 .label x1 = $22 - .label x2 = $15 - .label x3 = $15 - .label x3_6 = $24 - .label usinx = $13 - .label x4 = $15 - .label x5 = $24 - .label x5_128 = $24 - .label sinx = $13 + .label x2 = $a + .label x3 = $a + .label x3_6 = $20 + .label usinx = $11 + .label x4 = $a + .label x5 = $20 + .label x5_128 = $20 + .label sinx = $11 // if(x >= PI_u4f28 ) - // [147] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [148] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc b1 @@ -9387,7 +9343,7 @@ sin16s: { !: // sin16s::@4 // x = x - PI_u4f28 - // [148] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [149] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [149] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] - // [149] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [150] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [150] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [149] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [150] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [149] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [150] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] b1: - // [149] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [150] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [149] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [150] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy // sin16s::@1 __b1: // if(x >= PI_HALF_u4f28 ) - // [150] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [151] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2 @@ -9433,7 +9389,7 @@ sin16s: { !: // sin16s::@5 // x = PI_u4f28 - x - // [151] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [152] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [152] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] - // [152] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [153] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [153] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy // sin16s::@2 __b2: // x<<3 - // [153] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [154] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -9474,81 +9430,81 @@ sin16s: { rol.z __4+2 rol.z __4+3 // x1 = >x<<3 - // [154] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [155] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // mulu16_sel(x1, x1, 0) - // [155] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [156] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [156] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [157] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [157] call mulu16_sel - // [187] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [158] call mulu16_sel + // [188] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x1, x1, 0) - // [158] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [159] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 // sin16s::@7 // x2 = mulu16_sel(x1, x1, 0) - // [159] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [160] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 // mulu16_sel(x2, x1, 1) - // [160] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [161] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [161] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [162] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [162] call mulu16_sel - // [187] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] - // [187] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [163] call mulu16_sel + // [188] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [188] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x2, x1, 1) - // [163] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [164] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@8 // x3 = mulu16_sel(x2, x1, 1) - // [164] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [165] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 // mulu16_sel(x3, $10000/6, 1) - // [165] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [166] call mulu16_sel - // [187] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] - // [187] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [166] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [167] call mulu16_sel + // [188] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [188] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [187] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [188] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, $10000/6, 1) - // [167] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [168] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 // sin16s::@9 // x3_6 = mulu16_sel(x3, $10000/6, 1) - // [168] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [169] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 // usinx = x1 - x3_6 - // [169] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [170] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -9557,49 +9513,49 @@ sin16s: { sbc.z x3_6+1 sta.z usinx+1 // mulu16_sel(x3, x1, 0) - // [170] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [171] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [171] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [172] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [172] call mulu16_sel - // [187] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [173] call mulu16_sel + // [188] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, x1, 0) - // [173] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [174] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@10 // x4 = mulu16_sel(x3, x1, 0) - // [174] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [175] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 // mulu16_sel(x4, x1, 0) - // [175] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [176] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [176] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [177] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [177] call mulu16_sel - // [187] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] - // [187] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [178] call mulu16_sel + // [188] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [188] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [187] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [187] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [188] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [188] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x4, x1, 0) - // [178] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [179] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 // sin16s::@11 // x5 = mulu16_sel(x4, x1, 0) - // [179] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [180] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 // x5_128 = x5>>4 - // [180] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [181] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -9609,7 +9565,7 @@ sin16s: { lsr.z x5_128+1 ror.z x5_128 // usinx = usinx + x5_128 - // [181] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [182] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -9618,12 +9574,12 @@ sin16s: { adc.z x5_128+1 sta.z usinx+1 // if(isUpper!=0) - // [182] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [183] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b3 // sin16s::@6 // sinx = -(signed word)usinx - // [183] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [184] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -9631,53 +9587,46 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [184] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] - // [184] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [185] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [185] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy // sin16s::@3 __b3: // sin16s::@return // } - // [185] return + // [186] return rts // sin16s::@12 - // [186] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [187] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 } // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($15) v1, word zp(2) v2, byte register(X) select) +// mulu16_sel(word zp($a) v1, word zp($13) v2, byte register(X) select) mulu16_sel: { - .label __0 = 8 - .label __1 = 8 - .label v1 = $15 - .label v2 = 2 - .label return = $24 - .label return_1 = $15 + .label __0 = 6 + .label __1 = 6 + .label v1 = $a + .label v2 = $13 + .label return = $20 + .label return_1 = $a // mul16u(v1, v2) - // [188] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [189] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [190] call mul16u + // [190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [191] call mul16u // [72] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] // [72] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [72] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [72] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u // mul16u(v1, v2) - // [191] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [192] (dword) mul16u::return#3 ← (dword) mul16u::res#2 // mulu16_sel::@1 - // [192] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [193] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 // mul16u(v1, v2)< (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [195] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 sta.z return+1 // mulu16_sel::@return // } - // [195] return + // [196] return rts } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $24 - .label quotient_lo = $10 - .label return = $18 + .label quotient_hi = $22 + .label quotient_lo = $c + .label return = $16 // divr16u(>dividend, divisor, 0) - // [197] call divr16u - // [206] phi from div32u16u to divr16u [phi:div32u16u->divr16u] - // [206] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [198] call divr16u + // [207] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [207] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [206] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [207] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 jsr divr16u // divr16u(>dividend, divisor, 0) - // [198] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [199] (word) divr16u::return#2 ← (word) divr16u::return#0 // div32u16u::@1 // quotient_hi = divr16u(>dividend, divisor, 0) - // [199] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [200] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 // divr16u(divr16u] - // [206] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [201] (word) divr16u::rem#4 ← (word) rem16u#1 + // [202] call divr16u + // [207] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [207] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [206] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [207] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // divr16u(divr16u::@1] - // [207] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + .label rem = $13 + .label dividend = $1a + .label quotient = $c + .label return = $c + // [208] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [208] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [207] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [208] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 - // [207] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [207] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy - // [207] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [207] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [207] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [207] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [207] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [208] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [208] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [208] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [208] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [208] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [208] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [208] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 __b1: // rem = rem << 1 - // [208] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [209] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // >dividend - // [209] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [210] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // >dividend & $80 - // [210] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [211] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) - // [211] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [212] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2 // divr16u::@4 // rem = rem | 1 - // [212] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [213] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [213] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [213] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [214] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [214] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 __b2: // dividend = dividend << 1 - // [214] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [215] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // quotient = quotient << 1 - // [215] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [216] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // if(rem>=divisor) - // [216] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [217] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>sin16s_gen2.wavelength bcc __b3 @@ -9830,13 +9779,13 @@ divr16u: { !: // divr16u::@5 // quotient++; - // [217] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [218] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: // rem = rem - divisor - // [218] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 + // [219] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #sin16s_gen2.wavelength sta.z rem+1 - // [219] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - // [219] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [219] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [220] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [220] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [220] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 __b3: // for( byte i : 0..15) - // [220] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [221] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [221] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [222] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1 // divr16u::@6 // rem16u = rem - // [222] (word) rem16u#1 ← (word) divr16u::rem#11 + // [223] (word) rem16u#1 ← (word) divr16u::rem#11 // divr16u::@return // } - // [223] return + // [224] return rts } // irq @@ -9869,32 +9818,32 @@ irq: { // entry interrupt(HARDWARE_CLOBBER) sta rega+1 // *BGCOL = WHITE - // [224] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 + // [225] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BGCOL // if(frame_cnt) - // [225] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 + // [226] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z frame_cnt beq __b1 // irq::@2 // frame_cnt++; - // [226] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 + // [227] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 inc.z frame_cnt // irq::@1 __b1: // *BGCOL = BLACK - // [227] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + // [228] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL // *IRQ_STATUS = IRQ_RASTER - // [228] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [229] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS // irq::@return // } - // [229] return - exit interrupt(HARDWARE_CLOBBER) + // [230] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 rti diff --git a/src/test/ref/bitmap-plot-1.sym b/src/test/ref/bitmap-plot-1.sym index b0b810002..e9e3c7fdf 100644 --- a/src/test/ref/bitmap-plot-1.sym +++ b/src/test/ref/bitmap-plot-1.sym @@ -4,31 +4,31 @@ (label) @end (const byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const signed word*) SINUS[(number) $200] = { fill( $200, 0) } (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -41,7 +41,7 @@ (byte~) bitmap_init::$4 reg byte a 22.0 (byte~) bitmap_init::$5 reg byte a 22.0 (byte~) bitmap_init::$6 reg byte a 22.0 -(byte~) bitmap_init::$7 zp[1]:23 5.5 +(byte~) bitmap_init::$7 zp[1]:21 5.5 (label) bitmap_init::@1 (label) bitmap_init::@2 (label) bitmap_init::@3 @@ -62,18 +62,18 @@ (byte) bitmap_init::y#1 reg byte x 16.5 (byte) bitmap_init::y#2 reg byte x 5.5 (byte*) bitmap_init::yoffs -(byte*) bitmap_init::yoffs#1 yoffs zp[2]:36 22.0 -(byte*) bitmap_init::yoffs#2 yoffs zp[2]:36 6.875 -(byte*) bitmap_init::yoffs#4 yoffs zp[2]:36 11.0 +(byte*) bitmap_init::yoffs#1 yoffs zp[2]:17 22.0 +(byte*) bitmap_init::yoffs#2 yoffs zp[2]:17 6.875 +(byte*) bitmap_init::yoffs#4 yoffs zp[2]:17 11.0 (void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y) -(word~) bitmap_plot::$1 zp[2]:21 4.0 +(word~) bitmap_plot::$1 zp[2]:19 4.0 (byte~) bitmap_plot::$2 reg byte a 4.0 (label) bitmap_plot::@return (byte*) bitmap_plot::plotter -(word) bitmap_plot::plotter#0 plotter zp[2]:19 1.0 -(byte*) bitmap_plot::plotter#1 plotter zp[2]:19 3.0 +(word) bitmap_plot::plotter#0 plotter zp[2]:17 1.0 +(byte*) bitmap_plot::plotter#1 plotter zp[2]:17 3.0 (word) bitmap_plot::x -(word) bitmap_plot::x#0 x zp[2]:28 3.75 +(word) bitmap_plot::x#0 x zp[2]:15 3.75 (byte) bitmap_plot::y (byte) bitmap_plot::y#0 reg byte x 7.5 (const byte*) bitmap_plot_bit[(number) $100] = { fill( $100, 0) } @@ -88,12 +88,12 @@ (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:36 0.8 +(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:34 0.8 (word) div32u16u::quotient_lo -(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0 +(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:12 4.0 (dword) div32u16u::return -(dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333 -(dword) div32u16u::return#2 return zp[4]:24 4.0 +(dword) div32u16u::return#0 return zp[4]:22 1.3333333333333333 +(dword) div32u16u::return#2 return zp[4]:22 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 22.0 (byte~) divr16u::$2 reg byte a 22.0 @@ -105,31 +105,31 @@ (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp[2]:14 2.75 -(word) divr16u::dividend#3 dividend zp[2]:14 5.0 -(word) divr16u::dividend#5 dividend zp[2]:14 2.0 +(word) divr16u::dividend#0 dividend zp[2]:26 2.75 +(word) divr16u::dividend#3 dividend zp[2]:26 5.0 +(word) divr16u::dividend#5 dividend zp[2]:26 2.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 16.5 (byte) divr16u::i#2 reg byte x 1.6923076923076923 (word) divr16u::quotient -(word) divr16u::quotient#1 quotient zp[2]:16 16.5 -(word) divr16u::quotient#2 quotient zp[2]:16 11.0 -(word) divr16u::quotient#3 quotient zp[2]:16 2.75 +(word) divr16u::quotient#1 quotient zp[2]:12 16.5 +(word) divr16u::quotient#2 quotient zp[2]:12 11.0 +(word) divr16u::quotient#3 quotient zp[2]:12 2.75 (word) divr16u::rem -(word) divr16u::rem#0 rem zp[2]:12 8.25 -(word) divr16u::rem#1 rem zp[2]:12 22.0 -(word) divr16u::rem#10 rem zp[2]:12 4.0 -(word) divr16u::rem#11 rem zp[2]:12 11.666666666666666 -(word) divr16u::rem#2 rem zp[2]:12 22.0 -(word) divr16u::rem#4 rem zp[2]:12 4.0 -(word) divr16u::rem#5 rem zp[2]:12 24.0 -(word) divr16u::rem#6 rem zp[2]:12 11.0 +(word) divr16u::rem#0 rem zp[2]:19 8.25 +(word) divr16u::rem#1 rem zp[2]:19 22.0 +(word) divr16u::rem#10 rem zp[2]:19 4.0 +(word) divr16u::rem#11 rem zp[2]:19 11.666666666666666 +(word) divr16u::rem#2 rem zp[2]:19 22.0 +(word) divr16u::rem#4 rem zp[2]:19 4.0 +(word) divr16u::rem#5 rem zp[2]:19 24.0 +(word) divr16u::rem#6 rem zp[2]:19 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp[2]:16 5.285714285714286 -(word) divr16u::return#2 return zp[2]:16 4.0 -(word) divr16u::return#3 return zp[2]:16 4.0 -(byte) frame_cnt loadstore zp[1]:18 0.6521739130434783 +(word) divr16u::return#0 return zp[2]:12 5.285714285714286 +(word) divr16u::return#2 return zp[2]:12 4.0 +(word) divr16u::return#3 return zp[2]:12 4.0 +(byte) frame_cnt loadstore zp[1]:14 0.6521739130434783 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() @@ -137,13 +137,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) irq::@2 (label) irq::@return (void()) main() -(signed dword~) main::$11 zp[4]:8 22.0 +(signed dword~) main::$11 zp[4]:6 22.0 (word~) main::$12 reg byte alu 22.0 -(word~) main::$22 zp[2]:36 22.0 -(word~) main::$23 zp[2]:36 22.0 -(signed word*~) main::$24 zp[2]:36 22.0 -(signed word*~) main::$25 zp[2]:36 22.0 -(signed dword~) main::$6 zp[4]:8 22.0 +(word~) main::$22 zp[2]:10 22.0 +(word~) main::$23 zp[2]:10 22.0 +(signed word*~) main::$24 zp[2]:10 22.0 +(signed word*~) main::$25 zp[2]:10 22.0 +(signed dword~) main::$6 zp[4]:6 22.0 (word~) main::$7 reg byte alu 22.0 (label) main::@1 (label) main::@10 @@ -159,30 +159,30 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) main::@8 (label) main::@9 (signed word) main::cos_x -(signed word) main::cos_x#0 cos_x zp[2]:36 22.0 +(signed word) main::cos_x#0 cos_x zp[2]:10 22.0 (word) main::idx_x -(word) main::idx_x#1 idx_x zp[2]:2 11.0 -(word) main::idx_x#10 idx_x zp[2]:2 3.6666666666666665 -(word) main::idx_x#3 idx_x zp[2]:2 1.375 +(word) main::idx_x#1 idx_x zp[2]:12 11.0 +(word) main::idx_x#10 idx_x zp[2]:12 3.6666666666666665 +(word) main::idx_x#3 idx_x zp[2]:12 1.375 (word) main::idx_y -(word) main::idx_y#1 idx_y zp[2]:14 11.0 -(word) main::idx_y#10 idx_y zp[2]:14 11.0 -(word) main::idx_y#3 idx_y zp[2]:14 1.1785714285714286 +(word) main::idx_y#1 idx_y zp[2]:32 11.0 +(word) main::idx_y#10 idx_y zp[2]:32 11.0 +(word) main::idx_y#3 idx_y zp[2]:32 1.1785714285714286 (signed word) main::sin_y -(signed word) main::sin_y#0 sin_y zp[2]:36 22.0 +(signed word) main::sin_y#0 sin_y zp[2]:10 22.0 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return (const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP/(byte) 4&(byte) $f (byte*) main::toD0181_screen (word) main::x -(word) main::x#0 x zp[2]:28 1.8333333333333333 +(word) main::x#0 x zp[2]:15 1.8333333333333333 (signed dword) main::xpos -(signed dword) main::xpos#0 xpos zp[4]:8 22.0 +(signed dword) main::xpos#0 xpos zp[4]:6 22.0 (word) main::y -(word) main::y#0 y zp[2]:19 11.0 +(word) main::y#0 y zp[2]:17 11.0 (signed dword) main::ypos -(signed dword) main::ypos#0 ypos zp[4]:8 22.0 +(signed dword) main::ypos#0 ypos zp[4]:6 22.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -191,21 +191,21 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) memset::c (byte) memset::c#4 reg byte x 1.375 (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:19 22.0 -(byte*) memset::dst#2 dst zp[2]:19 15.333333333333332 -(byte*) memset::dst#4 dst zp[2]:19 4.0 +(byte*) memset::dst#1 dst zp[2]:32 22.0 +(byte*) memset::dst#2 dst zp[2]:32 15.333333333333332 +(byte*) memset::dst#4 dst zp[2]:32 4.0 (byte*) memset::end -(byte*) memset::end#0 end zp[2]:14 2.1666666666666665 +(byte*) memset::end#0 end zp[2]:12 2.1666666666666665 (word) memset::num -(word) memset::num#2 num zp[2]:14 2.0 +(word) memset::num#2 num zp[2]:12 2.0 (void*) memset::return (void*) memset::str -(void*) memset::str#3 str zp[2]:19 +(void*) memset::str#3 str zp[2]:32 (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) -(word~) mul16s::$13 zp[2]:34 4.0 -(word~) mul16s::$16 zp[2]:21 4.0 -(word~) mul16s::$17 zp[2]:19 4.0 -(word~) mul16s::$9 zp[2]:21 4.0 +(word~) mul16s::$13 zp[2]:26 4.0 +(word~) mul16s::$16 zp[2]:19 4.0 +(word~) mul16s::$17 zp[2]:17 4.0 +(word~) mul16s::$9 zp[2]:19 4.0 (label) mul16s::@1 (label) mul16s::@2 (label) mul16s::@3 @@ -213,23 +213,23 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) mul16s::@5 (label) mul16s::@return (signed word) mul16s::a -(signed word) mul16s::a#0 a zp[2]:19 22.0 -(signed word) mul16s::a#3 a zp[2]:19 1.0 +(signed word) mul16s::a#0 a zp[2]:17 22.0 +(signed word) mul16s::a#3 a zp[2]:17 1.0 (signed word) mul16s::b -(signed word) mul16s::b#1 b zp[2]:36 22.0 -(signed word) mul16s::b#2 b zp[2]:36 22.0 -(signed word) mul16s::b#3 b zp[2]:36 2.1818181818181817 +(signed word) mul16s::b#1 b zp[2]:10 22.0 +(signed word) mul16s::b#2 b zp[2]:10 22.0 +(signed word) mul16s::b#3 b zp[2]:10 2.1818181818181817 (dword) mul16s::m -(dword) mul16s::m#0 m zp[4]:8 2.0 -(dword) mul16s::m#1 m zp[4]:8 4.0 -(dword) mul16s::m#2 m zp[4]:8 4.0 -(dword) mul16s::m#4 m zp[4]:8 4.0 -(dword) mul16s::m#5 m zp[4]:8 2.5 +(dword) mul16s::m#0 m zp[4]:6 2.0 +(dword) mul16s::m#1 m zp[4]:6 4.0 +(dword) mul16s::m#2 m zp[4]:6 4.0 +(dword) mul16s::m#4 m zp[4]:6 4.0 +(dword) mul16s::m#5 m zp[4]:6 2.5 (signed dword) mul16s::return -(signed dword) mul16s::return#0 return zp[4]:8 7.000000000000001 -(signed dword) mul16s::return#2 return zp[4]:8 22.0 -(signed dword) mul16s::return#3 return zp[4]:8 22.0 -(signed dword) mul16s::return#4 return zp[4]:8 22.0 +(signed dword) mul16s::return#0 return zp[4]:6 7.000000000000001 +(signed dword) mul16s::return#2 return zp[4]:6 22.0 +(signed dword) mul16s::return#3 return zp[4]:6 22.0 +(signed dword) mul16s::return#4 return zp[4]:6 22.0 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (byte~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 @@ -238,57 +238,58 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) mul16u::@4 (label) mul16u::@return (word) mul16u::a -(word) mul16u::a#0 a zp[2]:12 101.0 -(word) mul16u::a#1 a zp[2]:12 2.0 -(word) mul16u::a#2 a zp[2]:12 2.0 -(word) mul16u::a#3 a zp[2]:12 67.66666666666666 -(word) mul16u::a#6 a zp[2]:12 6.0 +(word) mul16u::a#0 a zp[2]:26 101.0 +(word) mul16u::a#1 a zp[2]:26 2.0 +(word) mul16u::a#2 a zp[2]:26 2.0 +(word) mul16u::a#3 a zp[2]:26 67.66666666666666 +(word) mul16u::a#6 a zp[2]:26 3.0 (word) mul16u::b -(word) mul16u::b#0 b zp[2]:21 4.0 -(word) mul16u::b#1 b_1 zp[2]:2 4.0 +(word) mul16u::b#0 b zp[2]:19 4.0 +(word) mul16u::b#1 b zp[2]:19 4.0 +(word) mul16u::b#2 b zp[2]:19 4.0 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:30 6.0 -(dword) mul16u::mb#1 mb zp[4]:30 202.0 -(dword) mul16u::mb#2 mb zp[4]:30 43.57142857142858 +(dword) mul16u::mb#0 mb zp[4]:28 4.0 +(dword) mul16u::mb#1 mb zp[4]:28 202.0 +(dword) mul16u::mb#2 mb zp[4]:28 43.57142857142858 (dword) mul16u::res -(dword) mul16u::res#1 res zp[4]:8 202.0 -(dword) mul16u::res#2 res zp[4]:8 43.85714285714286 -(dword) mul16u::res#6 res zp[4]:8 101.0 +(dword) mul16u::res#1 res zp[4]:6 202.0 +(dword) mul16u::res#2 res zp[4]:6 43.85714285714286 +(dword) mul16u::res#6 res zp[4]:6 101.0 (dword) mul16u::return -(dword) mul16u::return#2 return zp[4]:8 4.0 -(dword) mul16u::return#3 return zp[4]:8 4.0 +(dword) mul16u::return#2 return zp[4]:6 4.0 +(dword) mul16u::return#3 return zp[4]:6 4.0 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) -(dword~) mulu16_sel::$0 zp[4]:8 4.0 -(dword~) mulu16_sel::$1 zp[4]:8 4.0 +(dword~) mulu16_sel::$0 zp[4]:6 4.0 +(dword~) mulu16_sel::$1 zp[4]:6 4.0 (label) mulu16_sel::@1 (label) mulu16_sel::@return (word) mulu16_sel::return -(word) mulu16_sel::return#0 return zp[2]:36 4.0 -(word) mulu16_sel::return#1 return_1 zp[2]:21 4.0 -(word) mulu16_sel::return#10 return_1 zp[2]:21 4.0 -(word) mulu16_sel::return#11 return zp[2]:36 4.0 -(word) mulu16_sel::return#12 return zp[2]:36 1.714285714285714 -(word) mulu16_sel::return#2 return zp[2]:36 4.0 +(word) mulu16_sel::return#0 return zp[2]:32 4.0 +(word) mulu16_sel::return#1 return_1 zp[2]:10 4.0 +(word) mulu16_sel::return#10 return_1 zp[2]:10 4.0 +(word) mulu16_sel::return#11 return zp[2]:32 4.0 +(word) mulu16_sel::return#12 return zp[2]:32 1.714285714285714 +(word) mulu16_sel::return#2 return zp[2]:32 4.0 (byte) mulu16_sel::select (byte) mulu16_sel::select#5 reg byte x 0.3333333333333333 (word) mulu16_sel::v1 -(word) mulu16_sel::v1#0 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#1 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#2 v1 zp[2]:21 4.0 -(word) mulu16_sel::v1#3 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#4 v1 zp[2]:21 2.0 -(word) mulu16_sel::v1#5 v1 zp[2]:21 12.0 +(word) mulu16_sel::v1#0 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#1 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#2 v1 zp[2]:10 4.0 +(word) mulu16_sel::v1#3 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#4 v1 zp[2]:10 2.0 +(word) mulu16_sel::v1#5 v1 zp[2]:10 12.0 (word) mulu16_sel::v2 -(word) mulu16_sel::v2#0 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#1 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#3 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#4 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#5 v2 zp[2]:2 5.0 +(word) mulu16_sel::v2#0 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#1 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#3 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#4 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#5 v2 zp[2]:19 5.0 (const byte*) plots_per_frame[(number) $100] = { fill( $100, 0) } (word) rem16u -(word) rem16u#1 rem16u zp[2]:12 0.8 +(word) rem16u#1 rem16u zp[2]:19 0.8 (signed word()) sin16s((dword) sin16s::x) -(dword~) sin16s::$4 zp[4]:30 4.0 +(dword~) sin16s::$4 zp[4]:28 4.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 @@ -305,37 +306,37 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) sin16s::isUpper (byte) sin16s::isUpper#2 reg byte y 0.06060606060606061 (signed word) sin16s::return -(signed word) sin16s::return#0 return zp[2]:19 22.0 -(signed word) sin16s::return#1 return zp[2]:19 5.0 -(signed word) sin16s::return#5 return zp[2]:19 4.0 +(signed word) sin16s::return#0 return zp[2]:17 22.0 +(signed word) sin16s::return#1 return zp[2]:17 5.0 +(signed word) sin16s::return#5 return zp[2]:17 4.0 (signed word) sin16s::sinx -(signed word) sin16s::sinx#1 sinx zp[2]:19 4.0 +(signed word) sin16s::sinx#1 sinx zp[2]:17 4.0 (word) sin16s::usinx -(word) sin16s::usinx#0 usinx zp[2]:19 0.3333333333333333 -(word) sin16s::usinx#1 usinx zp[2]:19 1.0 +(word) sin16s::usinx#0 usinx zp[2]:17 0.3333333333333333 +(word) sin16s::usinx#1 usinx zp[2]:17 1.0 (dword) sin16s::x -(dword) sin16s::x#0 x zp[4]:8 8.5 -(dword) sin16s::x#1 x zp[4]:8 4.0 -(dword) sin16s::x#2 x zp[4]:8 4.0 -(dword) sin16s::x#4 x zp[4]:8 5.0 -(dword) sin16s::x#6 x zp[4]:8 6.0 +(dword) sin16s::x#0 x zp[4]:6 8.5 +(dword) sin16s::x#1 x zp[4]:6 4.0 +(dword) sin16s::x#2 x zp[4]:6 4.0 +(dword) sin16s::x#4 x zp[4]:6 5.0 +(dword) sin16s::x#6 x zp[4]:6 6.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp[2]:34 0.6363636363636365 (word) sin16s::x2 -(word) sin16s::x2#0 x2 zp[2]:21 4.0 +(word) sin16s::x2#0 x2 zp[2]:10 4.0 (word) sin16s::x3 -(word) sin16s::x3#0 x3 zp[2]:21 1.0 +(word) sin16s::x3#0 x3 zp[2]:10 1.0 (word) sin16s::x3_6 -(word) sin16s::x3_6#0 x3_6 zp[2]:36 4.0 +(word) sin16s::x3_6#0 x3_6 zp[2]:32 4.0 (word) sin16s::x4 -(word) sin16s::x4#0 x4 zp[2]:21 4.0 +(word) sin16s::x4#0 x4 zp[2]:10 4.0 (word) sin16s::x5 -(word) sin16s::x5#0 x5 zp[2]:36 4.0 +(word) sin16s::x5#0 x5 zp[2]:32 4.0 (word) sin16s::x5_128 -(word) sin16s::x5_128#0 x5_128 zp[2]:36 4.0 +(word) sin16s::x5_128#0 x5_128 zp[2]:32 4.0 (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) -(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0 -(word~) sin16s_gen2::$9 zp[2]:28 11.0 +(signed dword~) sin16s_gen2::$6 zp[4]:6 22.0 +(word~) sin16s_gen2::$9 zp[2]:26 11.0 (label) sin16s_gen2::@1 (label) sin16s_gen2::@2 (label) sin16s_gen2::@3 @@ -345,53 +346,52 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (signed word) sin16s_gen2::ampl (const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0 (word) sin16s_gen2::i -(word) sin16s_gen2::i#1 i zp[2]:14 22.0 -(word) sin16s_gen2::i#2 i zp[2]:14 2.5384615384615383 +(word) sin16s_gen2::i#1 i zp[2]:12 22.0 +(word) sin16s_gen2::i#2 i zp[2]:12 2.5384615384615383 (signed word) sin16s_gen2::max (const signed word) sin16s_gen2::max#0 max = (signed word) $1001 (signed word) sin16s_gen2::min (const signed word) sin16s_gen2::min#0 min = (signed word) -$1001 (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0 +(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:15 7.333333333333333 +(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:15 3.0 (dword) sin16s_gen2::step -(dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666 +(dword) sin16s_gen2::step#0 step zp[4]:22 0.8666666666666666 (word) sin16s_gen2::wavelength (const word) sin16s_gen2::wavelength#0 wavelength = (word) $200 (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 x zp[4]:4 11.0 -(dword) sin16s_gen2::x#2 x zp[4]:4 2.75 +(dword) sin16s_gen2::x#1 x zp[4]:2 11.0 +(dword) sin16s_gen2::x#2 x zp[4]:2 2.75 -zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] reg byte x [ memset::c#4 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] -zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +zp[4]:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] reg byte y [ sin16s::isUpper#2 ] -zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] +zp[4]:6 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$6 main::$11 mulu16_sel::$0 mulu16_sel::$1 ] +zp[2]:10 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] reg byte x [ mulu16_sel::select#5 ] -zp[2]:12 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +zp[2]:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_x#3 main::idx_x#10 main::idx_x#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp[1]:18 [ frame_cnt ] +zp[1]:14 [ frame_cnt ] reg byte alu [ main::$7 ] +zp[2]:15 [ main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] reg byte alu [ main::$12 ] reg byte x [ bitmap_plot::y#0 ] -zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] +zp[2]:17 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ] reg byte a [ bitmap_plot::$2 ] -zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] +zp[2]:19 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] reg byte a [ mul16u::$1 ] -zp[1]:23 [ bitmap_init::$7 ] +zp[1]:21 [ bitmap_init::$7 ] reg byte a [ bitmap_init::$4 ] reg byte a [ bitmap_init::$5 ] reg byte a [ bitmap_init::$6 ] -zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -zp[2]:28 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ] -zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -zp[2]:34 [ sin16s::x1#0 mul16s::$13 ] -zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$22 main::$24 main::$23 main::$25 ] +zp[4]:22 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] +zp[2]:26 [ sin16s_gen2::$9 mul16s::$13 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +zp[4]:28 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +zp[2]:32 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +zp[2]:34 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] diff --git a/src/test/ref/bitmap-plot-2.asm b/src/test/ref/bitmap-plot-2.asm index 836858a91..7da5f2912 100644 --- a/src/test/ref/bitmap-plot-2.asm +++ b/src/test/ref/bitmap-plot-2.asm @@ -44,9 +44,9 @@ .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $12 + .label frame_cnt = $10 // Remainder after unsigned 16-bit division - .label rem16u = $15 + .label rem16u = $13 __b1: // Counts frames - updated by the IRQ lda #1 @@ -55,24 +55,24 @@ __b1: rts main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __7 = $1c - .label __8 = $1c + .label __7 = $11 + .label __8 = $11 .label __13 = $13 .label __14 = $13 - .label __31 = $24 - .label __32 = $24 - .label cos_x = $24 - .label xpos = $a - .label x = $1c - .label sin_y = $24 - .label ypos = $a + .label __31 = $c + .label __32 = $c + .label cos_x = $c + .label xpos = 8 + .label x = $11 + .label sin_y = $c + .label ypos = 8 .label y = $13 - .label idx_x = 2 - .label idx_y = $e - .label r = 4 + .label idx_x = $e + .label idx_y = $20 + .label r = 2 .label r_add = $17 - .label __33 = $24 - .label __34 = $24 + .label __33 = $c + .label __34 = $c jsr sin16s_gen2 jsr bitmap_init jsr bitmap_clear @@ -248,11 +248,11 @@ main: { jmp __b7 } // Plot a single dot in the bitmap -// bitmap_plot(word zp($1c) x, byte register(X) y) +// bitmap_plot(word zp($11) x, byte register(X) y) bitmap_plot: { .label __1 = $15 .label plotter = $13 - .label x = $1c + .label x = $11 lda bitmap_plot_yhi,x sta.z plotter+1 lda bitmap_plot_ylo,x @@ -280,16 +280,16 @@ bitmap_plot: { } // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp(4) a, signed word zp($24) b) +// mul16s(signed word zp(2) a, signed word zp($c) b) mul16s: { .label __9 = $15 .label __13 = $22 .label __16 = $15 .label __17 = $22 - .label m = $a - .label return = $a - .label a = 4 - .label b = $24 + .label m = 8 + .label return = 8 + .label a = 2 + .label b = $c lda.z a sta.z mul16u.a lda.z a+1 @@ -298,13 +298,6 @@ mul16s: { sta.z mul16u.b lda.z b+1 sta.z mul16u.b+1 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u lda.z a+1 bpl __b1 @@ -347,16 +340,23 @@ mul16s: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($15) a, word zp($13) b) mul16u: { - .label mb = $1e + .label mb = $1c .label a = $15 - .label res = $a + .label res = 8 .label b = $13 - .label return = $a - .label b_1 = 2 + .label return = 8 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a @@ -447,12 +447,12 @@ bitmap_clear: { rts } // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($e) str, byte register(X) c, word zp(4) num) +// memset(void* zp(2) str, byte register(X) c, word zp($e) num) memset: { - .label end = 4 - .label dst = $e - .label num = 4 - .label str = $e + .label end = $e + .label dst = 2 + .label num = $e + .label str = 2 lda.z num bne !+ lda.z num+1 @@ -487,7 +487,7 @@ memset: { // Initialize bitmap plotting tables bitmap_init: { .label __7 = $17 - .label yoffs = $24 + .label yoffs = $20 ldx #0 lda #$80 __b1: @@ -532,30 +532,33 @@ bitmap_init: { // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($10) sintab) +// sin16s_gen2(signed word* zp($11) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = $a - .label __9 = $1c + .label __6 = 8 + .label __9 = $22 .label step = $18 - .label sintab = $10 + .label sintab = $11 // u[4.28] // Iterate over the table - .label x = 6 + .label x = 4 .label i = $e jsr div32u16u lda #SINUS sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -623,20 +626,20 @@ sin16s_gen2: { // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp($a) x) +// sin16s(dword zp(8) x) sin16s: { - .label __4 = $1e - .label x = $a - .label return = 4 + .label __4 = $1c + .label x = 8 + .label return = 2 .label x1 = $22 - .label x2 = $13 - .label x3 = $13 - .label x3_6 = $24 - .label usinx = 4 - .label x4 = $13 - .label x5 = $24 - .label x5_128 = $24 - .label sinx = 4 + .label x2 = $c + .label x3 = $c + .label x3_6 = $20 + .label usinx = 2 + .label x4 = $c + .label x5 = $20 + .label x5_128 = $20 + .label sinx = 2 lda.z x+3 cmp #>PI_u4f28>>$10 bcc b1 @@ -807,25 +810,18 @@ sin16s: { } // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($13) v1, word zp(2) v2, byte register(X) select) +// mulu16_sel(word zp($c) v1, word zp($13) v2, byte register(X) select) mulu16_sel: { - .label __0 = $a - .label __1 = $a - .label v1 = $13 - .label v2 = 2 - .label return = $24 - .label return_1 = $13 + .label __0 = 8 + .label __1 = 8 + .label v1 = $c + .label v2 = $13 + .label return = $20 + .label return_1 = $c lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u cpx #0 beq !e+ @@ -846,8 +842,8 @@ mulu16_sel: { // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $24 - .label quotient_lo = $10 + .label quotient_hi = $22 + .label quotient_lo = $e .label return = $18 lda #>$10 sta.z divr16u.dividend @@ -880,12 +876,12 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($e) dividend, word zp($15) rem) +// divr16u(word zp($15) dividend, word zp($13) rem) divr16u: { - .label rem = $15 - .label dividend = $e - .label quotient = $10 - .label return = $10 + .label rem = $13 + .label dividend = $15 + .label quotient = $e + .label return = $e ldx #0 txa sta.z quotient diff --git a/src/test/ref/bitmap-plot-2.cfg b/src/test/ref/bitmap-plot-2.cfg index 77d962e22..c08b11721 100644 --- a/src/test/ref/bitmap-plot-2.cfg +++ b/src/test/ref/bitmap-plot-2.cfg @@ -36,9 +36,9 @@ main::@8: scope:[main] from main::toD0181 to:main::@1 main::@1: scope:[main] from main::@5 main::@8 [15] (byte) main::r_add#10 ← phi( main::@8/(byte) $20 main::@5/(byte) main::r_add#12 ) - [15] (word) main::idx_y#3 ← phi( main::@8/(byte) $80 main::@5/(word) main::idx_y#10 ) - [15] (signed word) main::r#10 ← phi( main::@8/(signed byte) 0 main::@5/(signed word) main::r#1 ) - [15] (word) main::idx_x#11 ← phi( main::@8/(byte) 0 main::@5/(word) main::idx_x#10 ) + [15] (word) main::idx_y#3 ← phi( main::@8/(word) $80 main::@5/(word) main::idx_y#10 ) + [15] (signed word) main::r#10 ← phi( main::@8/(signed word) 0 main::@5/(signed word) main::r#1 ) + [15] (word) main::idx_x#11 ← phi( main::@8/(word) 0 main::@5/(word) main::idx_x#10 ) to:main::@2 main::@2: scope:[main] from main::@1 [16] (word~) main::$31 ← (word) main::idx_x#11 << (byte) 1 @@ -156,324 +156,325 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [81] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [81] (dword) mul16u::mb#0 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [81] (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [82] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [82] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [82] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [83] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [83] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [83] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [84] return + [85] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [86] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [87] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [88] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [89] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [90] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [89] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [90] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [91] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (void()) init_irq() init_irq: scope:[init_irq] from main::@8 asm { sei } - [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK - [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO - [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR - [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 - [96] *((const byte*) RASTER) ← (byte) 0 - [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER - [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() + [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK + [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO + [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR + [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 + [97] *((const byte*) RASTER) ← (byte) 0 + [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER + [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() asm { cli } to:init_irq::@return init_irq::@return: scope:[init_irq] from init_irq - [100] return + [101] return to:@return (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) bitmap_clear: scope:[bitmap_clear] from main::@10 - [101] phi() - [102] call memset + [102] phi() + [103] call memset to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [103] phi() - [104] call memset + [104] phi() + [105] call memset to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [105] return + [106] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from bitmap_clear bitmap_clear::@1 - [106] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) - [106] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) - [106] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) - [107] if((word) memset::num#2<=(byte) 0) goto memset::@return + [107] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) + [107] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) + [107] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) + [108] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [110] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [111] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [112] return + [113] return to:@return memset::@3: scope:[memset] from memset::@2 - [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [114] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [115] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 (void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen) bitmap_init: scope:[bitmap_init] from main::@9 - [115] phi() + [116] phi() to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [116] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) - [116] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) - [117] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 - [118] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 - [119] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 + [117] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) + [117] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) + [118] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 + [119] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 + [120] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 to:bitmap_init::@2 bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1 - [120] phi() + [121] phi() to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6 - [121] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) - [122] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 - [123] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 + [122] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) + [123] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 + [124] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [124] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) - [124] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) - [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 - [126] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 - [127] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 - [128] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 - [129] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 - [130] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 - [131] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 + [125] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) + [125] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) + [126] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 + [127] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 + [128] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 + [129] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 + [130] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 + [131] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 + [132] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3 - [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 + [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5 - [133] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) - [134] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 - [135] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 + [134] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) + [135] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 + [136] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [136] return + [137] return to:@return (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) sin16s_gen2: scope:[sin16s_gen2] from main - [137] phi() - [138] call div32u16u - [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + [138] phi() + [139] call div32u16u + [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 - [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [141] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [141] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [141] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + [142] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) + [142] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [142] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [143] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [143] return + [144] return to:@return sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [145] call sin16s - [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 + [146] call sin16s + [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [148] call mul16s - [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [149] call mul16s + [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 + [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD + [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 + [156] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 to:sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [158] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [158] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [159] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [159] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [161] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [166] call mulu16_sel - [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [162] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [167] call mulu16_sel + [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [171] call mulu16_sel - [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [172] call mulu16_sel + [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [175] call mulu16_sel - [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [176] call mulu16_sel + [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [181] call mulu16_sel - [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [182] call mulu16_sel + [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [186] call mulu16_sel - [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [187] call mulu16_sel + [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [191] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [192] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [193] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [194] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [194] return + [195] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [196] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [196] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [196] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [199] call mul16u - [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [197] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [197] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [197] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [200] call mul16u + [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [203] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [204] return + [205] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [205] phi() - [206] call divr16u - [207] (word) divr16u::return#2 ← (word) divr16u::return#0 + [206] phi() + [207] call divr16u + [208] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [209] (word) divr16u::rem#4 ← (word) rem16u#1 - [210] call divr16u - [211] (word) divr16u::return#3 ← (word) divr16u::return#0 + [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [210] (word) divr16u::rem#4 ← (word) rem16u#1 + [211] call divr16u + [212] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [212] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [213] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [213] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [214] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [214] return + [215] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [215] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [215] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [216] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [216] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [216] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [216] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [216] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [216] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [217] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [219] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [220] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [217] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [217] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [217] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [217] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [218] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [220] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [221] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [222] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [223] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [224] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 + [223] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [224] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [225] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [226] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 + [227] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [228] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [228] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [229] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [230] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [229] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [229] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [230] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [231] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [231] (word) rem16u#1 ← (word) divr16u::rem#11 + [232] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [232] return + [233] return to:@return interrupt(HARDWARE_CLOBBER)(void()) irq() irq: scope:[irq] from - [233] *((const byte*) BGCOL) ← (const byte) WHITE - [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 + [234] *((const byte*) BGCOL) ← (const byte) WHITE + [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 to:irq::@2 irq::@2: scope:[irq] from irq - [235] (byte) frame_cnt ← ++ (byte) frame_cnt + [236] (byte) frame_cnt ← ++ (byte) frame_cnt to:irq::@1 irq::@1: scope:[irq] from irq irq::@2 - [236] *((const byte*) BGCOL) ← (const byte) BLACK - [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [237] *((const byte*) BGCOL) ← (const byte) BLACK + [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irq::@return irq::@return: scope:[irq] from irq::@1 - [238] return + [239] return to:@return diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index 398256f0e..83556de02 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -86,7 +86,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@6 @6: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@29 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -94,7 +94,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -202,7 +202,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#13 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -217,8 +217,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul16u: scope:[mul16u] from mul16s mulu16_sel (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#2 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -348,8 +348,8 @@ sin16s_gen2::@7: scope:[sin16s_gen2] from sin16s_gen2 (dword~) sin16s_gen2::$3 ← (dword) div32u16u::return#4 (word) rem16u#6 ← (word) rem16u#15 (dword) sin16s_gen2::step#0 ← (dword~) sin16s_gen2::$3 - (dword) sin16s_gen2::x#0 ← (number) 0 - (word) sin16s_gen2::i#0 ← (number) 0 + (dword) sin16s_gen2::x#0 ← (dword) 0 + (word) sin16s_gen2::i#0 ← (word) 0 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@7 sin16s_gen2::@9 (dword) sin16s_gen2::step#4 ← phi( sin16s_gen2::@7/(dword) sin16s_gen2::step#0 sin16s_gen2::@9/(dword) sin16s_gen2::step#1 ) @@ -421,7 +421,7 @@ sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 (dword) sin16s::x#3 ← phi( sin16s_gen2::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -620,7 +620,7 @@ bitmap_init: scope:[bitmap_init] from main::@24 (byte*) bitmap_init::gfx#1 ← phi( main::@24/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -819,10 +819,10 @@ main::@27: scope:[main] from main::@23 (byte*) bitmap_screen#23 ← phi( main::@23/(byte*) bitmap_screen#27 ) (byte*) bitmap_gfx#24 ← phi( main::@23/(byte*) bitmap_gfx#28 ) (word) rem16u#32 ← phi( main::@23/(word) rem16u#37 ) - (word) main::idx_x#0 ← (number) 0 - (word) main::idx_y#0 ← (number) $80 - (signed word) main::r#0 ← (number) 0 - (byte) main::r_add#0 ← (number) $20 + (word) main::idx_x#0 ← (word) 0 + (word) main::idx_y#0 ← (word) $80 + (signed word) main::r#0 ← (signed word) 0 + (byte) main::r_add#0 ← (byte) $20 to:main::@1 main::@1: scope:[main] from main::@27 main::@6 (byte) main::r_add#11 ← phi( main::@27/(byte) main::r_add#0 main::@6/(byte) main::r_add#12 ) @@ -1003,7 +1003,7 @@ main::@return: scope:[main] from main::@17 (byte*) bitmap_screen#21 ← phi( @29/(byte*) bitmap_screen#0 ) (byte*) bitmap_gfx#22 ← phi( @29/(byte*) bitmap_gfx#0 ) (word) rem16u#30 ← phi( @29/(word) rem16u#35 ) - (byte) frame_cnt ← (number) 1 + (byte) frame_cnt ← (byte) 1 to:@38 (void()) init_irq() @@ -1065,32 +1065,32 @@ SYMBOL TABLE SSA (label) @end (const byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*)(number) $d011 (const byte*) D018 = (byte*)(number) $d018 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $400 (const signed word*) SINUS[(number) $200] = { fill( $200, 0) } (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (number~) bitmap_clear::$0 (number~) bitmap_clear::$1 @@ -1928,8 +1928,6 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#1) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#1) Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1939,7 +1937,6 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (unumber)(number) 1 @@ -1949,9 +1946,6 @@ Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul Adding number conversion cast (snumber) 0 in (bool~) mul16s::$3 ← (signed word) mul16s::a#4 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mul16s::$5 ← (signed word) mul16s::b#4 < (number) 0 Adding number conversion cast (snumber) 1 in (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl#0 >> (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen2::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen2::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1963,7 +1957,6 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (nu Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -1995,10 +1988,6 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) 0 in (word) main::idx_x#0 ← (number) 0 -Adding number conversion cast (unumber) $80 in (word) main::idx_y#0 ← (number) $80 -Adding number conversion cast (snumber) 0 in (signed word) main::r#0 ← (number) 0 -Adding number conversion cast (unumber) $20 in (byte) main::r_add#0 ← (number) $20 Adding number conversion cast (snumber) 2 in (signed word~) main::$8 ← (signed word~) main::$7 >> (number) 2 Adding number conversion cast (snumber) $a0 in (number~) main::$9 ← (number) $a0 + (signed word~) main::$8 Adding number conversion cast (snumber) main::$9 in (number~) main::$9 ← (snumber)(number) $a0 + (signed word~) main::$8 @@ -2013,24 +2002,17 @@ Adding number conversion cast (unumber) 1 in (bool~) main::$25 ← (byte) main:: Adding number conversion cast (unumber) 0 in (word) main::idx_y#2 ← (number) 0 Adding number conversion cast (snumber) $200*$c+$100 in (bool~) main::$28 ← (signed word) main::r#5 >= (number) $200*(number) $c+(number) $100 Adding number conversion cast (unumber) 2 in (byte) main::r_add#1 ← (byte) main::r_add#5 / (number) 2 -Adding number conversion cast (unumber) 1 in (byte) frame_cnt ← (number) 1 Adding number conversion cast (unumber) $80 in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (number) $80 Adding number conversion cast (unumber) 0 in *((const byte*) RASTER) ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) irq::$1 ← (number) 0 != (byte) frame_cnt Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#3 Inlining cast (word~) mul16s::$1 ← (word)(signed word) mul16s::b#3 Inlining cast (word~) mul16s::$10 ← (word)(signed word) mul16s::b#5 Inlining cast (signed dword~) mul16s::$7 ← (signed dword)(dword) mul16s::m#4 Inlining cast (word~) mul16s::$14 ← (word)(signed word) mul16s::a#5 -Inlining cast (dword) sin16s_gen2::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen2::i#0 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s_gen2::$8 ← (signed word)(word~) sin16s_gen2::$7 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -2042,7 +2024,6 @@ Inlining cast (signed word~) sin16s::$14 ← (signed word)(word) sin16s::usinx#1 Inlining cast (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#3 Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast (word) sin16s_gen2::wavelength#0 ← (unumber)(number) $200 @@ -2051,10 +2032,6 @@ Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $1001 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (word) main::idx_x#0 ← (unumber)(number) 0 -Inlining cast (word) main::idx_y#0 ← (unumber)(number) $80 -Inlining cast (signed word) main::r#0 ← (snumber)(number) 0 -Inlining cast (byte) main::r_add#0 ← (unumber)(number) $20 Inlining cast (signed word~) main::$7 ← (signed word)(word~) main::$6 Inlining cast (word~) main::$10 ← (word)(snumber~) main::$9 Inlining cast (signed word~) main::$13 ← (signed word)(word~) main::$12 @@ -2062,7 +2039,6 @@ Inlining cast (word~) main::$16 ← (word)(snumber~) main::$15 Inlining cast (byte~) main::$17 ← (byte)(word) main::y#0 Inlining cast (word) main::idx_x#2 ← (unumber)(number) 0 Inlining cast (word) main::idx_y#2 ← (unumber)(number) 0 -Inlining cast (byte) frame_cnt ← (unumber)(number) 1 Inlining cast *((const byte*) RASTER) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 @@ -2079,8 +2055,6 @@ Simplifying constant pointer cast (byte*) 56333 Simplifying constant pointer cast (void()**) 65534 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2091,7 +2065,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -2099,9 +2072,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -2112,7 +2082,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -2133,10 +2102,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast $20 Simplifying constant integer cast 2 Simplifying constant integer cast $a0 Simplifying constant integer cast 2 @@ -2148,13 +2113,10 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 2 -Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2163,7 +2125,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -2171,9 +2132,6 @@ Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2184,7 +2142,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -2202,10 +2159,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 -Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) $20 Finalized signed number type (signed byte) 2 Finalized signed number type (signed word) $a0 Finalized signed number type (signed byte) 2 @@ -2217,7 +2170,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -2283,7 +2235,6 @@ Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#2 Alias (word) mul16u::a#3 = (word) mul16u::a#4 (word) mul16u::a#7 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#4 (dword) mul16u::return#1 @@ -2593,8 +2544,8 @@ De-inlining pointer[w] to *(pointer+w) [412] (signed word) main::sin_y#0 ← * Successful SSA optimization Pass2DeInlineWordDerefIdx Simplifying expression containing zero bitmap_clear::$0 in [327] (byte) bitmap_clear::col#0 ← (byte~) bitmap_clear::$0 + (const byte) bitmap_clear::bgcol#0 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (void*) memset::return#2 and assignment [168] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [170] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#2 and assignment [169] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [171] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) bitmap_clear::bgcol#0 Eliminating unused constant (const word) rem16u#0 Eliminating unused constant (const byte*) bitmap_screen#0 @@ -2619,18 +2570,18 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Alias (byte) bitmap_clear::col#0 = (byte~) bitmap_clear::$0 Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) main::$24 [230] if((word) main::idx_x#10==(byte) 0) goto main::@31 -Simple Condition (bool~) main::$25 [253] if((byte) main::r_add#10!=(byte) 1) goto main::@13 +Simple Condition (bool~) main::$24 [231] if((word) main::idx_x#10==(byte) 0) goto main::@31 +Simple Condition (bool~) main::$25 [254] if((byte) main::r_add#10!=(byte) 1) goto main::@13 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [230] if((word) main::idx_x#10!=(byte) 0) goto main::@6 -Negating conditional jump and destination [253] if((byte) main::r_add#10==(byte) 1) goto main::@6 +Negating conditional jump and destination [231] if((word) main::idx_x#10!=(byte) 0) goto main::@6 +Negating conditional jump and destination [254] if((byte) main::r_add#10==(byte) 1) goto main::@6 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [164] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 -Constant right-side identified [181] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [184] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Constant right-side identified [60] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 +Constant right-side identified [165] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 +Constant right-side identified [182] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff +Constant right-side identified [185] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = > (signed byte) 1 -Constant right-side identified [173] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 -Constant right-side identified [175] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 +Constant right-side identified [58] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1 +Constant right-side identified [174] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 +Constant right-side identified [176] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::$1 = sin16s_gen2::ampl#0>>1 Constant (const word) main::toD0181_$2 = main::toD0181_$1*4 Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [57] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 -Constant right-side identified [172] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 -Constant right-side identified [173] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f +Constant right-side identified [58] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 +Constant right-side identified [173] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 +Constant right-side identified [174] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1 Constant (const byte) main::toD0181_$3 = >main::toD0181_$2 @@ -2660,34 +2611,34 @@ Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f Successful SSA optimization Pass2ConstantIdentification Simplifying constant evaluating to zero (const signed word) sin16s_gen2::min#0+(const signed word) sin16s_gen2::$1 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero sin16s_gen2::$8 in [72] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 +Simplifying expression containing zero sin16s_gen2::$8 in [73] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const signed word) sin16s_gen2::$1 Eliminating unused constant (const signed word) sin16s_gen2::offs#0 Successful SSA optimization PassNEliminateUnusedVars Alias (signed word~) sin16s_gen2::$9 = (signed word~) sin16s_gen2::$8 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [171] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 +Constant right-side identified [172] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [47] (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 keeping mul16s::b#3 -Inlining Noop Cast [53] (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 keeping mul16s::a#3 -Inlining Noop Cast [110] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [114] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [128] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 -Inlining Noop Cast [130] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [48] (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 keeping mul16s::b#3 +Inlining Noop Cast [54] (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 keeping mul16s::a#3 +Inlining Noop Cast [111] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [115] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [129] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [131] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [70] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 -Inlining Noop Cast [160] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0 -Inlining Noop Cast [182] (signed word~) main::$7 ← (signed word)(word~) main::$6 keeping main::$7 -Inlining Noop Cast [185] (word) main::x#0 ← (word)(signed word~) main::$9 keeping main::x#0 -Inlining Noop Cast [195] (signed word~) main::$13 ← (signed word)(word~) main::$12 keeping main::$13 -Inlining Noop Cast [198] (word) main::y#0 ← (word)(signed word~) main::$15 keeping main::y#0 +Inlining Noop Cast [71] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 +Inlining Noop Cast [161] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0 +Inlining Noop Cast [183] (signed word~) main::$7 ← (signed word)(word~) main::$6 keeping main::$7 +Inlining Noop Cast [186] (word) main::x#0 ← (word)(signed word~) main::$9 keeping main::x#0 +Inlining Noop Cast [196] (signed word~) main::$13 ← (signed word)(word~) main::$12 keeping main::$13 +Inlining Noop Cast [199] (word) main::y#0 ← (word)(signed word~) main::$15 keeping main::y#0 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [173] (word~) main::$31 ← (word) main::idx_x#11 * (const byte) SIZEOF_SIGNED_WORD -Rewriting multiplication to use shift [186] (word~) main::$32 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD -Rewriting division to use shift [213] (byte) main::r_add#1 ← (byte) main::r_add#10 / (byte) 2 +Rewriting multiplication to use shift [174] (word~) main::$31 ← (word) main::idx_x#11 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [187] (word~) main::$32 ← (word) main::idx_y#3 * (const byte) SIZEOF_SIGNED_WORD +Rewriting division to use shift [214] (byte) main::r_add#1 ← (byte) main::r_add#10 / (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2728,7 +2679,7 @@ Inlining constant with var siblings (const word) main::idx_y#2 Constant inlined bitmap_init::screen#0 = (const byte*) SCREEN Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined bitmap_init::gfx#0 = (const byte*) BITMAP -Constant inlined sin16s_gen2::i#0 = (byte) 0 +Constant inlined sin16s_gen2::i#0 = (word) 0 Constant inlined sin16s::isUpper#0 = (byte) 0 Constant inlined memset::num#1 = (word) $1f40 Constant inlined memset::num#0 = (word) $3e8 @@ -2739,7 +2690,7 @@ Constant inlined mulu16_sel::select#0 = (byte) 0 Constant inlined sin16s::isUpper#1 = (byte) 1 Constant inlined mulu16_sel::select#1 = (byte) 1 Constant inlined main::idx_y#2 = (byte) 0 -Constant inlined main::idx_y#0 = (byte) $80 +Constant inlined main::idx_y#0 = (word) $80 Constant inlined mul16s::b#0 = (const signed word) sin16s_gen2::ampl#0 Constant inlined main::toD0181_$7 = >(word)(const byte*) BITMAP/(byte) 4&(byte) $f Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN&(word) $3fff*(byte) 4 @@ -2761,14 +2712,14 @@ Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28 Constant inlined bitmap_init::bits#0 = (byte) $80 Constant inlined main::r_add#0 = (byte) $20 Constant inlined bitmap_init::bits#2 = (byte) $80 -Constant inlined divr16u::quotient#0 = (byte) 0 -Constant inlined sin16s_gen2::x#0 = (byte) 0 -Constant inlined mul16u::res#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 +Constant inlined sin16s_gen2::x#0 = (dword) 0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined main::idx_x#2 = (byte) 0 Constant inlined divr16u::divisor#1 = (const word) sin16s_gen2::wavelength#0 Constant inlined divr16u::divisor#0 = (const word) sin16s_gen2::wavelength#0 -Constant inlined main::idx_x#0 = (byte) 0 -Constant inlined main::r#0 = (signed byte) 0 +Constant inlined main::idx_x#0 = (word) 0 +Constant inlined main::r#0 = (signed word) 0 Constant inlined memset::str#1 = (void*)(const byte*) BITMAP Constant inlined memset::str#0 = (void*)(const byte*) SCREEN Constant inlined bitmap_clear::fgcol#0 = (const byte) WHITE @@ -2828,11 +2779,11 @@ CALL GRAPH Calls in [] to main:5 Calls in [main] to sin16s_gen2:9 bitmap_init:11 bitmap_clear:13 init_irq:18 mul16s:28 mul16s:41 bitmap_plot:49 Calls in [mul16s] to mul16u:86 -Calls in [bitmap_clear] to memset:134 memset:136 -Calls in [sin16s_gen2] to div32u16u:181 sin16s:188 mul16s:192 -Calls in [sin16s] to mulu16_sel:217 mulu16_sel:224 mulu16_sel:229 mulu16_sel:237 mulu16_sel:244 -Calls in [mulu16_sel] to mul16u:262 -Calls in [div32u16u] to divr16u:269 divr16u:274 +Calls in [bitmap_clear] to memset:135 memset:137 +Calls in [sin16s_gen2] to div32u16u:182 sin16s:189 mul16s:193 +Calls in [sin16s] to mulu16_sel:218 mulu16_sel:225 mulu16_sel:230 mulu16_sel:238 mulu16_sel:245 +Calls in [mulu16_sel] to mul16u:263 +Calls in [div32u16u] to divr16u:270 divr16u:275 Created 46 initial phi equivalence classes Coalesced [26] mul16s::a#8 ← mul16s::a#1 @@ -2847,61 +2798,61 @@ Coalesced [69] main::r_add#13 ← main::r_add#12 Coalesced (already) [72] main::r_add#15 ← main::r_add#10 Coalesced [73] main::idx_y#14 ← main::idx_y#1 Coalesced [74] main::idx_x#14 ← main::idx_x#1 -Coalesced [84] mul16u::mb#6 ← mul16u::b#0 +Coalesced [84] mul16u::b#3 ← mul16u::b#0 Coalesced [85] mul16u::a#8 ← mul16u::a#1 Coalesced [93] mul16s::m#7 ← mul16s::m#1 Coalesced [99] mul16s::m#10 ← mul16s::m#2 Coalesced [103] mul16s::m#9 ← mul16s::m#5 Coalesced [104] mul16s::m#8 ← mul16s::m#0 -Coalesced [106] mul16u::a#10 ← mul16u::a#6 -Coalesced [107] mul16u::mb#8 ← mul16u::mb#0 -Coalesced [115] mul16u::res#9 ← mul16u::res#1 -Coalesced [119] mul16u::a#11 ← mul16u::a#0 -Coalesced [120] mul16u::res#7 ← mul16u::res#6 -Coalesced [121] mul16u::mb#9 ← mul16u::mb#1 -Coalesced (already) [122] mul16u::res#8 ← mul16u::res#2 -Coalesced [149] memset::dst#5 ← memset::dst#1 -Coalesced [169] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [174] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [175] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [176] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [177] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [178] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [179] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced [191] mul16s::a#10 ← mul16s::a#0 -Coalesced [200] sin16s_gen2::i#6 ← sin16s_gen2::i#1 -Coalesced [201] sin16s_gen2::x#6 ← sin16s_gen2::x#1 -Coalesced [202] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 -Coalesced [205] sin16s::x#9 ← sin16s::x#1 -Coalesced [209] sin16s::x#11 ← sin16s::x#2 -Coalesced [215] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [216] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [222] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [223] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [228] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [235] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [236] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [242] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [243] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [251] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [255] sin16s::x#10 ← sin16s::x#4 -Coalesced [256] sin16s::x#8 ← sin16s::x#0 -Coalesced [260] mul16u::mb#7 ← mul16u::b#1 -Coalesced [261] mul16u::a#9 ← mul16u::a#2 -Coalesced [273] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [280] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [281] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [288] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [295] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [296] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [302] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [303] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [304] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [305] divr16u::i#7 ← divr16u::i#1 -Coalesced [306] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [307] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [308] divr16u::rem#15 ← divr16u::rem#0 -Coalesced down to 31 phi equivalence classes +Coalesced [107] mul16u::a#10 ← mul16u::a#6 +Coalesced [108] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [116] mul16u::res#9 ← mul16u::res#1 +Coalesced [120] mul16u::a#11 ← mul16u::a#0 +Coalesced [121] mul16u::res#7 ← mul16u::res#6 +Coalesced [122] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [123] mul16u::res#8 ← mul16u::res#2 +Coalesced [150] memset::dst#5 ← memset::dst#1 +Coalesced [170] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [175] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [176] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [177] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [178] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [179] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [180] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced [192] mul16s::a#10 ← mul16s::a#0 +Coalesced [201] sin16s_gen2::i#6 ← sin16s_gen2::i#1 +Coalesced [202] sin16s_gen2::x#6 ← sin16s_gen2::x#1 +Coalesced [203] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 +Coalesced [206] sin16s::x#9 ← sin16s::x#1 +Coalesced [210] sin16s::x#11 ← sin16s::x#2 +Coalesced [216] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [217] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [223] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [224] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [229] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [236] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [237] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [243] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [244] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [252] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [256] sin16s::x#10 ← sin16s::x#4 +Coalesced [257] sin16s::x#8 ← sin16s::x#0 +Coalesced [261] mul16u::b#4 ← mul16u::b#1 +Coalesced [262] mul16u::a#9 ← mul16u::a#2 +Coalesced [274] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [281] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [282] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [289] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [296] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [297] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [303] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [304] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [305] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [306] divr16u::i#7 ← divr16u::i#1 +Coalesced [307] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [308] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [309] divr16u::rem#15 ← divr16u::rem#0 +Coalesced down to 32 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @29 Culled Empty Block (label) @39 @@ -3022,9 +2973,9 @@ main::@8: scope:[main] from main::toD0181 to:main::@1 main::@1: scope:[main] from main::@5 main::@8 [15] (byte) main::r_add#10 ← phi( main::@8/(byte) $20 main::@5/(byte) main::r_add#12 ) - [15] (word) main::idx_y#3 ← phi( main::@8/(byte) $80 main::@5/(word) main::idx_y#10 ) - [15] (signed word) main::r#10 ← phi( main::@8/(signed byte) 0 main::@5/(signed word) main::r#1 ) - [15] (word) main::idx_x#11 ← phi( main::@8/(byte) 0 main::@5/(word) main::idx_x#10 ) + [15] (word) main::idx_y#3 ← phi( main::@8/(word) $80 main::@5/(word) main::idx_y#10 ) + [15] (signed word) main::r#10 ← phi( main::@8/(signed word) 0 main::@5/(signed word) main::r#1 ) + [15] (word) main::idx_x#11 ← phi( main::@8/(word) 0 main::@5/(word) main::idx_x#10 ) to:main::@2 main::@2: scope:[main] from main::@1 [16] (word~) main::$31 ← (word) main::idx_x#11 << (byte) 1 @@ -3142,326 +3093,327 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [81] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [81] (dword) mul16u::mb#0 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [81] (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) + [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [82] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [82] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [82] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [83] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [83] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [83] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [84] return + [85] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [86] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [87] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [88] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [89] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [90] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [89] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [90] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [91] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (void()) init_irq() init_irq: scope:[init_irq] from main::@8 asm { sei } - [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK - [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO - [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR - [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 - [96] *((const byte*) RASTER) ← (byte) 0 - [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER - [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() + [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK + [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO + [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR + [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 + [97] *((const byte*) RASTER) ← (byte) 0 + [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER + [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() asm { cli } to:init_irq::@return init_irq::@return: scope:[init_irq] from init_irq - [100] return + [101] return to:@return (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) bitmap_clear: scope:[bitmap_clear] from main::@10 - [101] phi() - [102] call memset + [102] phi() + [103] call memset to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [103] phi() - [104] call memset + [104] phi() + [105] call memset to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [105] return + [106] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from bitmap_clear bitmap_clear::@1 - [106] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) - [106] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) - [106] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) - [107] if((word) memset::num#2<=(byte) 0) goto memset::@return + [107] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) + [107] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) + [107] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) + [108] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [110] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [111] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [112] return + [113] return to:@return memset::@3: scope:[memset] from memset::@2 - [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [114] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [115] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 (void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen) bitmap_init: scope:[bitmap_init] from main::@9 - [115] phi() + [116] phi() to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [116] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) - [116] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) - [117] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 - [118] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 - [119] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 + [117] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) + [117] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) + [118] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 + [119] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 + [120] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 to:bitmap_init::@2 bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1 - [120] phi() + [121] phi() to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6 - [121] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) - [122] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 - [123] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 + [122] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) + [123] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 + [124] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [124] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) - [124] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) - [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 - [126] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 - [127] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 - [128] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 - [129] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 - [130] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 - [131] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 + [125] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) + [125] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) + [126] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 + [127] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 + [128] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 + [129] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 + [130] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 + [131] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 + [132] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3 - [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 + [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5 - [133] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) - [134] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 - [135] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 + [134] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) + [135] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 + [136] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [136] return + [137] return to:@return (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) sin16s_gen2: scope:[sin16s_gen2] from main - [137] phi() - [138] call div32u16u - [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + [138] phi() + [139] call div32u16u + [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 to:sin16s_gen2::@3 sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 - [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 - [141] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [141] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [141] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) - [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 + [142] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) SINUS sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) + [142] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [142] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [143] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 - [143] return + [144] return to:@return sin16s_gen2::@2: scope:[sin16s_gen2] from sin16s_gen2::@1 - [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 - [145] call sin16s - [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 + [146] call sin16s + [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen2::@4 sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@2 - [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - [148] call mul16s - [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + [149] call mul16s + [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 to:sin16s_gen2::@5 sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4 - [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 - [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 - [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD - [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 - [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 + [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 + [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 + [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD + [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 + [156] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 to:sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [158] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [158] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [159] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [159] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [161] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [166] call mulu16_sel - [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [162] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [167] call mulu16_sel + [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [171] call mulu16_sel - [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [172] call mulu16_sel + [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [175] call mulu16_sel - [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [176] call mulu16_sel + [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [181] call mulu16_sel - [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [182] call mulu16_sel + [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [186] call mulu16_sel - [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [187] call mulu16_sel + [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [191] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [192] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [193] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [194] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [194] return + [195] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [196] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [196] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [196] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [199] call mul16u - [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [197] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [197] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [197] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [200] call mul16u + [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [203] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [204] return + [205] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [205] phi() - [206] call divr16u - [207] (word) divr16u::return#2 ← (word) divr16u::return#0 + [206] phi() + [207] call divr16u + [208] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [209] (word) divr16u::rem#4 ← (word) rem16u#1 - [210] call divr16u - [211] (word) divr16u::return#3 ← (word) divr16u::return#0 + [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [210] (word) divr16u::rem#4 ← (word) rem16u#1 + [211] call divr16u + [212] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [212] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [213] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [213] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [214] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [214] return + [215] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [215] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [215] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [216] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [216] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [216] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [216] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [216] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [216] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [217] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [219] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [220] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [217] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [217] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [217] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [217] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [218] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [220] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [221] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [222] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [223] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [224] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 + [223] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [224] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [225] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [226] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 + [227] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [228] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [228] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [229] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [230] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [229] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [229] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [230] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [231] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [231] (word) rem16u#1 ← (word) divr16u::rem#11 + [232] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [232] return + [233] return to:@return interrupt(HARDWARE_CLOBBER)(void()) irq() irq: scope:[irq] from - [233] *((const byte*) BGCOL) ← (const byte) WHITE - [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 + [234] *((const byte*) BGCOL) ← (const byte) WHITE + [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 to:irq::@2 irq::@2: scope:[irq] from irq - [235] (byte) frame_cnt ← ++ (byte) frame_cnt + [236] (byte) frame_cnt ← ++ (byte) frame_cnt to:irq::@1 irq::@1: scope:[irq] from irq irq::@2 - [236] *((const byte*) BGCOL) ← (const byte) BLACK - [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER + [237] *((const byte*) BGCOL) ← (const byte) BLACK + [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER to:irq::@return irq::@return: scope:[irq] from irq::@1 - [238] return + [239] return to:@return @@ -3630,12 +3582,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (word) mul16u::a#1 2.0 (word) mul16u::a#2 2.0 (word) mul16u::a#3 67.66666666666666 -(word) mul16u::a#6 6.0 +(word) mul16u::a#6 3.0 (word) mul16u::b (word) mul16u::b#0 4.0 (word) mul16u::b#1 4.0 +(word) mul16u::b#2 4.0 (dword) mul16u::mb -(dword) mul16u::mb#0 6.0 +(dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 (dword) mul16u::mb#2 43.57142857142858 (dword) mul16u::res @@ -3725,8 +3678,6 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (dword) sin16s_gen2::x#1 11.0 (dword) sin16s_gen2::x#2 2.75 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#0 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 Initial phi equivalence classes [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] [ main::r#10 main::r#1 ] @@ -3735,8 +3686,7 @@ Initial phi equivalence classes [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -[ mul16u::b#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3837,8 +3787,7 @@ Complete equivalence classes [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -[ mul16u::b#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3938,100 +3887,99 @@ Allocated zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] Allocated zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] Allocated zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] Allocated zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -Allocated zp[2]:17 [ mul16u::b#0 ] -Allocated zp[2]:19 [ mul16u::b#1 ] -Allocated zp[2]:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated zp[4]:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -Allocated zp[4]:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -Allocated zp[2]:31 [ memset::num#2 ] -Allocated zp[2]:33 [ memset::str#3 ] -Allocated zp[1]:35 [ memset::c#4 ] -Allocated zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] -Allocated zp[1]:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] -Allocated zp[1]:39 [ bitmap_init::x#2 bitmap_init::x#1 ] -Allocated zp[1]:40 [ bitmap_init::y#2 bitmap_init::y#1 ] -Allocated zp[2]:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -Allocated zp[2]:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] -Allocated zp[4]:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated zp[2]:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] -Allocated zp[1]:51 [ sin16s::isUpper#2 ] -Allocated zp[4]:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] -Allocated zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] -Allocated zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] -Allocated zp[2]:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] -Allocated zp[1]:62 [ mulu16_sel::select#5 ] -Allocated zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp[2]:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] -Allocated zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp[1]:69 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp[1]:70 [ frame_cnt ] -Allocated zp[2]:71 [ main::$31 ] -Allocated zp[2]:73 [ main::$33 ] -Allocated zp[2]:75 [ main::cos_x#0 ] -Allocated zp[4]:77 [ mul16s::return#3 ] -Allocated zp[4]:81 [ main::xpos#0 ] -Allocated zp[2]:85 [ main::$7 ] -Allocated zp[2]:87 [ main::$8 ] -Allocated zp[2]:89 [ main::x#0 ] -Allocated zp[2]:91 [ main::$32 ] -Allocated zp[2]:93 [ main::$34 ] -Allocated zp[2]:95 [ main::sin_y#0 ] -Allocated zp[4]:97 [ mul16s::return#4 ] -Allocated zp[4]:101 [ main::ypos#0 ] -Allocated zp[2]:105 [ main::$13 ] -Allocated zp[2]:107 [ main::$14 ] -Allocated zp[2]:109 [ main::y#0 ] -Allocated zp[1]:111 [ bitmap_plot::y#0 ] -Allocated zp[2]:112 [ bitmap_plot::x#0 ] -Allocated zp[2]:114 [ bitmap_plot::plotter#0 ] -Allocated zp[2]:116 [ bitmap_plot::$1 ] -Allocated zp[2]:118 [ bitmap_plot::plotter#1 ] -Allocated zp[1]:120 [ bitmap_plot::$2 ] -Allocated zp[4]:121 [ mul16u::return#2 ] -Allocated zp[2]:125 [ mul16s::$9 ] -Allocated zp[2]:127 [ mul16s::$16 ] -Allocated zp[2]:129 [ mul16s::$13 ] -Allocated zp[2]:131 [ mul16s::$17 ] -Allocated zp[4]:133 [ mul16s::return#0 ] -Allocated zp[1]:137 [ mul16u::$1 ] -Allocated zp[2]:138 [ memset::end#0 ] -Allocated zp[1]:140 [ bitmap_init::$7 ] -Allocated zp[1]:141 [ bitmap_init::$4 ] -Allocated zp[1]:142 [ bitmap_init::$5 ] -Allocated zp[1]:143 [ bitmap_init::$6 ] -Allocated zp[4]:144 [ div32u16u::return#2 ] -Allocated zp[4]:148 [ sin16s_gen2::step#0 ] -Allocated zp[2]:152 [ sin16s::return#0 ] -Allocated zp[4]:154 [ mul16s::return#2 ] -Allocated zp[4]:158 [ sin16s_gen2::$6 ] -Allocated zp[2]:162 [ sin16s_gen2::$9 ] -Allocated zp[4]:164 [ sin16s::$4 ] -Allocated zp[2]:168 [ sin16s::x1#0 ] -Allocated zp[2]:170 [ mulu16_sel::return#0 ] -Allocated zp[2]:172 [ sin16s::x2#0 ] -Allocated zp[2]:174 [ mulu16_sel::return#1 ] -Allocated zp[2]:176 [ sin16s::x3#0 ] -Allocated zp[2]:178 [ mulu16_sel::return#2 ] -Allocated zp[2]:180 [ sin16s::x3_6#0 ] -Allocated zp[2]:182 [ sin16s::usinx#0 ] -Allocated zp[2]:184 [ mulu16_sel::return#10 ] -Allocated zp[2]:186 [ sin16s::x4#0 ] -Allocated zp[2]:188 [ mulu16_sel::return#11 ] -Allocated zp[2]:190 [ sin16s::x5#0 ] -Allocated zp[2]:192 [ sin16s::x5_128#0 ] -Allocated zp[2]:194 [ sin16s::usinx#1 ] -Allocated zp[4]:196 [ mul16u::return#3 ] -Allocated zp[4]:200 [ mulu16_sel::$0 ] -Allocated zp[4]:204 [ mulu16_sel::$1 ] -Allocated zp[2]:208 [ mulu16_sel::return#12 ] -Allocated zp[2]:210 [ divr16u::return#2 ] -Allocated zp[2]:212 [ div32u16u::quotient_hi#0 ] -Allocated zp[2]:214 [ divr16u::return#3 ] -Allocated zp[2]:216 [ div32u16u::quotient_lo#0 ] -Allocated zp[4]:218 [ div32u16u::return#0 ] -Allocated zp[1]:222 [ divr16u::$1 ] -Allocated zp[1]:223 [ divr16u::$2 ] -Allocated zp[2]:224 [ rem16u#1 ] +Allocated zp[2]:17 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] +Allocated zp[2]:19 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +Allocated zp[4]:21 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] +Allocated zp[4]:25 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated zp[2]:29 [ memset::num#2 ] +Allocated zp[2]:31 [ memset::str#3 ] +Allocated zp[1]:33 [ memset::c#4 ] +Allocated zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated zp[1]:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] +Allocated zp[1]:37 [ bitmap_init::x#2 bitmap_init::x#1 ] +Allocated zp[1]:38 [ bitmap_init::y#2 bitmap_init::y#1 ] +Allocated zp[2]:39 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] +Allocated zp[2]:41 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] +Allocated zp[4]:43 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated zp[2]:47 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated zp[1]:49 [ sin16s::isUpper#2 ] +Allocated zp[4]:50 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] +Allocated zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] +Allocated zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] +Allocated zp[2]:58 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +Allocated zp[1]:60 [ mulu16_sel::select#5 ] +Allocated zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp[2]:63 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +Allocated zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp[1]:67 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp[1]:68 [ frame_cnt ] +Allocated zp[2]:69 [ main::$31 ] +Allocated zp[2]:71 [ main::$33 ] +Allocated zp[2]:73 [ main::cos_x#0 ] +Allocated zp[4]:75 [ mul16s::return#3 ] +Allocated zp[4]:79 [ main::xpos#0 ] +Allocated zp[2]:83 [ main::$7 ] +Allocated zp[2]:85 [ main::$8 ] +Allocated zp[2]:87 [ main::x#0 ] +Allocated zp[2]:89 [ main::$32 ] +Allocated zp[2]:91 [ main::$34 ] +Allocated zp[2]:93 [ main::sin_y#0 ] +Allocated zp[4]:95 [ mul16s::return#4 ] +Allocated zp[4]:99 [ main::ypos#0 ] +Allocated zp[2]:103 [ main::$13 ] +Allocated zp[2]:105 [ main::$14 ] +Allocated zp[2]:107 [ main::y#0 ] +Allocated zp[1]:109 [ bitmap_plot::y#0 ] +Allocated zp[2]:110 [ bitmap_plot::x#0 ] +Allocated zp[2]:112 [ bitmap_plot::plotter#0 ] +Allocated zp[2]:114 [ bitmap_plot::$1 ] +Allocated zp[2]:116 [ bitmap_plot::plotter#1 ] +Allocated zp[1]:118 [ bitmap_plot::$2 ] +Allocated zp[4]:119 [ mul16u::return#2 ] +Allocated zp[2]:123 [ mul16s::$9 ] +Allocated zp[2]:125 [ mul16s::$16 ] +Allocated zp[2]:127 [ mul16s::$13 ] +Allocated zp[2]:129 [ mul16s::$17 ] +Allocated zp[4]:131 [ mul16s::return#0 ] +Allocated zp[1]:135 [ mul16u::$1 ] +Allocated zp[2]:136 [ memset::end#0 ] +Allocated zp[1]:138 [ bitmap_init::$7 ] +Allocated zp[1]:139 [ bitmap_init::$4 ] +Allocated zp[1]:140 [ bitmap_init::$5 ] +Allocated zp[1]:141 [ bitmap_init::$6 ] +Allocated zp[4]:142 [ div32u16u::return#2 ] +Allocated zp[4]:146 [ sin16s_gen2::step#0 ] +Allocated zp[2]:150 [ sin16s::return#0 ] +Allocated zp[4]:152 [ mul16s::return#2 ] +Allocated zp[4]:156 [ sin16s_gen2::$6 ] +Allocated zp[2]:160 [ sin16s_gen2::$9 ] +Allocated zp[4]:162 [ sin16s::$4 ] +Allocated zp[2]:166 [ sin16s::x1#0 ] +Allocated zp[2]:168 [ mulu16_sel::return#0 ] +Allocated zp[2]:170 [ sin16s::x2#0 ] +Allocated zp[2]:172 [ mulu16_sel::return#1 ] +Allocated zp[2]:174 [ sin16s::x3#0 ] +Allocated zp[2]:176 [ mulu16_sel::return#2 ] +Allocated zp[2]:178 [ sin16s::x3_6#0 ] +Allocated zp[2]:180 [ sin16s::usinx#0 ] +Allocated zp[2]:182 [ mulu16_sel::return#10 ] +Allocated zp[2]:184 [ sin16s::x4#0 ] +Allocated zp[2]:186 [ mulu16_sel::return#11 ] +Allocated zp[2]:188 [ sin16s::x5#0 ] +Allocated zp[2]:190 [ sin16s::x5_128#0 ] +Allocated zp[2]:192 [ sin16s::usinx#1 ] +Allocated zp[4]:194 [ mul16u::return#3 ] +Allocated zp[4]:198 [ mulu16_sel::$0 ] +Allocated zp[4]:202 [ mulu16_sel::$1 ] +Allocated zp[2]:206 [ mulu16_sel::return#12 ] +Allocated zp[2]:208 [ divr16u::return#2 ] +Allocated zp[2]:210 [ div32u16u::quotient_hi#0 ] +Allocated zp[2]:212 [ divr16u::return#3 ] +Allocated zp[2]:214 [ div32u16u::quotient_lo#0 ] +Allocated zp[4]:216 [ div32u16u::return#0 ] +Allocated zp[1]:220 [ divr16u::$1 ] +Allocated zp[1]:221 [ divr16u::$2 ] +Allocated zp[2]:222 [ rem16u#1 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -4084,9 +4032,9 @@ Target platform is c64basic / MOS6502X .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $46 + .label frame_cnt = $44 // Remainder after unsigned 16-bit division - .label rem16u = $e0 + .label rem16u = $de // @begin __bbegin: jmp __b1 @@ -4113,26 +4061,26 @@ __bend: // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __7 = $55 - .label __8 = $57 - .label __13 = $69 - .label __14 = $6b - .label __31 = $47 - .label __32 = $5b - .label cos_x = $4b - .label xpos = $51 - .label x = $59 - .label sin_y = $5f - .label ypos = $65 - .label y = $6d + .label __7 = $53 + .label __8 = $55 + .label __13 = $67 + .label __14 = $69 + .label __31 = $45 + .label __32 = $59 + .label cos_x = $49 + .label xpos = $4f + .label x = $57 + .label sin_y = $5d + .label ypos = $63 + .label y = $6b .label idx_x = 2 .label idx_y = 6 .label r = 4 .label r_add = 8 - .label __33 = $49 - .label __34 = $5d + .label __33 = $47 + .label __34 = $5b // [6] call sin16s_gen2 - // [137] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] + // [138] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] sin16s_gen2_from_main: jsr sin16s_gen2 // [7] phi from main to main::@9 [phi:main->main::@9] @@ -4141,7 +4089,7 @@ main: { // main::@9 __b9: // [8] call bitmap_init - // [115] phi from main::@9 to bitmap_init [phi:main::@9->bitmap_init] + // [116] phi from main::@9 to bitmap_init [phi:main::@9->bitmap_init] bitmap_init_from___b9: jsr bitmap_init // [9] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -4150,7 +4098,7 @@ main: { // main::@10 __b10: // [10] call bitmap_clear - // [101] phi from main::@10 to bitmap_clear [phi:main::@10->bitmap_clear] + // [102] phi from main::@10 to bitmap_clear [phi:main::@10->bitmap_clear] bitmap_clear_from___b10: jsr bitmap_clear jmp __b11 @@ -4177,17 +4125,17 @@ main: { // [15] phi (byte) main::r_add#10 = (byte) $20 [phi:main::@8->main::@1#0] -- vbuz1=vbuc1 lda #$20 sta.z r_add - // [15] phi (word) main::idx_y#3 = (byte) $80 [phi:main::@8->main::@1#1] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_y#3 = (word) $80 [phi:main::@8->main::@1#1] -- vwuz1=vwuc1 lda #<$80 sta.z idx_y lda #>$80 sta.z idx_y+1 - // [15] phi (signed word) main::r#10 = (signed byte) 0 [phi:main::@8->main::@1#2] -- vwsz1=vbsc1 + // [15] phi (signed word) main::r#10 = (signed word) 0 [phi:main::@8->main::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z r lda #>0 sta.z r+1 - // [15] phi (word) main::idx_x#11 = (byte) 0 [phi:main::@8->main::@1#3] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_x#11 = (word) 0 [phi:main::@8->main::@1#3] -- vwuz1=vwuc1 lda #<0 sta.z idx_x lda #>0 @@ -4513,14 +4461,14 @@ main: { } // bitmap_plot // Plot a single dot in the bitmap -// bitmap_plot(word zp($70) x, byte zp($6f) y) +// bitmap_plot(word zp($6e) x, byte zp($6d) y) bitmap_plot: { - .label __1 = $74 - .label __2 = $78 - .label plotter = $72 - .label plotter_1 = $76 - .label x = $70 - .label y = $6f + .label __1 = $72 + .label __2 = $76 + .label plotter = $70 + .label plotter_1 = $74 + .label x = $6e + .label y = $6d // [57] (word) bitmap_plot::plotter#0 ← *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#0) w= *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#0) -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 ldy.z y lda bitmap_plot_yhi,y @@ -4563,17 +4511,17 @@ bitmap_plot: { // Fixes offsets introduced by using unsigned multiplication // mul16s(signed word zp(9) a, signed word zp($b) b) mul16s: { - .label __9 = $7d - .label __13 = $81 - .label __16 = $7f - .label __17 = $83 + .label __9 = $7b + .label __13 = $7f + .label __16 = $7d + .label __17 = $81 .label m = $d - .label return = $85 + .label return = $83 .label a = 9 - .label return_1 = $9a + .label return_1 = $98 .label b = $b - .label return_2 = $4d - .label return_3 = $61 + .label return_2 = $4b + .label return_3 = $5f // [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a @@ -4588,14 +4536,7 @@ mul16s: { // [81] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [81] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [81] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [81] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -4697,31 +4638,40 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($15) a, word zp($11) b) +// mul16u(word zp($13) a, word zp($11) b) mul16u: { - .label __1 = $89 - .label mb = $1b - .label a = $15 - .label res = $17 + .label __1 = $87 + .label mb = $19 + .label a = $13 + .label res = $15 .label b = $11 - .label return = $79 - .label b_1 = $13 - .label return_1 = $c4 - // [82] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + .label return = $77 + .label return_1 = $c2 + // [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [83] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [82] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [82] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [83] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [83] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [82] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [83] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -4729,22 +4679,22 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [84] return + // [85] return rts // mul16u::@2 __b2: - // [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 + // [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [86] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 + // [87] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -4758,26 +4708,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [88] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [89] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [88] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [89] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [89] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [90] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [90] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [91] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [82] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [83] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [82] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [82] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [82] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [83] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [83] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [83] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // init_irq @@ -4785,30 +4735,30 @@ mul16u: { init_irq: { // asm { sei } sei - // [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 ora VIC_CONTROL sta VIC_CONTROL - // [96] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [97] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta RASTER - // [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 + // [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #memset] + // [103] call memset + // [107] phi from bitmap_clear to memset [phi:bitmap_clear->memset] memset_from_bitmap_clear: - // [106] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuz1=vbuc1 + // [107] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuz1=vbuc1 lda #col sta.z memset.c - // [106] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [107] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [106] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [107] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [103] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [104] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] __b1_from_bitmap_clear: jmp __b1 // bitmap_clear::@1 __b1: - // [104] call memset - // [106] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [105] call memset + // [107] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] memset_from___b1: - // [106] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuz1=vbuc1 + // [107] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuz1=vbuc1 lda #0 sta.z memset.c - // [106] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [107] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [106] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [107] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -4870,19 +4820,19 @@ bitmap_clear: { jmp __breturn // bitmap_clear::@return __breturn: - // [105] return + // [106] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($21) str, byte zp($23) c, word zp($1f) num) +// memset(void* zp($1f) str, byte zp($21) c, word zp($1d) num) memset: { - .label end = $8a - .label dst = $24 - .label num = $1f - .label str = $21 - .label c = $23 - // [107] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + .label end = $88 + .label dst = $22 + .label num = $1d + .label str = $1f + .label c = $21 + // [108] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -4891,7 +4841,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 + // [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z str clc adc.z num @@ -4899,19 +4849,19 @@ memset: { lda.z str+1 adc.z num+1 sta.z end+1 - // [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + // [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 lda.z str sta.z dst lda.z str+1 sta.z dst+1 - // [110] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [111] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [110] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [111] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -4921,15 +4871,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [112] return + // [113] return rts // memset::@3 __b3: - // [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + // [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 lda.z c ldy #0 sta (dst),y - // [114] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [115] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -4939,111 +4889,111 @@ memset: { // bitmap_init // Initialize bitmap plotting tables bitmap_init: { - .label __4 = $8d - .label __5 = $8e - .label __6 = $8f - .label __7 = $8c - .label bits = $26 - .label x = $27 - .label y = $28 - .label yoffs = $29 - // [116] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + .label __4 = $8b + .label __5 = $8c + .label __6 = $8d + .label __7 = $8a + .label bits = $24 + .label x = $25 + .label y = $26 + .label yoffs = $27 + // [117] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] __b1_from_bitmap_init: - // [116] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 + // [117] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [116] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 + // [117] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 lda #$80 sta.z bits jmp __b1 - // [116] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [117] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] __b1_from___b2: - // [116] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [116] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [117] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [117] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp __b1 // bitmap_init::@1 __b1: - // [117] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2 + // [118] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z bits ldy.z x sta bitmap_plot_bit,y - // [118] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [119] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z bits - // [119] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuz1_neq_0_then_la1 + // [120] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuz1_neq_0_then_la1 lda.z bits cmp #0 bne __b6_from___b1 - // [121] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [122] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] __b2_from___b1: - // [121] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 + // [122] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 lda #$80 sta.z bits jmp __b2 - // [120] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [121] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] __b6_from___b1: jmp __b6 // bitmap_init::@6 __b6: - // [121] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [122] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] __b2_from___b6: - // [121] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [122] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy jmp __b2 // bitmap_init::@2 __b2: - // [122] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuz1=_inc_vbuz1 + // [123] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [123] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuz1_neq_0_then_la1 + // [124] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuz1_neq_0_then_la1 lda.z x cmp #0 bne __b1_from___b2 - // [124] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [125] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] __b3_from___b2: - // [124] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [125] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [124] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 + // [125] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b3 - // [124] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [125] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] __b3_from___b4: - // [124] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [124] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [125] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [125] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp __b3 // bitmap_init::@3 __b3: - // [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [126] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z y sta.z __7 - // [126] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuz1=_lo_pbuz2 + // [127] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuz1=_lo_pbuz2 lda.z yoffs sta.z __4 - // [127] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuz1=vbuz2_bor_vbuz3 + // [128] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuz1=vbuz2_bor_vbuz3 lda.z __7 ora.z __4 sta.z __5 - // [128] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuz1=vbuz2 + // [129] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __5 ldy.z y sta bitmap_plot_ylo,y - // [129] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuz1=_hi_pbuz2 + // [130] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuz1=_hi_pbuz2 lda.z yoffs+1 sta.z __6 - // [130] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 + // [131] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __6 ldy.z y sta bitmap_plot_yhi,y - // [131] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [132] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4_from___b3 jmp __b5 // bitmap_init::@5 __b5: - // [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -5051,48 +5001,48 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [133] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [134] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] __b4_from___b3: __b4_from___b5: - // [133] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [134] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy jmp __b4 // bitmap_init::@4 __b4: - // [134] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuz1=_inc_vbuz1 + // [135] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [135] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuz1_neq_0_then_la1 + // [136] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuz1_neq_0_then_la1 lda.z y cmp #0 bne __b3_from___b4 jmp __breturn // bitmap_init::@return __breturn: - // [136] return + // [137] return rts } // sin16s_gen2 // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($31) sintab) +// sin16s_gen2(signed word* zp($2f) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = $9e - .label __9 = $a2 - .label step = $94 - .label sintab = $31 + .label __6 = $9c + .label __9 = $a0 + .label step = $92 + .label sintab = $2f // u[4.28] // Iterate over the table - .label x = $2d - .label i = $2b - // [138] call div32u16u - // [205] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + .label x = $2b + .label i = $29 + // [139] call div32u16u + // [206] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u - // [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 + // [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 lda.z div32u16u.return sta.z div32u16u.return_1 lda.z div32u16u.return+1 @@ -5104,7 +5054,7 @@ sin16s_gen2: { jmp __b3 // sin16s_gen2::@3 __b3: - // [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 + // [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 lda.z div32u16u.return_1 sta.z step lda.z div32u16u.return_1+1 @@ -5113,21 +5063,23 @@ sin16s_gen2: { sta.z step+2 lda.z div32u16u.return_1+3 sta.z step+3 - // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] + // [142] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] __b1_from___b3: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [142] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 lda #SINUS sta.z sintab+1 - // [141] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [142] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [141] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [142] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5136,7 +5088,7 @@ sin16s_gen2: { // u[4.28] // sin16s_gen2::@1 __b1: - // [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + // [143] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>wavelength bcc __b2 @@ -5148,11 +5100,11 @@ sin16s_gen2: { jmp __breturn // sin16s_gen2::@return __breturn: - // [143] return + // [144] return rts // sin16s_gen2::@2 __b2: - // [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 lda.z x sta.z sin16s.x lda.z x+1 @@ -5161,9 +5113,9 @@ sin16s_gen2: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [145] call sin16s + // [146] call sin16s jsr sin16s - // [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 + // [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 lda.z sin16s.return_1 sta.z sin16s.return lda.z sin16s.return_1+1 @@ -5171,12 +5123,12 @@ sin16s_gen2: { jmp __b4 // sin16s_gen2::@4 __b4: - // [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 + // [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 lda.z sin16s.return sta.z mul16s.a lda.z sin16s.return+1 sta.z mul16s.a+1 - // [148] call mul16s + // [149] call mul16s // [63] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from___b4: // [63] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -5186,7 +5138,7 @@ sin16s_gen2: { sta.z mul16s.b+1 // [63] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 + // [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 lda.z mul16s.return sta.z mul16s.return_1 lda.z mul16s.return+1 @@ -5198,7 +5150,7 @@ sin16s_gen2: { jmp __b5 // sin16s_gen2::@5 __b5: - // [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 + // [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 lda.z mul16s.return_1 sta.z __6 lda.z mul16s.return_1+1 @@ -5207,19 +5159,19 @@ sin16s_gen2: { sta.z __6+2 lda.z mul16s.return_1+3 sta.z __6+3 - // [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda.z __6+2 sta.z __9 lda.z __6+3 sta.z __9+1 - // [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __9 sta (sintab),y iny lda.z __9+1 sta (sintab),y - // [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab @@ -5227,7 +5179,7 @@ sin16s_gen2: { bcc !+ inc.z sintab+1 !: - // [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step @@ -5241,41 +5193,41 @@ sin16s_gen2: { lda.z x+3 adc.z step+3 sta.z x+3 - // [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [156] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [141] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] + // [142] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] __b1_from___b5: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [141] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [141] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy + // [142] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy + // [142] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy + // [142] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp($34) x) +// sin16s(dword zp($32) x) sin16s: { - .label __4 = $a4 - .label x = $34 - .label return = $98 - .label x1 = $a8 - .label x2 = $ac - .label x3 = $b0 - .label x3_6 = $b4 - .label usinx = $b6 - .label x4 = $ba - .label x5 = $be - .label x5_128 = $c0 - .label usinx_1 = $c2 - .label return_1 = $38 - .label sinx = $38 + .label __4 = $a2 + .label x = $32 + .label return = $96 + .label x1 = $a6 + .label x2 = $aa + .label x3 = $ae + .label x3_6 = $b2 + .label usinx = $b4 + .label x4 = $b8 + .label x5 = $bc + .label x5_128 = $be + .label usinx_1 = $c0 + .label return_1 = $36 + .label sinx = $36 // Move x1 into the range 0-PI/2 using sinus mirror symmetries - .label isUpper = $33 - // [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + .label isUpper = $31 + // [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -5295,7 +5247,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [158] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [159] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [158] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 + // [159] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [158] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [159] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [158] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [159] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [158] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 + // [159] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [158] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [159] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -5345,7 +5297,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [161] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [162] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [161] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [162] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -5387,31 +5339,31 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [166] call mulu16_sel - // [196] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [167] call mulu16_sel + // [197] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return lda.z mulu16_sel.return_5+1 @@ -5419,31 +5371,31 @@ sin16s: { jmp __b7 // sin16s::@7 __b7: - // [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 + // [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 lda.z x2 sta.z mulu16_sel.v1 lda.z x2+1 sta.z mulu16_sel.v1+1 - // [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [171] call mulu16_sel - // [196] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [172] call mulu16_sel + // [197] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_1 lda.z mulu16_sel.return_5+1 @@ -5451,30 +5403,30 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 + // [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x3 lda.z mulu16_sel.return_1+1 sta.z x3+1 - // [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [175] call mulu16_sel - // [196] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [176] call mulu16_sel + // [197] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [196] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [197] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_2 lda.z mulu16_sel.return_5+1 @@ -5482,12 +5434,12 @@ sin16s: { jmp __b9 // sin16s::@9 __b9: - // [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 + // [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 lda.z mulu16_sel.return_2 sta.z x3_6 lda.z mulu16_sel.return_2+1 sta.z x3_6+1 - // [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -5495,26 +5447,26 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [181] call mulu16_sel - // [196] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [182] call mulu16_sel + // [197] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_3 lda.z mulu16_sel.return_5+1 @@ -5522,31 +5474,31 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 + // [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 lda.z mulu16_sel.return_3 sta.z x4 lda.z mulu16_sel.return_3+1 sta.z x4+1 - // [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 + // [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 lda.z x4 sta.z mulu16_sel.v1 lda.z x4+1 sta.z mulu16_sel.v1+1 - // [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [186] call mulu16_sel - // [196] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [187] call mulu16_sel + // [197] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_4 lda.z mulu16_sel.return_5+1 @@ -5554,12 +5506,12 @@ sin16s: { jmp __b11 // sin16s::@11 __b11: - // [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 + // [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 lda.z mulu16_sel.return_4 sta.z x5 lda.z mulu16_sel.return_4+1 sta.z x5+1 - // [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 + // [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 lda.z x5+1 lsr sta.z x5_128+1 @@ -5572,7 +5524,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 + // [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z usinx clc adc.z x5_128 @@ -5580,14 +5532,14 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx_1+1 - // [191] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 + // [192] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 + // [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z usinx_1 @@ -5595,21 +5547,21 @@ sin16s: { lda #0 sbc.z usinx_1+1 sta.z sinx+1 - // [193] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [194] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [193] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [194] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [194] return + // [195] return rts // sin16s::@12 __b12: - // [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 + // [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 lda.z usinx_1 sta.z return_1 lda.z usinx_1+1 @@ -5619,43 +5571,36 @@ sin16s: { // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($3a) v1, word zp($3c) v2, byte zp($3e) select) +// mulu16_sel(word zp($38) v1, word zp($3a) v2, byte zp($3c) select) mulu16_sel: { - .label __0 = $c8 - .label __1 = $cc - .label v1 = $3a - .label v2 = $3c - .label return = $aa - .label return_1 = $ae - .label return_2 = $b2 - .label return_3 = $b8 - .label return_4 = $bc - .label select = $3e - .label return_5 = $d0 - // [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + .label __0 = $c6 + .label __1 = $ca + .label v1 = $38 + .label v2 = $3a + .label return = $a8 + .label return_1 = $ac + .label return_2 = $b0 + .label return_3 = $b6 + .label return_4 = $ba + .label select = $3c + .label return_5 = $ce + // [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 + // [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 lda.z v2 - sta.z mul16u.b_1 + sta.z mul16u.b lda.z v2+1 - sta.z mul16u.b_1+1 - // [199] call mul16u + sta.z mul16u.b+1 + // [200] call mul16u // [81] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [81] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [81] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [81] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 + // [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res sta.z mul16u.return_1 lda.z mul16u.res+1 @@ -5667,7 +5612,7 @@ mulu16_sel: { jmp __b1 // mulu16_sel::@1 __b1: - // [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 + // [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 lda.z mul16u.return_1 sta.z __0 lda.z mul16u.return_1+1 @@ -5676,7 +5621,7 @@ mulu16_sel: { sta.z __0+2 lda.z mul16u.return_1+3 sta.z __0+3 - // [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 + // [203] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 lda.z __0 sta.z __1 lda.z __0+1 @@ -5695,7 +5640,7 @@ mulu16_sel: { dex bne !- !e: - // [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_5 lda.z __1+3 @@ -5703,32 +5648,32 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [204] return + // [205] return rts } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $d4 - .label quotient_lo = $d8 - .label return = $da - .label return_1 = $90 - // [206] call divr16u - // [215] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + .label quotient_hi = $d2 + .label quotient_lo = $d6 + .label return = $d8 + .label return_1 = $8e + // [207] call divr16u + // [216] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [215] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [216] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [215] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [216] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [207] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [208] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_1 lda.z divr16u.return+1 @@ -5736,27 +5681,27 @@ div32u16u: { jmp __b1 // div32u16u::@1 __b1: - // [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return_1 sta.z quotient_hi lda.z divr16u.return_1+1 sta.z quotient_hi+1 - // [209] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 + // [210] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 lda.z rem16u sta.z divr16u.rem lda.z rem16u+1 sta.z divr16u.rem+1 - // [210] call divr16u - // [215] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [211] call divr16u + // [216] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [215] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [216] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [215] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [216] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [211] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [212] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_2 lda.z divr16u.return+1 @@ -5764,12 +5709,12 @@ div32u16u: { jmp __b2 // div32u16u::@2 __b2: - // [212] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 + // [213] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 lda.z divr16u.return_2 sta.z quotient_lo lda.z divr16u.return_2+1 sta.z quotient_lo+1 - // [213] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [214] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -5781,7 +5726,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [214] return + // [215] return rts } // divr16u @@ -5789,74 +5734,74 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($41) dividend, word zp($3f) rem) +// divr16u(word zp($3f) dividend, word zp($3d) rem) divr16u: { - .label __1 = $de - .label __2 = $df - .label rem = $3f - .label dividend = $41 - .label quotient = $43 - .label i = $45 - .label return = $43 - .label return_1 = $d2 - .label return_2 = $d6 - // [216] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label __1 = $dc + .label __2 = $dd + .label rem = $3d + .label dividend = $3f + .label quotient = $41 + .label i = $43 + .label return = $41 + .label return_1 = $d0 + .label return_2 = $d4 + // [217] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [216] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + // [217] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [216] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [217] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [216] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [216] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [217] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [217] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [216] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [217] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [216] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [216] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [216] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [216] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [217] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [217] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [217] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [217] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [217] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [218] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 + // [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 lda.z dividend+1 sta.z __1 - // [219] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [220] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z __1 sta.z __2 - // [220] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 + // [221] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda.z __2 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [222] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [223] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [222] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [223] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [223] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [224] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [224] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [225] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>sin16s_gen2.wavelength bcc __b3_from___b2 @@ -5868,12 +5813,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [226] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [227] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 + // [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #sin16s_gen2.wavelength sta.z rem+1 - // [228] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [229] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [228] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [228] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [229] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [229] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [229] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 + // [230] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [230] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 + // [231] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [231] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 + // [232] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 lda.z rem sta.z rem16u lda.z rem+1 @@ -5906,7 +5851,7 @@ divr16u: { jmp __breturn // divr16u::@return __breturn: - // [232] return + // [233] return rts } // irq @@ -5916,32 +5861,32 @@ irq: { sta rega+1 stx regx+1 sty regy+1 - // [233] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 + // [234] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BGCOL - // [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 + // [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z frame_cnt beq __b1 jmp __b2 // irq::@2 __b2: - // [235] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 + // [236] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 inc.z frame_cnt jmp __b1 // irq::@1 __b1: - // [236] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + // [237] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL - // [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irq::@return __breturn: - // [238] return - exit interrupt(HARDWARE_CLOBBER) + // [239] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -5960,7 +5905,7 @@ irq: { SINUS: .fill 2*$200, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Equivalence Class zp[1]:141 [ bitmap_init::$4 ] has ALU potential. +Equivalence Class zp[1]:139 [ bitmap_init::$4 ] has ALU potential. Statement [1] (byte) frame_cnt ← (byte) 1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [11] *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a Statement [13] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a @@ -5988,7 +5933,7 @@ Statement [36] (signed word~) main::$14 ← (signed word)(word~) main::$13 >> (s Statement [37] (signed word) main::y#0 ← (signed byte) $64 + (signed word~) main::$14 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::y#0 ] ( main:3 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 main::y#0 ] ) always clobbers reg byte a Statement [38] (byte) bitmap_plot::y#0 ← (byte)(word)(signed word) main::y#0 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 bitmap_plot::y#0 ] ( main:3 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 bitmap_plot::y#0 ] ) always clobbers reg byte a Statement [39] (word) bitmap_plot::x#0 ← (word)(signed word) main::x#0 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::y#0 bitmap_plot::x#0 ] ( main:3 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::y#0 bitmap_plot::x#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:111 [ bitmap_plot::y#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:109 [ bitmap_plot::y#0 ] Statement [41] *((const byte*) plots_per_frame + (byte) frame_cnt) ← ++ *((const byte*) plots_per_frame + (byte) frame_cnt) [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 ] ( main:3 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 ] ) always clobbers reg byte x Removing always clobbered register reg byte x as potential for zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] Statement [42] (word) main::idx_x#1 ← (word) main::idx_x#11 + (byte) main::r_add#10 [ frame_cnt main::r#10 main::idx_y#3 main::r_add#10 main::idx_x#1 ] ( main:3 [ frame_cnt main::r#10 main::idx_y#3 main::r_add#10 main::idx_x#1 ] ) always clobbers reg byte a @@ -6004,105 +5949,106 @@ Statement [58] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff Statement [59] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:40 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a Statement [60] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::bitmap_plot:40 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a Statement [61] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte*) bitmap_plot_bit + (byte~) bitmap_plot::$2) [ ] ( main:3::bitmap_plot:40 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 ] ) always clobbers reg byte a reg byte y -Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a -Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:51 [ sin16s::isUpper#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:62 [ mulu16_sel::select#5 ] -Statement [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [96] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [107] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:35 [ memset::c#4 ] -Statement [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:35 [ memset::c#4 ] -Statement [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:40 [ bitmap_init::y#2 bitmap_init::y#1 ] -Statement [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a -Statement [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [207] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [209] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [211] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [212] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [213] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a -Statement [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:69 [ divr16u::i#2 divr16u::i#1 ] -Statement [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [231] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [233] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a -Statement [236] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a -Statement [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [238] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a +Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a +Statement [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:49 [ sin16s::isUpper#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:60 [ mulu16_sel::select#5 ] +Statement [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [97] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [108] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:33 [ memset::c#4 ] +Statement [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:33 [ memset::c#4 ] +Statement [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:38 [ bitmap_init::y#2 bitmap_init::y#1 ] +Statement [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a +Statement [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a +Statement [143] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a +Statement [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a +Statement [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y +Statement [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [203] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [208] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [210] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [212] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [213] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [214] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a +Statement [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:67 [ divr16u::i#2 divr16u::i#1 ] +Statement [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [232] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [234] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a +Statement [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [237] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a +Statement [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [239] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y Statement [1] (byte) frame_cnt ← (byte) 1 [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a Statement [11] *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a Statement [13] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ frame_cnt ] ( main:3 [ frame_cnt ] ) always clobbers reg byte a @@ -6142,100 +6088,101 @@ Statement [58] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word) $fff Statement [59] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:3::bitmap_plot:40 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a Statement [60] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::bitmap_plot:40 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a Statement [61] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte*) bitmap_plot_bit + (byte~) bitmap_plot::$2) [ ] ( main:3::bitmap_plot:40 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 ] ) always clobbers reg byte a reg byte y -Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a -Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a -Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a -Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a -Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a -Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a -Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a -Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a -Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a -Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a -Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a -Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:148 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:148::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186::mul16u:199 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [96] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a -Statement [107] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Statement [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:102 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:104 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a -Statement [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a -Statement [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a -Statement [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a -Statement [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a -Statement [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a -Statement [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a -Statement [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a -Statement [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a -Statement [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y -Statement [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a -Statement [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:145 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:166 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:171 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:175 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:181 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:145::mulu16_sel:186 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [207] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [209] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [211] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [212] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [213] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:138 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a -Statement [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [231] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:138::divr16u:206 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:138::divr16u:210 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [233] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a -Statement [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a -Statement [236] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a -Statement [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a -Statement [238] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y +Statement [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 ] ) always clobbers reg byte a +Statement [65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a +Statement [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::return#2 ] ) always clobbers reg byte a +Statement [68] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [69] if((signed word) mul16s::a#3>=(signed byte) 0) goto mul16s::@1 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 ] ) always clobbers reg byte a +Statement [70] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a +Statement [71] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(signed word) mul16s::b#3 [ mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a +Statement [72] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16s::m#1 ] ) always clobbers reg byte a +Statement [74] if((signed word) mul16s::b#3>=(signed byte) 0) goto mul16s::@2 [ mul16s::a#3 mul16s::m#5 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 ] ) always clobbers reg byte a +Statement [75] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#3 mul16s::m#5 mul16s::$13 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::m#5 mul16s::$13 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::m#5 mul16s::$13 ] ) always clobbers reg byte a +Statement [76] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#3 [ mul16s::m#5 mul16s::$17 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#5 mul16s::$17 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#5 mul16s::$17 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a +Statement [77] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::m#2 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::m#2 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#2 ] ) always clobbers reg byte a +Statement [79] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::mul16s:21 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::return#0 ] main:3::mul16s:32 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::return#0 ] main:3::sin16s_gen2:6::mul16s:149 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a +Statement [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::mul16s:21::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::mul16s:32::mul16u:66 [ frame_cnt main::idx_x#11 main::r#10 main::idx_y#3 main::r_add#10 main::x#0 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::mul16s:149::mul16u:66 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#3 mul16s::b#3 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187::mul16u:200 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [97] *((const byte*) RASTER) ← (byte) 0 [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() [ ] ( main:3::init_irq:14 [ frame_cnt ] ) always clobbers reg byte a +Statement [108] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Statement [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::bitmap_clear:10::memset:103 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] main:3::bitmap_clear:10::memset:105 [ frame_cnt memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [126] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a +Statement [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:8 [ frame_cnt bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt div32u16u::return#2 ] ) always clobbers reg byte a +Statement [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 ] ) always clobbers reg byte a +Statement [143] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a +Statement [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt mul16s::a#0 sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a +Statement [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a +Statement [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a +Statement [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a +Statement [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y +Statement [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:6 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a +Statement [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:6::sin16s:146 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [203] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:167 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:172 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:176 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:182 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:6::sin16s:146::mulu16_sel:187 [ frame_cnt sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [208] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [210] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [212] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [213] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [214] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:6::div32u16u:139 [ frame_cnt div32u16u::return#0 ] ) always clobbers reg byte a +Statement [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [232] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:6::div32u16u:139::divr16u:207 [ frame_cnt divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:6::div32u16u:139::divr16u:211 [ frame_cnt div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [234] *((const byte*) BGCOL) ← (const byte) WHITE [ frame_cnt ] ( [ frame_cnt ] ) always clobbers reg byte a +Statement [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a +Statement [237] *((const byte*) BGCOL) ← (const byte) BLACK [ ] ( [ ] ) always clobbers reg byte a +Statement [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER [ ] ( [ ] ) always clobbers reg byte a +Statement [239] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y Potential registers zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::r#10 main::r#1 ] : zp[2]:4 , Potential registers zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] : zp[2]:6 , @@ -6243,237 +6190,235 @@ Potential registers zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] : zp Potential registers zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] : zp[2]:9 , Potential registers zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] : zp[2]:11 , Potential registers zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] : zp[4]:13 , -Potential registers zp[2]:17 [ mul16u::b#0 ] : zp[2]:17 , -Potential registers zp[2]:19 [ mul16u::b#1 ] : zp[2]:19 , -Potential registers zp[2]:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:21 , -Potential registers zp[4]:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:23 , -Potential registers zp[4]:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:27 , -Potential registers zp[2]:31 [ memset::num#2 ] : zp[2]:31 , -Potential registers zp[2]:33 [ memset::str#3 ] : zp[2]:33 , -Potential registers zp[1]:35 [ memset::c#4 ] : zp[1]:35 , reg byte x , -Potential registers zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:36 , -Potential registers zp[1]:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:40 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:40 , reg byte x , reg byte y , -Potential registers zp[2]:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:41 , -Potential registers zp[2]:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:43 , -Potential registers zp[4]:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:45 , -Potential registers zp[2]:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:49 , -Potential registers zp[1]:51 [ sin16s::isUpper#2 ] : zp[1]:51 , reg byte x , reg byte y , -Potential registers zp[4]:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:52 , -Potential registers zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:56 , -Potential registers zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] : zp[2]:58 , -Potential registers zp[2]:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp[2]:60 , -Potential registers zp[1]:62 [ mulu16_sel::select#5 ] : zp[1]:62 , reg byte x , reg byte y , -Potential registers zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:63 , -Potential registers zp[2]:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:65 , -Potential registers zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:67 , -Potential registers zp[1]:69 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:69 , reg byte x , reg byte y , -Potential registers zp[1]:70 [ frame_cnt ] : zp[1]:70 , -Potential registers zp[2]:71 [ main::$31 ] : zp[2]:71 , -Potential registers zp[2]:73 [ main::$33 ] : zp[2]:73 , -Potential registers zp[2]:75 [ main::cos_x#0 ] : zp[2]:75 , -Potential registers zp[4]:77 [ mul16s::return#3 ] : zp[4]:77 , -Potential registers zp[4]:81 [ main::xpos#0 ] : zp[4]:81 , -Potential registers zp[2]:85 [ main::$7 ] : zp[2]:85 , -Potential registers zp[2]:87 [ main::$8 ] : zp[2]:87 , -Potential registers zp[2]:89 [ main::x#0 ] : zp[2]:89 , -Potential registers zp[2]:91 [ main::$32 ] : zp[2]:91 , -Potential registers zp[2]:93 [ main::$34 ] : zp[2]:93 , -Potential registers zp[2]:95 [ main::sin_y#0 ] : zp[2]:95 , -Potential registers zp[4]:97 [ mul16s::return#4 ] : zp[4]:97 , -Potential registers zp[4]:101 [ main::ypos#0 ] : zp[4]:101 , -Potential registers zp[2]:105 [ main::$13 ] : zp[2]:105 , -Potential registers zp[2]:107 [ main::$14 ] : zp[2]:107 , -Potential registers zp[2]:109 [ main::y#0 ] : zp[2]:109 , -Potential registers zp[1]:111 [ bitmap_plot::y#0 ] : zp[1]:111 , reg byte x , reg byte y , -Potential registers zp[2]:112 [ bitmap_plot::x#0 ] : zp[2]:112 , -Potential registers zp[2]:114 [ bitmap_plot::plotter#0 ] : zp[2]:114 , -Potential registers zp[2]:116 [ bitmap_plot::$1 ] : zp[2]:116 , -Potential registers zp[2]:118 [ bitmap_plot::plotter#1 ] : zp[2]:118 , -Potential registers zp[1]:120 [ bitmap_plot::$2 ] : zp[1]:120 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:121 [ mul16u::return#2 ] : zp[4]:121 , -Potential registers zp[2]:125 [ mul16s::$9 ] : zp[2]:125 , -Potential registers zp[2]:127 [ mul16s::$16 ] : zp[2]:127 , -Potential registers zp[2]:129 [ mul16s::$13 ] : zp[2]:129 , -Potential registers zp[2]:131 [ mul16s::$17 ] : zp[2]:131 , -Potential registers zp[4]:133 [ mul16s::return#0 ] : zp[4]:133 , -Potential registers zp[1]:137 [ mul16u::$1 ] : zp[1]:137 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:138 [ memset::end#0 ] : zp[2]:138 , -Potential registers zp[1]:140 [ bitmap_init::$7 ] : zp[1]:140 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:141 [ bitmap_init::$4 ] : zp[1]:141 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp[1]:142 [ bitmap_init::$5 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:143 [ bitmap_init::$6 ] : zp[1]:143 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:144 [ div32u16u::return#2 ] : zp[4]:144 , -Potential registers zp[4]:148 [ sin16s_gen2::step#0 ] : zp[4]:148 , -Potential registers zp[2]:152 [ sin16s::return#0 ] : zp[2]:152 , -Potential registers zp[4]:154 [ mul16s::return#2 ] : zp[4]:154 , -Potential registers zp[4]:158 [ sin16s_gen2::$6 ] : zp[4]:158 , -Potential registers zp[2]:162 [ sin16s_gen2::$9 ] : zp[2]:162 , -Potential registers zp[4]:164 [ sin16s::$4 ] : zp[4]:164 , -Potential registers zp[2]:168 [ sin16s::x1#0 ] : zp[2]:168 , -Potential registers zp[2]:170 [ mulu16_sel::return#0 ] : zp[2]:170 , -Potential registers zp[2]:172 [ sin16s::x2#0 ] : zp[2]:172 , -Potential registers zp[2]:174 [ mulu16_sel::return#1 ] : zp[2]:174 , -Potential registers zp[2]:176 [ sin16s::x3#0 ] : zp[2]:176 , -Potential registers zp[2]:178 [ mulu16_sel::return#2 ] : zp[2]:178 , -Potential registers zp[2]:180 [ sin16s::x3_6#0 ] : zp[2]:180 , -Potential registers zp[2]:182 [ sin16s::usinx#0 ] : zp[2]:182 , -Potential registers zp[2]:184 [ mulu16_sel::return#10 ] : zp[2]:184 , -Potential registers zp[2]:186 [ sin16s::x4#0 ] : zp[2]:186 , -Potential registers zp[2]:188 [ mulu16_sel::return#11 ] : zp[2]:188 , -Potential registers zp[2]:190 [ sin16s::x5#0 ] : zp[2]:190 , -Potential registers zp[2]:192 [ sin16s::x5_128#0 ] : zp[2]:192 , -Potential registers zp[2]:194 [ sin16s::usinx#1 ] : zp[2]:194 , -Potential registers zp[4]:196 [ mul16u::return#3 ] : zp[4]:196 , -Potential registers zp[4]:200 [ mulu16_sel::$0 ] : zp[4]:200 , -Potential registers zp[4]:204 [ mulu16_sel::$1 ] : zp[4]:204 , -Potential registers zp[2]:208 [ mulu16_sel::return#12 ] : zp[2]:208 , -Potential registers zp[2]:210 [ divr16u::return#2 ] : zp[2]:210 , -Potential registers zp[2]:212 [ div32u16u::quotient_hi#0 ] : zp[2]:212 , -Potential registers zp[2]:214 [ divr16u::return#3 ] : zp[2]:214 , -Potential registers zp[2]:216 [ div32u16u::quotient_lo#0 ] : zp[2]:216 , -Potential registers zp[4]:218 [ div32u16u::return#0 ] : zp[4]:218 , -Potential registers zp[1]:222 [ divr16u::$1 ] : zp[1]:222 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:223 [ divr16u::$2 ] : zp[1]:223 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:224 [ rem16u#1 ] : zp[2]:224 , +Potential registers zp[2]:17 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] : zp[2]:17 , +Potential registers zp[2]:19 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:19 , +Potential registers zp[4]:21 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:21 , +Potential registers zp[4]:25 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:25 , +Potential registers zp[2]:29 [ memset::num#2 ] : zp[2]:29 , +Potential registers zp[2]:31 [ memset::str#3 ] : zp[2]:31 , +Potential registers zp[1]:33 [ memset::c#4 ] : zp[1]:33 , reg byte x , +Potential registers zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:34 , +Potential registers zp[1]:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:37 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp[1]:38 , reg byte x , reg byte y , +Potential registers zp[2]:39 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp[2]:39 , +Potential registers zp[2]:41 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:41 , +Potential registers zp[4]:43 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:43 , +Potential registers zp[2]:47 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:47 , +Potential registers zp[1]:49 [ sin16s::isUpper#2 ] : zp[1]:49 , reg byte x , reg byte y , +Potential registers zp[4]:50 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:50 , +Potential registers zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:54 , +Potential registers zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] : zp[2]:56 , +Potential registers zp[2]:58 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp[2]:58 , +Potential registers zp[1]:60 [ mulu16_sel::select#5 ] : zp[1]:60 , reg byte x , reg byte y , +Potential registers zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:61 , +Potential registers zp[2]:63 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:63 , +Potential registers zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:65 , +Potential registers zp[1]:67 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:67 , reg byte x , reg byte y , +Potential registers zp[1]:68 [ frame_cnt ] : zp[1]:68 , +Potential registers zp[2]:69 [ main::$31 ] : zp[2]:69 , +Potential registers zp[2]:71 [ main::$33 ] : zp[2]:71 , +Potential registers zp[2]:73 [ main::cos_x#0 ] : zp[2]:73 , +Potential registers zp[4]:75 [ mul16s::return#3 ] : zp[4]:75 , +Potential registers zp[4]:79 [ main::xpos#0 ] : zp[4]:79 , +Potential registers zp[2]:83 [ main::$7 ] : zp[2]:83 , +Potential registers zp[2]:85 [ main::$8 ] : zp[2]:85 , +Potential registers zp[2]:87 [ main::x#0 ] : zp[2]:87 , +Potential registers zp[2]:89 [ main::$32 ] : zp[2]:89 , +Potential registers zp[2]:91 [ main::$34 ] : zp[2]:91 , +Potential registers zp[2]:93 [ main::sin_y#0 ] : zp[2]:93 , +Potential registers zp[4]:95 [ mul16s::return#4 ] : zp[4]:95 , +Potential registers zp[4]:99 [ main::ypos#0 ] : zp[4]:99 , +Potential registers zp[2]:103 [ main::$13 ] : zp[2]:103 , +Potential registers zp[2]:105 [ main::$14 ] : zp[2]:105 , +Potential registers zp[2]:107 [ main::y#0 ] : zp[2]:107 , +Potential registers zp[1]:109 [ bitmap_plot::y#0 ] : zp[1]:109 , reg byte x , reg byte y , +Potential registers zp[2]:110 [ bitmap_plot::x#0 ] : zp[2]:110 , +Potential registers zp[2]:112 [ bitmap_plot::plotter#0 ] : zp[2]:112 , +Potential registers zp[2]:114 [ bitmap_plot::$1 ] : zp[2]:114 , +Potential registers zp[2]:116 [ bitmap_plot::plotter#1 ] : zp[2]:116 , +Potential registers zp[1]:118 [ bitmap_plot::$2 ] : zp[1]:118 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:119 [ mul16u::return#2 ] : zp[4]:119 , +Potential registers zp[2]:123 [ mul16s::$9 ] : zp[2]:123 , +Potential registers zp[2]:125 [ mul16s::$16 ] : zp[2]:125 , +Potential registers zp[2]:127 [ mul16s::$13 ] : zp[2]:127 , +Potential registers zp[2]:129 [ mul16s::$17 ] : zp[2]:129 , +Potential registers zp[4]:131 [ mul16s::return#0 ] : zp[4]:131 , +Potential registers zp[1]:135 [ mul16u::$1 ] : zp[1]:135 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:136 [ memset::end#0 ] : zp[2]:136 , +Potential registers zp[1]:138 [ bitmap_init::$7 ] : zp[1]:138 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:139 [ bitmap_init::$4 ] : zp[1]:139 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp[1]:140 [ bitmap_init::$5 ] : zp[1]:140 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:141 [ bitmap_init::$6 ] : zp[1]:141 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:142 [ div32u16u::return#2 ] : zp[4]:142 , +Potential registers zp[4]:146 [ sin16s_gen2::step#0 ] : zp[4]:146 , +Potential registers zp[2]:150 [ sin16s::return#0 ] : zp[2]:150 , +Potential registers zp[4]:152 [ mul16s::return#2 ] : zp[4]:152 , +Potential registers zp[4]:156 [ sin16s_gen2::$6 ] : zp[4]:156 , +Potential registers zp[2]:160 [ sin16s_gen2::$9 ] : zp[2]:160 , +Potential registers zp[4]:162 [ sin16s::$4 ] : zp[4]:162 , +Potential registers zp[2]:166 [ sin16s::x1#0 ] : zp[2]:166 , +Potential registers zp[2]:168 [ mulu16_sel::return#0 ] : zp[2]:168 , +Potential registers zp[2]:170 [ sin16s::x2#0 ] : zp[2]:170 , +Potential registers zp[2]:172 [ mulu16_sel::return#1 ] : zp[2]:172 , +Potential registers zp[2]:174 [ sin16s::x3#0 ] : zp[2]:174 , +Potential registers zp[2]:176 [ mulu16_sel::return#2 ] : zp[2]:176 , +Potential registers zp[2]:178 [ sin16s::x3_6#0 ] : zp[2]:178 , +Potential registers zp[2]:180 [ sin16s::usinx#0 ] : zp[2]:180 , +Potential registers zp[2]:182 [ mulu16_sel::return#10 ] : zp[2]:182 , +Potential registers zp[2]:184 [ sin16s::x4#0 ] : zp[2]:184 , +Potential registers zp[2]:186 [ mulu16_sel::return#11 ] : zp[2]:186 , +Potential registers zp[2]:188 [ sin16s::x5#0 ] : zp[2]:188 , +Potential registers zp[2]:190 [ sin16s::x5_128#0 ] : zp[2]:190 , +Potential registers zp[2]:192 [ sin16s::usinx#1 ] : zp[2]:192 , +Potential registers zp[4]:194 [ mul16u::return#3 ] : zp[4]:194 , +Potential registers zp[4]:198 [ mulu16_sel::$0 ] : zp[4]:198 , +Potential registers zp[4]:202 [ mulu16_sel::$1 ] : zp[4]:202 , +Potential registers zp[2]:206 [ mulu16_sel::return#12 ] : zp[2]:206 , +Potential registers zp[2]:208 [ divr16u::return#2 ] : zp[2]:208 , +Potential registers zp[2]:210 [ div32u16u::quotient_hi#0 ] : zp[2]:210 , +Potential registers zp[2]:212 [ divr16u::return#3 ] : zp[2]:212 , +Potential registers zp[2]:214 [ div32u16u::quotient_lo#0 ] : zp[2]:214 , +Potential registers zp[4]:216 [ div32u16u::return#0 ] : zp[4]:216 , +Potential registers zp[1]:220 [ divr16u::$1 ] : zp[1]:220 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:221 [ divr16u::$2 ] : zp[1]:221 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:222 [ rem16u#1 ] : zp[2]:222 , REGISTER UPLIFT SCOPES -Uplift Scope [mul16u] 346.86: zp[4]:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 251.57: zp[4]:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:137 [ mul16u::$1 ] 178.67: zp[2]:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp[2]:17 [ mul16u::b#0 ] 4: zp[2]:19 [ mul16u::b#1 ] 4: zp[4]:121 [ mul16u::return#2 ] 4: zp[4]:196 [ mul16u::return#3 ] -Uplift Scope [main] 40.53: zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] 22: zp[2]:71 [ main::$31 ] 22: zp[2]:73 [ main::$33 ] 22: zp[4]:81 [ main::xpos#0 ] 22: zp[2]:87 [ main::$8 ] 22: zp[2]:91 [ main::$32 ] 22: zp[2]:93 [ main::$34 ] 22: zp[4]:101 [ main::ypos#0 ] 22: zp[2]:107 [ main::$14 ] 15.22: zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] 15.21: zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 11: zp[2]:75 [ main::cos_x#0 ] 11: zp[2]:85 [ main::$7 ] 11: zp[2]:95 [ main::sin_y#0 ] 11: zp[2]:105 [ main::$13 ] 11: zp[2]:109 [ main::y#0 ] 6.76: zp[2]:4 [ main::r#10 main::r#1 ] 0.85: zp[2]:89 [ main::x#0 ] -Uplift Scope [divr16u] 106.92: zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:222 [ divr16u::$1 ] 22: zp[1]:223 [ divr16u::$2 ] 18.19: zp[1]:69 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:210 [ divr16u::return#2 ] 4: zp[2]:214 [ divr16u::return#3 ] -Uplift Scope [mul16s] 46.69: zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] 46.18: zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] 22: zp[4]:77 [ mul16s::return#3 ] 22: zp[4]:97 [ mul16s::return#4 ] 22: zp[4]:154 [ mul16s::return#2 ] 16.5: zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp[4]:133 [ mul16s::return#0 ] 4: zp[2]:125 [ mul16s::$9 ] 4: zp[2]:127 [ mul16s::$16 ] 4: zp[2]:129 [ mul16s::$13 ] 4: zp[2]:131 [ mul16s::$17 ] -Uplift Scope [bitmap_init] 39.88: zp[2]:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp[1]:38 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp[1]:39 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp[1]:40 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp[1]:141 [ bitmap_init::$4 ] 22: zp[1]:142 [ bitmap_init::$5 ] 22: zp[1]:143 [ bitmap_init::$6 ] 5.5: zp[1]:140 [ bitmap_init::$7 ] -Uplift Scope [sin16s] 27.5: zp[4]:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:152 [ sin16s::return#0 ] 13: zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:164 [ sin16s::$4 ] 4: zp[2]:172 [ sin16s::x2#0 ] 4: zp[2]:180 [ sin16s::x3_6#0 ] 4: zp[2]:186 [ sin16s::x4#0 ] 4: zp[2]:190 [ sin16s::x5#0 ] 4: zp[2]:192 [ sin16s::x5_128#0 ] 1: zp[2]:176 [ sin16s::x3#0 ] 1: zp[2]:194 [ sin16s::usinx#1 ] 0.64: zp[2]:168 [ sin16s::x1#0 ] 0.33: zp[2]:182 [ sin16s::usinx#0 ] 0.06: zp[1]:51 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen2] 24.54: zp[2]:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp[4]:158 [ sin16s_gen2::$6 ] 13.75: zp[4]:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp[2]:162 [ sin16s_gen2::$9 ] 10.33: zp[2]:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp[4]:148 [ sin16s_gen2::step#0 ] -Uplift Scope [mulu16_sel] 24: zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:170 [ mulu16_sel::return#0 ] 4: zp[2]:174 [ mulu16_sel::return#1 ] 4: zp[2]:178 [ mulu16_sel::return#2 ] 4: zp[2]:184 [ mulu16_sel::return#10 ] 4: zp[2]:188 [ mulu16_sel::return#11 ] 4: zp[4]:200 [ mulu16_sel::$0 ] 4: zp[4]:204 [ mulu16_sel::$1 ] 1.71: zp[2]:208 [ mulu16_sel::return#12 ] 0.33: zp[1]:62 [ mulu16_sel::select#5 ] -Uplift Scope [memset] 41.33: zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:138 [ memset::end#0 ] 2: zp[2]:31 [ memset::num#2 ] 1.38: zp[1]:35 [ memset::c#4 ] 0: zp[2]:33 [ memset::str#3 ] -Uplift Scope [bitmap_plot] 7.5: zp[1]:111 [ bitmap_plot::y#0 ] 4: zp[2]:116 [ bitmap_plot::$1 ] 4: zp[1]:120 [ bitmap_plot::$2 ] 3.75: zp[2]:112 [ bitmap_plot::x#0 ] 3: zp[2]:118 [ bitmap_plot::plotter#1 ] 1: zp[2]:114 [ bitmap_plot::plotter#0 ] -Uplift Scope [div32u16u] 4: zp[4]:144 [ div32u16u::return#2 ] 4: zp[2]:216 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:218 [ div32u16u::return#0 ] 0.8: zp[2]:212 [ div32u16u::quotient_hi#0 ] -Uplift Scope [] 0.8: zp[2]:224 [ rem16u#1 ] 0.56: zp[1]:70 [ frame_cnt ] +Uplift Scope [mul16u] 346.86: zp[4]:21 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:25 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:135 [ mul16u::$1 ] 175.67: zp[2]:19 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 12: zp[2]:17 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] 4: zp[4]:119 [ mul16u::return#2 ] 4: zp[4]:194 [ mul16u::return#3 ] +Uplift Scope [main] 40.53: zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] 22: zp[2]:69 [ main::$31 ] 22: zp[2]:71 [ main::$33 ] 22: zp[4]:79 [ main::xpos#0 ] 22: zp[2]:85 [ main::$8 ] 22: zp[2]:89 [ main::$32 ] 22: zp[2]:91 [ main::$34 ] 22: zp[4]:99 [ main::ypos#0 ] 22: zp[2]:105 [ main::$14 ] 15.22: zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] 15.21: zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 11: zp[2]:73 [ main::cos_x#0 ] 11: zp[2]:83 [ main::$7 ] 11: zp[2]:93 [ main::sin_y#0 ] 11: zp[2]:103 [ main::$13 ] 11: zp[2]:107 [ main::y#0 ] 6.76: zp[2]:4 [ main::r#10 main::r#1 ] 0.85: zp[2]:87 [ main::x#0 ] +Uplift Scope [divr16u] 106.92: zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:220 [ divr16u::$1 ] 22: zp[1]:221 [ divr16u::$2 ] 18.19: zp[1]:67 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:63 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:208 [ divr16u::return#2 ] 4: zp[2]:212 [ divr16u::return#3 ] +Uplift Scope [mul16s] 46.69: zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] 46.18: zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] 22: zp[4]:75 [ mul16s::return#3 ] 22: zp[4]:95 [ mul16s::return#4 ] 22: zp[4]:152 [ mul16s::return#2 ] 16.5: zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 7: zp[4]:131 [ mul16s::return#0 ] 4: zp[2]:123 [ mul16s::$9 ] 4: zp[2]:125 [ mul16s::$16 ] 4: zp[2]:127 [ mul16s::$13 ] 4: zp[2]:129 [ mul16s::$17 ] +Uplift Scope [bitmap_init] 39.88: zp[2]:39 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp[1]:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22: zp[1]:37 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp[1]:38 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp[1]:139 [ bitmap_init::$4 ] 22: zp[1]:140 [ bitmap_init::$5 ] 22: zp[1]:141 [ bitmap_init::$6 ] 5.5: zp[1]:138 [ bitmap_init::$7 ] +Uplift Scope [sin16s] 27.5: zp[4]:50 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:150 [ sin16s::return#0 ] 13: zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:162 [ sin16s::$4 ] 4: zp[2]:170 [ sin16s::x2#0 ] 4: zp[2]:178 [ sin16s::x3_6#0 ] 4: zp[2]:184 [ sin16s::x4#0 ] 4: zp[2]:188 [ sin16s::x5#0 ] 4: zp[2]:190 [ sin16s::x5_128#0 ] 1: zp[2]:174 [ sin16s::x3#0 ] 1: zp[2]:192 [ sin16s::usinx#1 ] 0.64: zp[2]:166 [ sin16s::x1#0 ] 0.33: zp[2]:180 [ sin16s::usinx#0 ] 0.06: zp[1]:49 [ sin16s::isUpper#2 ] +Uplift Scope [sin16s_gen2] 24.54: zp[2]:41 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp[4]:156 [ sin16s_gen2::$6 ] 13.75: zp[4]:43 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp[2]:160 [ sin16s_gen2::$9 ] 10.33: zp[2]:47 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp[4]:146 [ sin16s_gen2::step#0 ] +Uplift Scope [mulu16_sel] 24: zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:58 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:168 [ mulu16_sel::return#0 ] 4: zp[2]:172 [ mulu16_sel::return#1 ] 4: zp[2]:176 [ mulu16_sel::return#2 ] 4: zp[2]:182 [ mulu16_sel::return#10 ] 4: zp[2]:186 [ mulu16_sel::return#11 ] 4: zp[4]:198 [ mulu16_sel::$0 ] 4: zp[4]:202 [ mulu16_sel::$1 ] 1.71: zp[2]:206 [ mulu16_sel::return#12 ] 0.33: zp[1]:60 [ mulu16_sel::select#5 ] +Uplift Scope [memset] 41.33: zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:136 [ memset::end#0 ] 2: zp[2]:29 [ memset::num#2 ] 1.38: zp[1]:33 [ memset::c#4 ] 0: zp[2]:31 [ memset::str#3 ] +Uplift Scope [bitmap_plot] 7.5: zp[1]:109 [ bitmap_plot::y#0 ] 4: zp[2]:114 [ bitmap_plot::$1 ] 4: zp[1]:118 [ bitmap_plot::$2 ] 3.75: zp[2]:110 [ bitmap_plot::x#0 ] 3: zp[2]:116 [ bitmap_plot::plotter#1 ] 1: zp[2]:112 [ bitmap_plot::plotter#0 ] +Uplift Scope [div32u16u] 4: zp[4]:142 [ div32u16u::return#2 ] 4: zp[2]:214 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:216 [ div32u16u::return#0 ] 0.8: zp[2]:210 [ div32u16u::quotient_hi#0 ] +Uplift Scope [] 0.8: zp[2]:222 [ rem16u#1 ] 0.56: zp[1]:68 [ frame_cnt ] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] -Uplifting [mul16u] best 27146 combination zp[4]:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:17 [ mul16u::b#0 ] zp[2]:19 [ mul16u::b#1 ] zp[4]:121 [ mul16u::return#2 ] zp[4]:196 [ mul16u::return#3 ] -Uplifting [main] best 27146 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp[2]:71 [ main::$31 ] zp[2]:73 [ main::$33 ] zp[4]:81 [ main::xpos#0 ] zp[2]:87 [ main::$8 ] zp[2]:91 [ main::$32 ] zp[2]:93 [ main::$34 ] zp[4]:101 [ main::ypos#0 ] zp[2]:107 [ main::$14 ] zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:75 [ main::cos_x#0 ] zp[2]:85 [ main::$7 ] zp[2]:95 [ main::sin_y#0 ] zp[2]:105 [ main::$13 ] zp[2]:109 [ main::y#0 ] zp[2]:4 [ main::r#10 main::r#1 ] zp[2]:89 [ main::x#0 ] -Uplifting [divr16u] best 26936 combination zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:210 [ divr16u::return#2 ] zp[2]:214 [ divr16u::return#3 ] -Uplifting [mul16s] best 26936 combination zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] zp[4]:77 [ mul16s::return#3 ] zp[4]:97 [ mul16s::return#4 ] zp[4]:154 [ mul16s::return#2 ] zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[4]:133 [ mul16s::return#0 ] zp[2]:125 [ mul16s::$9 ] zp[2]:127 [ mul16s::$16 ] zp[2]:129 [ mul16s::$13 ] zp[2]:131 [ mul16s::$17 ] -Uplifting [bitmap_init] best 26426 combination zp[2]:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:142 [ bitmap_init::$5 ] zp[1]:143 [ bitmap_init::$6 ] zp[1]:140 [ bitmap_init::$7 ] +Uplifting [mul16u] best 27566 combination zp[4]:21 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:25 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:19 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:17 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:119 [ mul16u::return#2 ] zp[4]:194 [ mul16u::return#3 ] +Uplifting [main] best 27566 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp[2]:69 [ main::$31 ] zp[2]:71 [ main::$33 ] zp[4]:79 [ main::xpos#0 ] zp[2]:85 [ main::$8 ] zp[2]:89 [ main::$32 ] zp[2]:91 [ main::$34 ] zp[4]:99 [ main::ypos#0 ] zp[2]:105 [ main::$14 ] zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:73 [ main::cos_x#0 ] zp[2]:83 [ main::$7 ] zp[2]:93 [ main::sin_y#0 ] zp[2]:103 [ main::$13 ] zp[2]:107 [ main::y#0 ] zp[2]:4 [ main::r#10 main::r#1 ] zp[2]:87 [ main::x#0 ] +Uplifting [divr16u] best 27356 combination zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:63 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:208 [ divr16u::return#2 ] zp[2]:212 [ divr16u::return#3 ] +Uplifting [mul16s] best 27356 combination zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] zp[4]:75 [ mul16s::return#3 ] zp[4]:95 [ mul16s::return#4 ] zp[4]:152 [ mul16s::return#2 ] zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[4]:131 [ mul16s::return#0 ] zp[2]:123 [ mul16s::$9 ] zp[2]:125 [ mul16s::$16 ] zp[2]:127 [ mul16s::$13 ] zp[2]:129 [ mul16s::$17 ] +Uplifting [bitmap_init] best 26846 combination zp[2]:39 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:140 [ bitmap_init::$5 ] zp[1]:141 [ bitmap_init::$6 ] zp[1]:138 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [sin16s] best 26417 combination zp[4]:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:152 [ sin16s::return#0 ] zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:164 [ sin16s::$4 ] zp[2]:172 [ sin16s::x2#0 ] zp[2]:180 [ sin16s::x3_6#0 ] zp[2]:186 [ sin16s::x4#0 ] zp[2]:190 [ sin16s::x5#0 ] zp[2]:192 [ sin16s::x5_128#0 ] zp[2]:176 [ sin16s::x3#0 ] zp[2]:194 [ sin16s::usinx#1 ] zp[2]:168 [ sin16s::x1#0 ] zp[2]:182 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 26417 combination zp[2]:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:158 [ sin16s_gen2::$6 ] zp[4]:45 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:162 [ sin16s_gen2::$9 ] zp[2]:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:148 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 26401 combination zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:170 [ mulu16_sel::return#0 ] zp[2]:174 [ mulu16_sel::return#1 ] zp[2]:178 [ mulu16_sel::return#2 ] zp[2]:184 [ mulu16_sel::return#10 ] zp[2]:188 [ mulu16_sel::return#11 ] zp[4]:200 [ mulu16_sel::$0 ] zp[4]:204 [ mulu16_sel::$1 ] zp[2]:208 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [memset] best 26385 combination zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:138 [ memset::end#0 ] zp[2]:31 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp[2]:33 [ memset::str#3 ] -Uplifting [bitmap_plot] best 26368 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:116 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:112 [ bitmap_plot::x#0 ] zp[2]:118 [ bitmap_plot::plotter#1 ] zp[2]:114 [ bitmap_plot::plotter#0 ] -Uplifting [div32u16u] best 26368 combination zp[4]:144 [ div32u16u::return#2 ] zp[2]:216 [ div32u16u::quotient_lo#0 ] zp[4]:218 [ div32u16u::return#0 ] zp[2]:212 [ div32u16u::quotient_hi#0 ] -Uplifting [] best 26368 combination zp[2]:224 [ rem16u#1 ] zp[1]:70 [ frame_cnt ] -Uplifting [bitmap_clear] best 26368 combination -Uplifting [init_irq] best 26368 combination -Uplifting [irq] best 26368 combination +Uplifting [sin16s] best 26837 combination zp[4]:50 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:150 [ sin16s::return#0 ] zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:162 [ sin16s::$4 ] zp[2]:170 [ sin16s::x2#0 ] zp[2]:178 [ sin16s::x3_6#0 ] zp[2]:184 [ sin16s::x4#0 ] zp[2]:188 [ sin16s::x5#0 ] zp[2]:190 [ sin16s::x5_128#0 ] zp[2]:174 [ sin16s::x3#0 ] zp[2]:192 [ sin16s::usinx#1 ] zp[2]:166 [ sin16s::x1#0 ] zp[2]:180 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16s_gen2] best 26837 combination zp[2]:41 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:156 [ sin16s_gen2::$6 ] zp[4]:43 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:160 [ sin16s_gen2::$9 ] zp[2]:47 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:146 [ sin16s_gen2::step#0 ] +Uplifting [mulu16_sel] best 26821 combination zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:58 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:168 [ mulu16_sel::return#0 ] zp[2]:172 [ mulu16_sel::return#1 ] zp[2]:176 [ mulu16_sel::return#2 ] zp[2]:182 [ mulu16_sel::return#10 ] zp[2]:186 [ mulu16_sel::return#11 ] zp[4]:198 [ mulu16_sel::$0 ] zp[4]:202 [ mulu16_sel::$1 ] zp[2]:206 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [memset] best 26805 combination zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:136 [ memset::end#0 ] zp[2]:29 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp[2]:31 [ memset::str#3 ] +Uplifting [bitmap_plot] best 26788 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:114 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:110 [ bitmap_plot::x#0 ] zp[2]:116 [ bitmap_plot::plotter#1 ] zp[2]:112 [ bitmap_plot::plotter#0 ] +Uplifting [div32u16u] best 26788 combination zp[4]:142 [ div32u16u::return#2 ] zp[2]:214 [ div32u16u::quotient_lo#0 ] zp[4]:216 [ div32u16u::return#0 ] zp[2]:210 [ div32u16u::quotient_hi#0 ] +Uplifting [] best 26788 combination zp[2]:222 [ rem16u#1 ] zp[1]:68 [ frame_cnt ] +Uplifting [bitmap_clear] best 26788 combination +Uplifting [init_irq] best 26788 combination +Uplifting [irq] best 26788 combination Attempting to uplift remaining variables inzp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] -Uplifting [main] best 26368 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] -Attempting to uplift remaining variables inzp[1]:142 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 26308 combination reg byte a [ bitmap_init::$5 ] -Attempting to uplift remaining variables inzp[1]:143 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 26248 combination reg byte a [ bitmap_init::$6 ] -Attempting to uplift remaining variables inzp[1]:140 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 26248 combination zp[1]:140 [ bitmap_init::$7 ] -Attempting to uplift remaining variables inzp[1]:70 [ frame_cnt ] -Uplifting [] best 26248 combination zp[1]:70 [ frame_cnt ] +Uplifting [main] best 26788 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] +Attempting to uplift remaining variables inzp[1]:140 [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 26728 combination reg byte a [ bitmap_init::$5 ] +Attempting to uplift remaining variables inzp[1]:141 [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 26668 combination reg byte a [ bitmap_init::$6 ] +Attempting to uplift remaining variables inzp[1]:138 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 26668 combination zp[1]:138 [ bitmap_init::$7 ] +Attempting to uplift remaining variables inzp[1]:68 [ frame_cnt ] +Uplifting [] best 26668 combination zp[1]:68 [ frame_cnt ] Coalescing zero page register [ zp[2]:4 [ main::r#10 main::r#1 ] ] with [ zp[2]:9 [ mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] ] - score: 2 -Coalescing zero page register [ zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:194 [ sin16s::usinx#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:176 [ sin16s::x3#0 ] ] - score: 2 -Coalescing zero page register [ zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:224 [ rem16u#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] ] with [ zp[2]:75 [ main::cos_x#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 ] ] with [ zp[2]:95 [ main::sin_y#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] ] with [ zp[4]:121 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 ] ] with [ zp[4]:133 [ mul16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:19 [ mul16u::b#1 ] ] with [ zp[2]:60 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 -Coalescing zero page register [ zp[4]:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:196 [ mul16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:31 [ memset::num#2 ] ] with [ zp[2]:138 [ memset::end#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:33 [ memset::str#3 ] ] with [ zp[2]:36 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:152 [ sin16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:172 [ sin16s::x2#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:186 [ sin16s::x4#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:210 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:214 [ divr16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:71 [ main::$31 ] ] with [ zp[2]:73 [ main::$33 ] ] - score: 1 -Coalescing zero page register [ zp[4]:77 [ mul16s::return#3 ] ] with [ zp[4]:81 [ main::xpos#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:85 [ main::$7 ] ] with [ zp[2]:87 [ main::$8 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ main::x#0 ] ] with [ zp[2]:112 [ bitmap_plot::x#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:91 [ main::$32 ] ] with [ zp[2]:93 [ main::$34 ] ] - score: 1 -Coalescing zero page register [ zp[4]:97 [ mul16s::return#4 ] ] with [ zp[4]:101 [ main::ypos#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:105 [ main::$13 ] ] with [ zp[2]:107 [ main::$14 ] ] - score: 1 -Coalescing zero page register [ zp[2]:114 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:118 [ bitmap_plot::plotter#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:125 [ mul16s::$9 ] ] with [ zp[2]:127 [ mul16s::$16 ] ] - score: 1 -Coalescing zero page register [ zp[2]:129 [ mul16s::$13 ] ] with [ zp[2]:131 [ mul16s::$17 ] ] - score: 1 -Coalescing zero page register [ zp[4]:144 [ div32u16u::return#2 ] ] with [ zp[4]:148 [ sin16s_gen2::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:144 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp[4]:218 [ div32u16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:154 [ mul16s::return#2 ] ] with [ zp[4]:158 [ sin16s_gen2::$6 ] ] - score: 1 -Coalescing zero page register [ zp[2]:170 [ mulu16_sel::return#0 ] ] with [ zp[2]:208 [ mulu16_sel::return#12 ] ] - score: 1 -Coalescing zero page register [ zp[2]:178 [ mulu16_sel::return#2 ] ] with [ zp[2]:180 [ sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:188 [ mulu16_sel::return#11 ] ] with [ zp[2]:190 [ sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:200 [ mulu16_sel::$0 ] ] with [ zp[4]:204 [ mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] ] with [ zp[2]:56 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 ] ] with [ zp[2]:71 [ main::$31 main::$33 ] ] - score: 1 -Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 ] ] with [ zp[2]:91 [ main::$32 main::$34 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:23 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:77 [ mul16s::return#3 main::xpos#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 ] ] with [ zp[4]:97 [ mul16s::return#4 main::ypos#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 ] ] with [ zp[4]:154 [ mul16s::return#2 sin16s_gen2::$6 ] ] - score: 1 -Coalescing zero page register [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:174 [ mulu16_sel::return#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:184 [ mulu16_sel::return#10 ] ] - score: 1 -Coalescing zero page register [ zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:216 [ div32u16u::quotient_lo#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:85 [ main::$7 main::$8 ] ] with [ zp[2]:89 [ main::x#0 bitmap_plot::x#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:105 [ main::$13 main::$14 ] ] with [ zp[2]:109 [ main::y#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:170 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:178 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:170 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:188 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:182 [ sin16s::usinx#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 ] ] with [ zp[4]:200 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:170 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:192 [ sin16s::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:19 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] ] -Coalescing zero page register [ zp[2]:31 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] ] -Coalescing zero page register [ zp[2]:33 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] -Coalescing zero page register [ zp[2]:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] ] -Coalescing zero page register [ zp[4]:52 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] -Coalescing zero page register [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:17 [ mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:21 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp[2]:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:43 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] -Coalescing zero page register [ zp[2]:67 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:49 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] -Coalescing zero page register [ zp[2]:114 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:105 [ main::$13 main::$14 main::y#0 ] ] -Coalescing zero page register [ zp[2]:125 [ mul16s::$9 mul16s::$16 ] ] with [ zp[2]:116 [ bitmap_plot::$1 ] ] -Coalescing zero page register [ zp[1]:140 [ bitmap_init::$7 ] ] with [ zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] ] -Coalescing zero page register [ zp[2]:162 [ sin16s_gen2::$9 ] ] with [ zp[2]:85 [ main::$7 main::$8 main::x#0 bitmap_plot::x#0 ] ] -Coalescing zero page register [ zp[4]:164 [ sin16s::$4 ] ] with [ zp[4]:27 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] -Coalescing zero page register [ zp[2]:168 [ sin16s::x1#0 ] ] with [ zp[2]:129 [ mul16s::$13 mul16s::$17 ] ] -Coalescing zero page register [ zp[2]:212 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:170 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] -Coalescing zero page register [ zp[2]:65 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:33 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] -Coalescing zero page register [ zp[2]:114 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 ] ] with [ zp[2]:58 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:125 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp[2]:63 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp[2]:212 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:41 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] ] -Allocated (was zp[2]:19) zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] -Allocated (was zp[2]:31) zp[2]:4 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] -Allocated (was zp[4]:45) zp[4]:6 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] -Allocated (was zp[4]:52) zp[4]:10 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] -Allocated (was zp[2]:65) zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -Allocated (was zp[2]:67) zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] -Allocated (was zp[1]:70) zp[1]:18 [ frame_cnt ] -Allocated (was zp[2]:114) zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] -Allocated (was zp[2]:125) zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated (was zp[1]:140) zp[1]:23 [ bitmap_init::$7 main::r_add#10 main::r_add#12 main::r_add#1 ] -Allocated (was zp[4]:144) zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -Allocated (was zp[2]:162) zp[2]:28 [ sin16s_gen2::$9 main::$7 main::$8 main::x#0 bitmap_plot::x#0 ] -Allocated (was zp[4]:164) zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -Allocated (was zp[2]:168) zp[2]:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ] -Allocated (was zp[2]:212) zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] +Coalescing zero page register [ zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:192 [ sin16s::usinx#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:174 [ sin16s::x3#0 ] ] - score: 2 +Coalescing zero page register [ zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:222 [ rem16u#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 ] ] with [ zp[2]:73 [ main::cos_x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 ] ] with [ zp[2]:93 [ main::sin_y#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] ] with [ zp[4]:119 [ mul16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 ] ] with [ zp[4]:131 [ mul16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:17 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] ] with [ zp[2]:58 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 +Coalescing zero page register [ zp[4]:21 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:194 [ mul16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ memset::num#2 ] ] with [ zp[2]:136 [ memset::end#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ memset::str#3 ] ] with [ zp[2]:34 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:150 [ sin16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:170 [ sin16s::x2#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:184 [ sin16s::x4#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:208 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:212 [ divr16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:69 [ main::$31 ] ] with [ zp[2]:71 [ main::$33 ] ] - score: 1 +Coalescing zero page register [ zp[4]:75 [ mul16s::return#3 ] ] with [ zp[4]:79 [ main::xpos#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:83 [ main::$7 ] ] with [ zp[2]:85 [ main::$8 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ main::x#0 ] ] with [ zp[2]:110 [ bitmap_plot::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:89 [ main::$32 ] ] with [ zp[2]:91 [ main::$34 ] ] - score: 1 +Coalescing zero page register [ zp[4]:95 [ mul16s::return#4 ] ] with [ zp[4]:99 [ main::ypos#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:103 [ main::$13 ] ] with [ zp[2]:105 [ main::$14 ] ] - score: 1 +Coalescing zero page register [ zp[2]:112 [ bitmap_plot::plotter#0 ] ] with [ zp[2]:116 [ bitmap_plot::plotter#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:123 [ mul16s::$9 ] ] with [ zp[2]:125 [ mul16s::$16 ] ] - score: 1 +Coalescing zero page register [ zp[2]:127 [ mul16s::$13 ] ] with [ zp[2]:129 [ mul16s::$17 ] ] - score: 1 +Coalescing zero page register [ zp[4]:142 [ div32u16u::return#2 ] ] with [ zp[4]:146 [ sin16s_gen2::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:142 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp[4]:216 [ div32u16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:152 [ mul16s::return#2 ] ] with [ zp[4]:156 [ sin16s_gen2::$6 ] ] - score: 1 +Coalescing zero page register [ zp[2]:168 [ mulu16_sel::return#0 ] ] with [ zp[2]:206 [ mulu16_sel::return#12 ] ] - score: 1 +Coalescing zero page register [ zp[2]:176 [ mulu16_sel::return#2 ] ] with [ zp[2]:178 [ sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:186 [ mulu16_sel::return#11 ] ] with [ zp[2]:188 [ sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:198 [ mulu16_sel::$0 ] ] with [ zp[4]:202 [ mulu16_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 ] ] with [ zp[2]:54 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 ] ] with [ zp[2]:69 [ main::$31 main::$33 ] ] - score: 1 +Coalescing zero page register [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 ] ] with [ zp[2]:89 [ main::$32 main::$34 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:21 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:75 [ mul16s::return#3 main::xpos#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 ] ] with [ zp[4]:95 [ mul16s::return#4 main::ypos#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 ] ] with [ zp[4]:152 [ mul16s::return#2 sin16s_gen2::$6 ] ] - score: 1 +Coalescing zero page register [ zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:172 [ mulu16_sel::return#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:182 [ mulu16_sel::return#10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:214 [ div32u16u::quotient_lo#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:83 [ main::$7 main::$8 ] ] with [ zp[2]:87 [ main::x#0 bitmap_plot::x#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:103 [ main::$13 main::$14 ] ] with [ zp[2]:107 [ main::y#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:168 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:176 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:168 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:186 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:180 [ sin16s::usinx#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 ] ] with [ zp[4]:198 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:168 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:190 [ sin16s::x5_128#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ memset::num#2 memset::end#0 ] ] with [ zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] ] +Coalescing zero page register [ zp[2]:31 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] ] +Coalescing zero page register [ zp[2]:39 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] with [ zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] +Coalescing zero page register [ zp[4]:50 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:13 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] +Coalescing zero page register [ zp[2]:56 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:11 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] ] +Coalescing zero page register [ zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:17 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] +Coalescing zero page register [ zp[2]:63 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:19 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:41 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] +Coalescing zero page register [ zp[2]:83 [ main::$7 main::$8 main::x#0 bitmap_plot::x#0 ] ] with [ zp[2]:47 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] +Coalescing zero page register [ zp[2]:112 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ] ] with [ zp[2]:103 [ main::$13 main::$14 main::y#0 ] ] +Coalescing zero page register [ zp[2]:123 [ mul16s::$9 mul16s::$16 ] ] with [ zp[2]:114 [ bitmap_plot::$1 ] ] +Coalescing zero page register [ zp[1]:138 [ bitmap_init::$7 ] ] with [ zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] ] +Coalescing zero page register [ zp[2]:160 [ sin16s_gen2::$9 ] ] with [ zp[2]:127 [ mul16s::$13 mul16s::$17 ] ] +Coalescing zero page register [ zp[4]:162 [ sin16s::$4 ] ] with [ zp[4]:25 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] +Coalescing zero page register [ zp[2]:210 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:166 [ sin16s::x1#0 ] ] +Coalescing zero page register [ zp[2]:65 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:29 [ memset::num#2 memset::end#0 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] ] +Coalescing zero page register [ zp[2]:112 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 ] ] with [ zp[2]:61 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] +Coalescing zero page register [ zp[2]:123 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 ] ] with [ zp[2]:63 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:168 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:39 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] ] +Coalescing zero page register [ zp[2]:210 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] ] with [ zp[2]:160 [ sin16s_gen2::$9 mul16s::$13 mul16s::$17 ] ] +Allocated (was zp[2]:31) zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] +Allocated (was zp[4]:43) zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +Allocated (was zp[4]:50) zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] +Allocated (was zp[2]:56) zp[2]:12 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] +Allocated (was zp[2]:65) zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] +Allocated (was zp[1]:68) zp[1]:16 [ frame_cnt ] +Allocated (was zp[2]:83) zp[2]:17 [ main::$7 main::$8 main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +Allocated (was zp[2]:112) zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +Allocated (was zp[2]:123) zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +Allocated (was zp[1]:138) zp[1]:23 [ bitmap_init::$7 main::r_add#10 main::r_add#12 main::r_add#1 ] +Allocated (was zp[4]:142) zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] +Allocated (was zp[4]:162) zp[4]:28 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated (was zp[2]:168) zp[2]:32 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +Allocated (was zp[2]:210) zp[2]:34 [ div32u16u::quotient_hi#0 sin16s::x1#0 sin16s_gen2::$9 mul16s::$13 mul16s::$17 ] Interrupt procedure irq clobbers ACNZ -Removing interrupt register storage stx regx+1 in CHU440 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage sty regy+1 in CHU440 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regx: in CHU449 [238] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldx #00 in CHU449 [238] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in CHU449 [238] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in CHU449 [238] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage stx regx+1 in CHU441 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage sty regy+1 in CHU441 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regx: in CHU450 [239] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldx #00 in CHU450 [239] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regy: in CHU450 [239] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldy #00 in CHU450 [239] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -6525,9 +6470,9 @@ ASSEMBLER BEFORE OPTIMIZATION .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $12 + .label frame_cnt = $10 // Remainder after unsigned 16-bit division - .label rem16u = $15 + .label rem16u = $13 // @begin __bbegin: jmp __b1 @@ -6554,26 +6499,26 @@ __bend: // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __7 = $1c - .label __8 = $1c + .label __7 = $11 + .label __8 = $11 .label __13 = $13 .label __14 = $13 - .label __31 = $24 - .label __32 = $24 - .label cos_x = $24 - .label xpos = $a - .label x = $1c - .label sin_y = $24 - .label ypos = $a + .label __31 = $c + .label __32 = $c + .label cos_x = $c + .label xpos = 8 + .label x = $11 + .label sin_y = $c + .label ypos = 8 .label y = $13 - .label idx_x = 2 - .label idx_y = $e - .label r = 4 + .label idx_x = $e + .label idx_y = $20 + .label r = 2 .label r_add = $17 - .label __33 = $24 - .label __34 = $24 + .label __33 = $c + .label __34 = $c // [6] call sin16s_gen2 - // [137] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] + // [138] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] sin16s_gen2_from_main: jsr sin16s_gen2 // [7] phi from main to main::@9 [phi:main->main::@9] @@ -6582,7 +6527,7 @@ main: { // main::@9 __b9: // [8] call bitmap_init - // [115] phi from main::@9 to bitmap_init [phi:main::@9->bitmap_init] + // [116] phi from main::@9 to bitmap_init [phi:main::@9->bitmap_init] bitmap_init_from___b9: jsr bitmap_init // [9] phi from main::@9 to main::@10 [phi:main::@9->main::@10] @@ -6591,7 +6536,7 @@ main: { // main::@10 __b10: // [10] call bitmap_clear - // [101] phi from main::@10 to bitmap_clear [phi:main::@10->bitmap_clear] + // [102] phi from main::@10 to bitmap_clear [phi:main::@10->bitmap_clear] bitmap_clear_from___b10: jsr bitmap_clear jmp __b11 @@ -6618,17 +6563,17 @@ main: { // [15] phi (byte) main::r_add#10 = (byte) $20 [phi:main::@8->main::@1#0] -- vbuz1=vbuc1 lda #$20 sta.z r_add - // [15] phi (word) main::idx_y#3 = (byte) $80 [phi:main::@8->main::@1#1] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_y#3 = (word) $80 [phi:main::@8->main::@1#1] -- vwuz1=vwuc1 lda #<$80 sta.z idx_y lda #>$80 sta.z idx_y+1 - // [15] phi (signed word) main::r#10 = (signed byte) 0 [phi:main::@8->main::@1#2] -- vwsz1=vbsc1 + // [15] phi (signed word) main::r#10 = (signed word) 0 [phi:main::@8->main::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z r lda #>0 sta.z r+1 - // [15] phi (word) main::idx_x#11 = (byte) 0 [phi:main::@8->main::@1#3] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_x#11 = (word) 0 [phi:main::@8->main::@1#3] -- vwuz1=vwuc1 lda #<0 sta.z idx_x lda #>0 @@ -6900,11 +6845,11 @@ main: { } // bitmap_plot // Plot a single dot in the bitmap -// bitmap_plot(word zp($1c) x, byte register(X) y) +// bitmap_plot(word zp($11) x, byte register(X) y) bitmap_plot: { .label __1 = $15 .label plotter = $13 - .label x = $1c + .label x = $11 // [57] (word) bitmap_plot::plotter#0 ← *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#0) w= *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#0) -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx lda bitmap_plot_yhi,x sta.z plotter+1 @@ -6943,16 +6888,16 @@ bitmap_plot: { // mul16s // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp(4) a, signed word zp($24) b) +// mul16s(signed word zp(2) a, signed word zp($c) b) mul16s: { .label __9 = $15 .label __13 = $22 .label __16 = $15 .label __17 = $22 - .label m = $a - .label return = $a - .label a = 4 - .label b = $24 + .label m = 8 + .label return = 8 + .label a = 2 + .label b = $c // [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a @@ -6967,14 +6912,7 @@ mul16s: { // [81] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [81] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [81] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [81] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b5 @@ -7054,27 +6992,36 @@ mul16s: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($15) a, word zp($13) b) mul16u: { - .label mb = $1e + .label mb = $1c .label a = $15 - .label res = $a + .label res = 8 .label b = $13 - .label return = $a - .label b_1 = 2 - // [82] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + .label return = 8 + // [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [83] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [82] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [82] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [83] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [83] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [82] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [83] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -7082,20 +7029,20 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [84] return + // [85] return rts // mul16u::@2 __b2: - // [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a - // [86] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [87] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -7109,26 +7056,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [88] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [89] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [88] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [89] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [89] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [90] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [90] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [91] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [82] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [83] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [82] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [82] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [82] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [83] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [83] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [83] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // init_irq @@ -7136,30 +7083,30 @@ mul16u: { init_irq: { // asm { sei } sei - // [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT - // [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 ora VIC_CONTROL sta VIC_CONTROL - // [96] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [97] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta RASTER - // [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 + // [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #memset] + // [103] call memset + // [107] phi from bitmap_clear to memset [phi:bitmap_clear->memset] memset_from_bitmap_clear: - // [106] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 + // [107] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 ldx #col - // [106] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [107] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [106] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [107] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [103] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [104] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] __b1_from_bitmap_clear: jmp __b1 // bitmap_clear::@1 __b1: - // [104] call memset - // [106] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [105] call memset + // [107] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] memset_from___b1: - // [106] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 + // [107] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 ldx #0 - // [106] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [107] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [106] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [107] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -7219,18 +7166,18 @@ bitmap_clear: { jmp __breturn // bitmap_clear::@return __breturn: - // [105] return + // [106] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($e) str, byte register(X) c, word zp(4) num) +// memset(void* zp(2) str, byte register(X) c, word zp($e) num) memset: { - .label end = 4 - .label dst = $e - .label num = 4 - .label str = $e - // [107] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + .label end = $e + .label dst = 2 + .label num = $e + .label str = 2 + // [108] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -7239,7 +7186,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda.z end clc adc.z str @@ -7247,15 +7194,15 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [110] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [111] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [110] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [111] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -7265,15 +7212,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [112] return + // [113] return rts // memset::@3 __b3: - // [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [114] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [115] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -7284,87 +7231,87 @@ memset: { // Initialize bitmap plotting tables bitmap_init: { .label __7 = $17 - .label yoffs = $24 - // [116] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + .label yoffs = $20 + // [117] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] __b1_from_bitmap_init: - // [116] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + // [117] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [116] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + // [117] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 jmp __b1 - // [116] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [117] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] __b1_from___b2: - // [116] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [116] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [117] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [117] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp __b1 // bitmap_init::@1 __b1: - // [117] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa + // [118] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x - // [118] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // [119] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 lsr - // [119] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 + // [120] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6_from___b1 - // [121] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [122] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] __b2_from___b1: - // [121] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + // [122] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 jmp __b2 - // [120] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [121] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] __b6_from___b1: jmp __b6 // bitmap_init::@6 __b6: - // [121] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [122] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] __b2_from___b6: - // [121] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [122] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy jmp __b2 // bitmap_init::@2 __b2: - // [122] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx + // [123] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx inx - // [123] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 + // [124] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1_from___b2 - // [124] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [125] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] __b3_from___b2: - // [124] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [125] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [124] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + // [125] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [124] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [125] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] __b3_from___b4: - // [124] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [124] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [125] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [125] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp __b3 // bitmap_init::@3 __b3: - // [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [126] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __7 - // [126] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1 + // [127] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1 lda.z yoffs - // [127] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa + // [128] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa ora.z __7 - // [128] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa + // [129] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_ylo,x - // [129] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 + // [130] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 lda.z yoffs+1 - // [130] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [131] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x - // [131] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [132] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4_from___b3 jmp __b5 // bitmap_init::@5 __b5: - // [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -7372,66 +7319,68 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [133] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [134] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] __b4_from___b3: __b4_from___b5: - // [133] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [134] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy jmp __b4 // bitmap_init::@4 __b4: - // [134] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx + // [135] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx inx - // [135] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 + // [136] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3_from___b4 jmp __breturn // bitmap_init::@return __breturn: - // [136] return + // [137] return rts } // sin16s_gen2 // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($10) sintab) +// sin16s_gen2(signed word* zp($11) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = $a - .label __9 = $1c + .label __6 = 8 + .label __9 = $22 .label step = $18 - .label sintab = $10 + .label sintab = $11 // u[4.28] // Iterate over the table - .label x = 6 + .label x = 4 .label i = $e - // [138] call div32u16u - // [205] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [139] call div32u16u + // [206] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u - // [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + // [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 jmp __b3 // sin16s_gen2::@3 __b3: - // [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] + // [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + // [142] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] __b1_from___b3: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [142] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 lda #SINUS sta.z sintab+1 - // [141] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [142] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [141] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [142] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7440,7 +7389,7 @@ sin16s_gen2: { // u[4.28] // sin16s_gen2::@1 __b1: - // [142] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 + // [143] if((word) sin16s_gen2::i#2<(const word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>wavelength bcc __b2 @@ -7452,11 +7401,11 @@ sin16s_gen2: { jmp __breturn // sin16s_gen2::@return __breturn: - // [143] return + // [144] return rts // sin16s_gen2::@2 __b2: - // [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 lda.z x sta.z sin16s.x lda.z x+1 @@ -7465,14 +7414,14 @@ sin16s_gen2: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [145] call sin16s + // [146] call sin16s jsr sin16s - // [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 jmp __b4 // sin16s_gen2::@4 __b4: - // [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [148] call mul16s + // [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [149] call mul16s // [63] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] mul16s_from___b4: // [63] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 @@ -7482,24 +7431,24 @@ sin16s_gen2: { sta.z mul16s.b+1 // [63] phi (signed word) mul16s::a#3 = (signed word) mul16s::a#0 [phi:sin16s_gen2::@4->mul16s#1] -- register_copy jsr mul16s - // [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 jmp __b5 // sin16s_gen2::@5 __b5: - // [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 - // [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda.z __6+2 sta.z __9 lda.z __6+3 sta.z __9+1 - // [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __9 sta (sintab),y iny lda.z __9+1 sta (sintab),y - // [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab @@ -7507,7 +7456,7 @@ sin16s_gen2: { bcc !+ inc.z sintab+1 !: - // [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step @@ -7521,37 +7470,37 @@ sin16s_gen2: { lda.z x+3 adc.z step+3 sta.z x+3 - // [155] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 + // [156] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [141] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] + // [142] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] __b1_from___b5: - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [141] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [141] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy + // [142] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy + // [142] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy + // [142] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp($a) x) +// sin16s(dword zp(8) x) sin16s: { - .label __4 = $1e - .label x = $a - .label return = 4 + .label __4 = $1c + .label x = 8 + .label return = 2 .label x1 = $22 - .label x2 = $13 - .label x3 = $13 - .label x3_6 = $24 - .label usinx = 4 - .label x4 = $13 - .label x5 = $24 - .label x5_128 = $24 - .label sinx = 4 - // [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + .label x2 = $c + .label x3 = $c + .label x3_6 = $20 + .label usinx = 2 + .label x4 = $c + .label x5 = $20 + .label x5_128 = $20 + .label sinx = 2 + // [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -7571,7 +7520,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [158] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [159] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [158] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [159] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [158] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [159] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [158] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [159] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [158] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [159] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [158] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [159] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -7619,7 +7568,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [161] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [162] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [161] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [162] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -7661,53 +7610,53 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [166] call mulu16_sel - // [196] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [167] call mulu16_sel + // [197] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 jmp __b7 // sin16s::@7 __b7: - // [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [171] call mulu16_sel - // [196] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [172] call mulu16_sel + // [197] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -7715,26 +7664,26 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - // [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [175] call mulu16_sel - // [196] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [176] call mulu16_sel + // [197] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [196] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [197] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 jmp __b9 // sin16s::@9 __b9: - // [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - // [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -7742,21 +7691,21 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [181] call mulu16_sel - // [196] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [182] call mulu16_sel + // [197] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -7764,27 +7713,27 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - // [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [186] call mulu16_sel - // [196] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [187] call mulu16_sel + // [197] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 jmp __b11 // sin16s::@11 __b11: - // [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - // [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -7793,7 +7742,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -7801,13 +7750,13 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 - // [191] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [192] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -7815,59 +7764,52 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [193] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [194] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [193] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [194] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [194] return + // [195] return rts // sin16s::@12 __b12: - // [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 jmp __b3_from___b12 } // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($13) v1, word zp(2) v2, byte register(X) select) +// mulu16_sel(word zp($c) v1, word zp($13) v2, byte register(X) select) mulu16_sel: { - .label __0 = $a - .label __1 = $a - .label v1 = $13 - .label v2 = 2 - .label return = $24 - .label return_1 = $13 - // [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + .label __0 = 8 + .label __1 = 8 + .label v1 = $c + .label v2 = $13 + .label return = $20 + .label return_1 = $c + // [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [199] call mul16u + // [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [200] call mul16u // [81] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [81] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [81] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [81] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 jmp __b1 // mulu16_sel::@1 __b1: - // [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - // [202] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx + // [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [203] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx cpx #0 beq !e+ !: @@ -7878,7 +7820,7 @@ mulu16_sel: { dex bne !- !e: - // [203] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 @@ -7886,56 +7828,56 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [204] return + // [205] return rts } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $24 - .label quotient_lo = $10 + .label quotient_hi = $22 + .label quotient_lo = $e .label return = $18 - // [206] call divr16u - // [215] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [207] call divr16u + // [216] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [215] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [216] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [215] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [216] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [207] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [208] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp __b1 // div32u16u::@1 __b1: - // [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 - // [209] (word) divr16u::rem#4 ← (word) rem16u#1 - // [210] call divr16u - // [215] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [210] (word) divr16u::rem#4 ← (word) rem16u#1 + // [211] call divr16u + // [216] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [215] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [216] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [215] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [216] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [211] (word) divr16u::return#3 ← (word) divr16u::return#0 + // [212] (word) divr16u::return#3 ← (word) divr16u::return#0 jmp __b2 // div32u16u::@2 __b2: - // [212] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - // [213] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [213] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + // [214] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -7947,7 +7889,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [214] return + // [215] return rts } // divr16u @@ -7955,64 +7897,64 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($e) dividend, word zp($15) rem) +// divr16u(word zp($15) dividend, word zp($13) rem) divr16u: { - .label rem = $15 - .label dividend = $e - .label quotient = $10 - .label return = $10 - // [216] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label rem = $13 + .label dividend = $15 + .label quotient = $e + .label return = $e + // [217] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [216] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [217] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [216] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [217] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [216] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [216] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [217] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [217] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [216] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [217] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [216] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [216] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [216] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [216] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [217] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [217] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [217] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [217] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [217] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [218] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 - // [219] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [220] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 - // [220] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [221] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [222] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [223] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [222] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [223] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [223] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [224] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [224] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [225] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>sin16s_gen2.wavelength bcc __b3_from___b2 @@ -8024,12 +7966,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [226] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [227] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 + // [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #sin16s_gen2.wavelength sta.z rem+1 - // [228] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [229] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [228] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [228] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [229] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [229] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [229] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [230] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [230] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [231] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [231] (word) rem16u#1 ← (word) divr16u::rem#11 + // [232] (word) rem16u#1 ← (word) divr16u::rem#11 jmp __breturn // divr16u::@return __breturn: - // [232] return + // [233] return rts } // irq @@ -8065,32 +8007,32 @@ divr16u: { irq: { // entry interrupt(HARDWARE_CLOBBER) sta rega+1 - // [233] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 + // [234] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BGCOL - // [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 + // [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z frame_cnt beq __b1 jmp __b2 // irq::@2 __b2: - // [235] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 + // [236] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 inc.z frame_cnt jmp __b1 // irq::@1 __b1: - // [236] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + // [237] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL - // [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // irq::@return __breturn: - // [238] return - exit interrupt(HARDWARE_CLOBBER) + // [239] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 rti @@ -8188,9 +8130,8 @@ Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #<0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA @@ -8363,6 +8304,8 @@ Removing instruction jmp __b2 Removing instruction jmp __b3 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b5 with b1 Replacing label __b5 with b1 Replacing label __b5 with b1 @@ -8380,32 +8323,32 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const signed word*) SINUS[(number) $200] = { fill( $200, 0) } (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -8439,9 +8382,9 @@ FINAL SYMBOL TABLE (byte) bitmap_init::y#1 reg byte x 16.5 (byte) bitmap_init::y#2 reg byte x 5.5 (byte*) bitmap_init::yoffs -(byte*) bitmap_init::yoffs#1 yoffs zp[2]:36 22.0 -(byte*) bitmap_init::yoffs#2 yoffs zp[2]:36 6.875 -(byte*) bitmap_init::yoffs#4 yoffs zp[2]:36 11.0 +(byte*) bitmap_init::yoffs#1 yoffs zp[2]:32 22.0 +(byte*) bitmap_init::yoffs#2 yoffs zp[2]:32 6.875 +(byte*) bitmap_init::yoffs#4 yoffs zp[2]:32 11.0 (void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y) (word~) bitmap_plot::$1 zp[2]:21 4.0 (byte~) bitmap_plot::$2 reg byte a 4.0 @@ -8450,7 +8393,7 @@ FINAL SYMBOL TABLE (word) bitmap_plot::plotter#0 plotter zp[2]:19 1.0 (byte*) bitmap_plot::plotter#1 plotter zp[2]:19 3.0 (word) bitmap_plot::x -(word) bitmap_plot::x#0 x zp[2]:28 3.75 +(word) bitmap_plot::x#0 x zp[2]:17 3.75 (byte) bitmap_plot::y (byte) bitmap_plot::y#0 reg byte x 7.5 (const byte*) bitmap_plot_bit[(number) $100] = { fill( $100, 0) } @@ -8465,9 +8408,9 @@ FINAL SYMBOL TABLE (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:36 0.8 +(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:34 0.8 (word) div32u16u::quotient_lo -(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0 +(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:14 4.0 (dword) div32u16u::return (dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333 (dword) div32u16u::return#2 return zp[4]:24 4.0 @@ -8482,31 +8425,31 @@ FINAL SYMBOL TABLE (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp[2]:14 2.75 -(word) divr16u::dividend#3 dividend zp[2]:14 5.0 -(word) divr16u::dividend#5 dividend zp[2]:14 2.0 +(word) divr16u::dividend#0 dividend zp[2]:21 2.75 +(word) divr16u::dividend#3 dividend zp[2]:21 5.0 +(word) divr16u::dividend#5 dividend zp[2]:21 2.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 16.5 (byte) divr16u::i#2 reg byte x 1.6923076923076923 (word) divr16u::quotient -(word) divr16u::quotient#1 quotient zp[2]:16 16.5 -(word) divr16u::quotient#2 quotient zp[2]:16 11.0 -(word) divr16u::quotient#3 quotient zp[2]:16 2.75 +(word) divr16u::quotient#1 quotient zp[2]:14 16.5 +(word) divr16u::quotient#2 quotient zp[2]:14 11.0 +(word) divr16u::quotient#3 quotient zp[2]:14 2.75 (word) divr16u::rem -(word) divr16u::rem#0 rem zp[2]:21 8.25 -(word) divr16u::rem#1 rem zp[2]:21 22.0 -(word) divr16u::rem#10 rem zp[2]:21 4.0 -(word) divr16u::rem#11 rem zp[2]:21 11.666666666666666 -(word) divr16u::rem#2 rem zp[2]:21 22.0 -(word) divr16u::rem#4 rem zp[2]:21 4.0 -(word) divr16u::rem#5 rem zp[2]:21 24.0 -(word) divr16u::rem#6 rem zp[2]:21 11.0 +(word) divr16u::rem#0 rem zp[2]:19 8.25 +(word) divr16u::rem#1 rem zp[2]:19 22.0 +(word) divr16u::rem#10 rem zp[2]:19 4.0 +(word) divr16u::rem#11 rem zp[2]:19 11.666666666666666 +(word) divr16u::rem#2 rem zp[2]:19 22.0 +(word) divr16u::rem#4 rem zp[2]:19 4.0 +(word) divr16u::rem#5 rem zp[2]:19 24.0 +(word) divr16u::rem#6 rem zp[2]:19 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp[2]:16 5.285714285714286 -(word) divr16u::return#2 return zp[2]:16 4.0 -(word) divr16u::return#3 return zp[2]:16 4.0 -(byte) frame_cnt loadstore zp[1]:18 0.5555555555555556 +(word) divr16u::return#0 return zp[2]:14 5.285714285714286 +(word) divr16u::return#2 return zp[2]:14 4.0 +(word) divr16u::return#3 return zp[2]:14 4.0 +(byte) frame_cnt loadstore zp[1]:16 0.5555555555555556 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() @@ -8516,12 +8459,12 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() (word~) main::$13 zp[2]:19 11.0 (signed word~) main::$14 zp[2]:19 22.0 -(word~) main::$31 zp[2]:36 22.0 -(word~) main::$32 zp[2]:36 22.0 -(signed word*~) main::$33 zp[2]:36 22.0 -(signed word*~) main::$34 zp[2]:36 22.0 -(word~) main::$7 zp[2]:28 11.0 -(signed word~) main::$8 zp[2]:28 22.0 +(word~) main::$31 zp[2]:12 22.0 +(word~) main::$32 zp[2]:12 22.0 +(signed word*~) main::$33 zp[2]:12 22.0 +(signed word*~) main::$34 zp[2]:12 22.0 +(word~) main::$7 zp[2]:17 11.0 +(signed word~) main::$8 zp[2]:17 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -8540,37 +8483,37 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) main::@8 (label) main::@9 (signed word) main::cos_x -(signed word) main::cos_x#0 cos_x zp[2]:36 11.0 +(signed word) main::cos_x#0 cos_x zp[2]:12 11.0 (word) main::idx_x -(word) main::idx_x#1 idx_x zp[2]:2 11.0 -(word) main::idx_x#10 idx_x zp[2]:2 3.0 -(word) main::idx_x#11 idx_x zp[2]:2 1.222222222222222 +(word) main::idx_x#1 idx_x zp[2]:14 11.0 +(word) main::idx_x#10 idx_x zp[2]:14 3.0 +(word) main::idx_x#11 idx_x zp[2]:14 1.222222222222222 (word) main::idx_y -(word) main::idx_y#1 idx_y zp[2]:14 11.0 -(word) main::idx_y#10 idx_y zp[2]:14 3.142857142857143 -(word) main::idx_y#3 idx_y zp[2]:14 1.064516129032258 +(word) main::idx_y#1 idx_y zp[2]:32 11.0 +(word) main::idx_y#10 idx_y zp[2]:32 3.142857142857143 +(word) main::idx_y#3 idx_y zp[2]:32 1.064516129032258 (signed word) main::r -(signed word) main::r#1 r zp[2]:4 5.5 -(signed word) main::r#10 r zp[2]:4 1.2571428571428571 +(signed word) main::r#1 r zp[2]:2 5.5 +(signed word) main::r#10 r zp[2]:2 1.2571428571428571 (byte) main::r_add (byte) main::r_add#1 r_add zp[1]:23 22.0 (byte) main::r_add#10 r_add zp[1]:23 2.026315789473684 (byte) main::r_add#12 r_add zp[1]:23 16.5 (signed word) main::sin_y -(signed word) main::sin_y#0 sin_y zp[2]:36 11.0 +(signed word) main::sin_y#0 sin_y zp[2]:12 11.0 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return (const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP/(byte) 4&(byte) $f (byte*) main::toD0181_screen (word) main::x -(signed word) main::x#0 x zp[2]:28 0.8461538461538461 +(signed word) main::x#0 x zp[2]:17 0.8461538461538461 (signed dword) main::xpos -(signed dword) main::xpos#0 xpos zp[4]:10 22.0 +(signed dword) main::xpos#0 xpos zp[4]:8 22.0 (word) main::y (signed word) main::y#0 y zp[2]:19 11.0 (signed dword) main::ypos -(signed dword) main::ypos#0 ypos zp[4]:10 22.0 +(signed dword) main::ypos#0 ypos zp[4]:8 22.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -8579,16 +8522,16 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) memset::c (byte) memset::c#4 reg byte x 1.375 (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:14 22.0 -(byte*) memset::dst#2 dst zp[2]:14 15.333333333333332 -(byte*) memset::dst#4 dst zp[2]:14 4.0 +(byte*) memset::dst#1 dst zp[2]:2 22.0 +(byte*) memset::dst#2 dst zp[2]:2 15.333333333333332 +(byte*) memset::dst#4 dst zp[2]:2 4.0 (byte*) memset::end -(byte*) memset::end#0 end zp[2]:4 2.1666666666666665 +(byte*) memset::end#0 end zp[2]:14 2.1666666666666665 (word) memset::num -(word) memset::num#2 num zp[2]:4 2.0 +(word) memset::num#2 num zp[2]:14 2.0 (void*) memset::return (void*) memset::str -(void*) memset::str#3 str zp[2]:14 +(void*) memset::str#3 str zp[2]:2 (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) (word~) mul16s::$13 zp[2]:34 4.0 (word~) mul16s::$16 zp[2]:21 4.0 @@ -8601,25 +8544,25 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) mul16s::@5 (label) mul16s::@return (signed word) mul16s::a -(signed word) mul16s::a#0 a zp[2]:4 22.0 -(signed word) mul16s::a#1 a zp[2]:4 11.0 -(signed word) mul16s::a#2 a zp[2]:4 11.0 -(signed word) mul16s::a#3 a zp[2]:4 2.692307692307692 +(signed word) mul16s::a#0 a zp[2]:2 22.0 +(signed word) mul16s::a#1 a zp[2]:2 11.0 +(signed word) mul16s::a#2 a zp[2]:2 11.0 +(signed word) mul16s::a#3 a zp[2]:2 2.692307692307692 (signed word) mul16s::b -(signed word) mul16s::b#1 b zp[2]:36 22.0 -(signed word) mul16s::b#2 b zp[2]:36 22.0 -(signed word) mul16s::b#3 b zp[2]:36 2.1818181818181817 +(signed word) mul16s::b#1 b zp[2]:12 22.0 +(signed word) mul16s::b#2 b zp[2]:12 22.0 +(signed word) mul16s::b#3 b zp[2]:12 2.1818181818181817 (dword) mul16s::m -(dword) mul16s::m#0 m zp[4]:10 2.0 -(dword) mul16s::m#1 m zp[4]:10 4.0 -(dword) mul16s::m#2 m zp[4]:10 4.0 -(dword) mul16s::m#4 m zp[4]:10 4.0 -(dword) mul16s::m#5 m zp[4]:10 2.5 +(dword) mul16s::m#0 m zp[4]:8 2.0 +(dword) mul16s::m#1 m zp[4]:8 4.0 +(dword) mul16s::m#2 m zp[4]:8 4.0 +(dword) mul16s::m#4 m zp[4]:8 4.0 +(dword) mul16s::m#5 m zp[4]:8 2.5 (signed dword) mul16s::return -(signed dword) mul16s::return#0 return zp[4]:10 7.000000000000001 -(signed dword) mul16s::return#2 return zp[4]:10 22.0 -(signed dword) mul16s::return#3 return zp[4]:10 22.0 -(signed dword) mul16s::return#4 return zp[4]:10 22.0 +(signed dword) mul16s::return#0 return zp[4]:8 7.000000000000001 +(signed dword) mul16s::return#2 return zp[4]:8 22.0 +(signed dword) mul16s::return#3 return zp[4]:8 22.0 +(signed dword) mul16s::return#4 return zp[4]:8 22.0 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (byte~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 @@ -8632,53 +8575,54 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (word) mul16u::a#1 a zp[2]:21 2.0 (word) mul16u::a#2 a zp[2]:21 2.0 (word) mul16u::a#3 a zp[2]:21 67.66666666666666 -(word) mul16u::a#6 a zp[2]:21 6.0 +(word) mul16u::a#6 a zp[2]:21 3.0 (word) mul16u::b (word) mul16u::b#0 b zp[2]:19 4.0 -(word) mul16u::b#1 b_1 zp[2]:2 4.0 +(word) mul16u::b#1 b zp[2]:19 4.0 +(word) mul16u::b#2 b zp[2]:19 4.0 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:30 6.0 -(dword) mul16u::mb#1 mb zp[4]:30 202.0 -(dword) mul16u::mb#2 mb zp[4]:30 43.57142857142858 +(dword) mul16u::mb#0 mb zp[4]:28 4.0 +(dword) mul16u::mb#1 mb zp[4]:28 202.0 +(dword) mul16u::mb#2 mb zp[4]:28 43.57142857142858 (dword) mul16u::res -(dword) mul16u::res#1 res zp[4]:10 202.0 -(dword) mul16u::res#2 res zp[4]:10 43.85714285714286 -(dword) mul16u::res#6 res zp[4]:10 101.0 +(dword) mul16u::res#1 res zp[4]:8 202.0 +(dword) mul16u::res#2 res zp[4]:8 43.85714285714286 +(dword) mul16u::res#6 res zp[4]:8 101.0 (dword) mul16u::return -(dword) mul16u::return#2 return zp[4]:10 4.0 -(dword) mul16u::return#3 return zp[4]:10 4.0 +(dword) mul16u::return#2 return zp[4]:8 4.0 +(dword) mul16u::return#3 return zp[4]:8 4.0 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) -(dword~) mulu16_sel::$0 zp[4]:10 4.0 -(dword~) mulu16_sel::$1 zp[4]:10 4.0 +(dword~) mulu16_sel::$0 zp[4]:8 4.0 +(dword~) mulu16_sel::$1 zp[4]:8 4.0 (label) mulu16_sel::@1 (label) mulu16_sel::@return (word) mulu16_sel::return -(word) mulu16_sel::return#0 return zp[2]:36 4.0 -(word) mulu16_sel::return#1 return_1 zp[2]:19 4.0 -(word) mulu16_sel::return#10 return_1 zp[2]:19 4.0 -(word) mulu16_sel::return#11 return zp[2]:36 4.0 -(word) mulu16_sel::return#12 return zp[2]:36 1.714285714285714 -(word) mulu16_sel::return#2 return zp[2]:36 4.0 +(word) mulu16_sel::return#0 return zp[2]:32 4.0 +(word) mulu16_sel::return#1 return_1 zp[2]:12 4.0 +(word) mulu16_sel::return#10 return_1 zp[2]:12 4.0 +(word) mulu16_sel::return#11 return zp[2]:32 4.0 +(word) mulu16_sel::return#12 return zp[2]:32 1.714285714285714 +(word) mulu16_sel::return#2 return zp[2]:32 4.0 (byte) mulu16_sel::select (byte) mulu16_sel::select#5 reg byte x 0.3333333333333333 (word) mulu16_sel::v1 -(word) mulu16_sel::v1#0 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#1 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#2 v1 zp[2]:19 4.0 -(word) mulu16_sel::v1#3 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#4 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#5 v1 zp[2]:19 12.0 +(word) mulu16_sel::v1#0 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#1 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#2 v1 zp[2]:12 4.0 +(word) mulu16_sel::v1#3 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#4 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#5 v1 zp[2]:12 12.0 (word) mulu16_sel::v2 -(word) mulu16_sel::v2#0 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#1 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#3 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#4 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#5 v2 zp[2]:2 5.0 +(word) mulu16_sel::v2#0 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#1 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#3 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#4 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#5 v2 zp[2]:19 5.0 (const byte*) plots_per_frame[(number) $100] = { fill( $100, 0) } (word) rem16u -(word) rem16u#1 rem16u zp[2]:21 0.8 +(word) rem16u#1 rem16u zp[2]:19 0.8 (signed word()) sin16s((dword) sin16s::x) -(dword~) sin16s::$4 zp[4]:30 4.0 +(dword~) sin16s::$4 zp[4]:28 4.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 @@ -8695,37 +8639,37 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) sin16s::isUpper (byte) sin16s::isUpper#2 reg byte y 0.06060606060606061 (signed word) sin16s::return -(signed word) sin16s::return#0 return zp[2]:4 22.0 -(signed word) sin16s::return#1 return zp[2]:4 5.0 -(signed word) sin16s::return#5 return zp[2]:4 4.0 +(signed word) sin16s::return#0 return zp[2]:2 22.0 +(signed word) sin16s::return#1 return zp[2]:2 5.0 +(signed word) sin16s::return#5 return zp[2]:2 4.0 (signed word) sin16s::sinx -(signed word) sin16s::sinx#1 sinx zp[2]:4 4.0 +(signed word) sin16s::sinx#1 sinx zp[2]:2 4.0 (word) sin16s::usinx -(word) sin16s::usinx#0 usinx zp[2]:4 0.3333333333333333 -(word) sin16s::usinx#1 usinx zp[2]:4 1.0 +(word) sin16s::usinx#0 usinx zp[2]:2 0.3333333333333333 +(word) sin16s::usinx#1 usinx zp[2]:2 1.0 (dword) sin16s::x -(dword) sin16s::x#0 x zp[4]:10 8.5 -(dword) sin16s::x#1 x zp[4]:10 4.0 -(dword) sin16s::x#2 x zp[4]:10 4.0 -(dword) sin16s::x#4 x zp[4]:10 5.0 -(dword) sin16s::x#6 x zp[4]:10 6.0 +(dword) sin16s::x#0 x zp[4]:8 8.5 +(dword) sin16s::x#1 x zp[4]:8 4.0 +(dword) sin16s::x#2 x zp[4]:8 4.0 +(dword) sin16s::x#4 x zp[4]:8 5.0 +(dword) sin16s::x#6 x zp[4]:8 6.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp[2]:34 0.6363636363636365 (word) sin16s::x2 -(word) sin16s::x2#0 x2 zp[2]:19 4.0 +(word) sin16s::x2#0 x2 zp[2]:12 4.0 (word) sin16s::x3 -(word) sin16s::x3#0 x3 zp[2]:19 1.0 +(word) sin16s::x3#0 x3 zp[2]:12 1.0 (word) sin16s::x3_6 -(word) sin16s::x3_6#0 x3_6 zp[2]:36 4.0 +(word) sin16s::x3_6#0 x3_6 zp[2]:32 4.0 (word) sin16s::x4 -(word) sin16s::x4#0 x4 zp[2]:19 4.0 +(word) sin16s::x4#0 x4 zp[2]:12 4.0 (word) sin16s::x5 -(word) sin16s::x5#0 x5 zp[2]:36 4.0 +(word) sin16s::x5#0 x5 zp[2]:32 4.0 (word) sin16s::x5_128 -(word) sin16s::x5_128#0 x5_128 zp[2]:36 4.0 +(word) sin16s::x5_128#0 x5_128 zp[2]:32 4.0 (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) -(signed dword~) sin16s_gen2::$6 zp[4]:10 22.0 -(word~) sin16s_gen2::$9 zp[2]:28 11.0 +(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0 +(word~) sin16s_gen2::$9 zp[2]:34 11.0 (label) sin16s_gen2::@1 (label) sin16s_gen2::@2 (label) sin16s_gen2::@3 @@ -8743,50 +8687,49 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (const signed word) sin16s_gen2::min#0 min = (signed word) -$1001 (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0 +(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:17 7.333333333333333 +(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:17 3.0 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666 (word) sin16s_gen2::wavelength (const word) sin16s_gen2::wavelength#0 wavelength = (word) $200 (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 x zp[4]:6 11.0 -(dword) sin16s_gen2::x#2 x zp[4]:6 2.75 +(dword) sin16s_gen2::x#1 x zp[4]:4 11.0 +(dword) sin16s_gen2::x#2 x zp[4]:4 2.75 -zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] -zp[2]:4 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] +zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] reg byte x [ memset::c#4 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] -zp[4]:6 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] reg byte y [ sin16s::isUpper#2 ] -zp[4]:10 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] +zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] +zp[2]:12 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] reg byte x [ mulu16_sel::select#5 ] -zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp[1]:18 [ frame_cnt ] +zp[1]:16 [ frame_cnt ] +zp[2]:17 [ main::$7 main::$8 main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] reg byte x [ bitmap_plot::y#0 ] -zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] +zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] reg byte a [ bitmap_plot::$2 ] -zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] reg byte a [ mul16u::$1 ] zp[1]:23 [ bitmap_init::$7 main::r_add#10 main::r_add#12 main::r_add#1 ] reg byte a [ bitmap_init::$4 ] reg byte a [ bitmap_init::$5 ] reg byte a [ bitmap_init::$6 ] zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -zp[2]:28 [ sin16s_gen2::$9 main::$7 main::$8 main::x#0 bitmap_plot::x#0 ] -zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -zp[2]:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ] -zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] +zp[4]:28 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +zp[2]:32 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +zp[2]:34 [ div32u16u::quotient_hi#0 sin16s::x1#0 sin16s_gen2::$9 mul16s::$13 mul16s::$17 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 20613 +Score: 20853 // File Comments // Tests the simple bitmap plotter - and counts plots per frame in an IRQ @@ -8837,9 +8780,9 @@ Score: 20613 .const SIZEOF_SIGNED_WORD = 2 .label BITMAP = $2000 .label SCREEN = $400 - .label frame_cnt = $12 + .label frame_cnt = $10 // Remainder after unsigned 16-bit division - .label rem16u = $15 + .label rem16u = $13 // @begin // @1 __b1: @@ -8859,39 +8802,39 @@ __b1: // main main: { .const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f - .label __7 = $1c - .label __8 = $1c + .label __7 = $11 + .label __8 = $11 .label __13 = $13 .label __14 = $13 - .label __31 = $24 - .label __32 = $24 - .label cos_x = $24 - .label xpos = $a - .label x = $1c - .label sin_y = $24 - .label ypos = $a + .label __31 = $c + .label __32 = $c + .label cos_x = $c + .label xpos = 8 + .label x = $11 + .label sin_y = $c + .label ypos = 8 .label y = $13 - .label idx_x = 2 - .label idx_y = $e - .label r = 4 + .label idx_x = $e + .label idx_y = $20 + .label r = 2 .label r_add = $17 - .label __33 = $24 - .label __34 = $24 + .label __33 = $c + .label __34 = $c // sin16s_gen2(SINUS, 512, -0x1001, 0x1001) // [6] call sin16s_gen2 - // [137] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] + // [138] phi from main to sin16s_gen2 [phi:main->sin16s_gen2] jsr sin16s_gen2 // [7] phi from main to main::@9 [phi:main->main::@9] // main::@9 // bitmap_init(BITMAP, SCREEN) // [8] call bitmap_init - // [115] phi from main::@9 to bitmap_init [phi:main::@9->bitmap_init] + // [116] phi from main::@9 to bitmap_init [phi:main::@9->bitmap_init] jsr bitmap_init // [9] phi from main::@9 to main::@10 [phi:main::@9->main::@10] // main::@10 // bitmap_clear(BLACK, WHITE) // [10] call bitmap_clear - // [101] phi from main::@10 to bitmap_clear [phi:main::@10->bitmap_clear] + // [102] phi from main::@10 to bitmap_clear [phi:main::@10->bitmap_clear] jsr bitmap_clear // main::@11 // *D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3 @@ -8912,16 +8855,16 @@ main: { // [15] phi (byte) main::r_add#10 = (byte) $20 [phi:main::@8->main::@1#0] -- vbuz1=vbuc1 lda #$20 sta.z r_add - // [15] phi (word) main::idx_y#3 = (byte) $80 [phi:main::@8->main::@1#1] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_y#3 = (word) $80 [phi:main::@8->main::@1#1] -- vwuz1=vwuc1 lda #<$80 sta.z idx_y lda #>$80 sta.z idx_y+1 - // [15] phi (signed word) main::r#10 = (signed byte) 0 [phi:main::@8->main::@1#2] -- vwsz1=vbsc1 + // [15] phi (signed word) main::r#10 = (signed word) 0 [phi:main::@8->main::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z r sta.z r+1 - // [15] phi (word) main::idx_x#11 = (byte) 0 [phi:main::@8->main::@1#3] -- vwuz1=vbuc1 + // [15] phi (word) main::idx_x#11 = (word) 0 [phi:main::@8->main::@1#3] -- vwuz1=vwuc1 sta.z idx_x sta.z idx_x+1 // main::@1 @@ -9179,11 +9122,11 @@ main: { } // bitmap_plot // Plot a single dot in the bitmap -// bitmap_plot(word zp($1c) x, byte register(X) y) +// bitmap_plot(word zp($11) x, byte register(X) y) bitmap_plot: { .label __1 = $15 .label plotter = $13 - .label x = $1c + .label x = $11 // (byte*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] } // [57] (word) bitmap_plot::plotter#0 ← *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#0) w= *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#0) -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx lda bitmap_plot_yhi,x @@ -9225,16 +9168,16 @@ bitmap_plot: { // mul16s // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp(4) a, signed word zp($24) b) +// mul16s(signed word zp(2) a, signed word zp($c) b) mul16s: { .label __9 = $15 .label __13 = $22 .label __16 = $15 .label __17 = $22 - .label m = $a - .label return = $a - .label a = 4 - .label b = $24 + .label m = 8 + .label return = 8 + .label a = 2 + .label b = $c // mul16u((word)a, (word) b) // [64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3 -- vwuz1=vwuz2 lda.z a @@ -9249,14 +9192,7 @@ mul16s: { // [66] call mul16u // [81] phi from mul16s to mul16u [phi:mul16s->mul16u] // [81] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [81] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [81] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // mul16u((word)a, (word) b) // [67] (dword) mul16u::return#2 ← (dword) mul16u::res#2 @@ -9332,46 +9268,55 @@ mul16s: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($15) a, word zp($13) b) mul16u: { - .label mb = $1e + .label mb = $1c .label a = $15 - .label res = $a + .label res = 8 .label b = $13 - .label return = $a - .label b_1 = 2 - // [82] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [82] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [82] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + .label return = 8 + // mb = b + // [82] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 + // [83] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [83] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [83] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [82] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [83] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 __b1: // while(a!=0) - // [83] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [84] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 // mul16u::@return // } - // [84] return + // [85] return rts // mul16u::@2 __b2: // a&1 - // [85] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [86] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // if( (a&1) != 0) - // [86] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [87] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul16u::@4 // res = res + mb - // [87] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [88] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -9385,24 +9330,24 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [88] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - // [88] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [89] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [89] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy // mul16u::@3 __b3: // a = a>>1 - // [89] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [90] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // mb = mb<<1 - // [90] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [91] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [82] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - // [82] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [82] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [82] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [83] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [83] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [83] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [83] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // init_irq @@ -9412,36 +9357,36 @@ init_irq: { // asm { sei } sei // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK - // [92] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [93] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR // *PROCPORT = PROCPORT_RAM_IO - // [93] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [94] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // *CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR - // [94] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [95] *((const byte*) CIA1_INTERRUPT) ← (const byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1_INTERRUPT // *VIC_CONTROL |=$80 - // [95] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 + // [96] *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (byte) $80 -- _deref_pbuc1=_deref_pbuc1_bor_vbuc2 // Set raster line to $100 lda #$80 ora VIC_CONTROL sta VIC_CONTROL // *RASTER = $00 - // [96] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [97] *((const byte*) RASTER) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta RASTER // *IRQ_ENABLE = IRQ_RASTER - // [97] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [98] *((const byte*) IRQ_ENABLE) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE // *HARDWARE_IRQ = &irq - // [98] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 + // [99] *((const void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #memset] - // [106] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 + // [103] call memset + // [107] phi from bitmap_clear to memset [phi:bitmap_clear->memset] + // [107] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 ldx #col - // [106] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [107] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [106] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [107] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [103] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [104] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] // bitmap_clear::@1 // memset(bitmap_gfx, 0, 8000uw) - // [104] call memset - // [106] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] - // [106] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 + // [105] call memset + // [107] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [107] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 ldx #0 - // [106] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [107] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [106] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [107] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -9497,19 +9442,19 @@ bitmap_clear: { jsr memset // bitmap_clear::@return // } - // [105] return + // [106] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// memset(void* zp($e) str, byte register(X) c, word zp(4) num) +// memset(void* zp(2) str, byte register(X) c, word zp($e) num) memset: { - .label end = 4 - .label dst = $e - .label num = 4 - .label str = $e + .label end = $e + .label dst = 2 + .label num = $e + .label str = 2 // if(num>0) - // [107] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [108] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -9517,7 +9462,7 @@ memset: { !: // memset::@1 // end = (char*)str + num - // [108] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [109] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda.z end clc adc.z str @@ -9525,13 +9470,13 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [109] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [110] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [110] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [110] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [111] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [111] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) - // [111] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [112] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -9541,17 +9486,17 @@ memset: { // memset::@return __breturn: // } - // [112] return + // [113] return rts // memset::@3 __b3: // *dst = c - // [113] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [114] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [114] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [115] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -9562,82 +9507,82 @@ memset: { // Initialize bitmap plotting tables bitmap_init: { .label __7 = $17 - .label yoffs = $24 - // [116] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] - // [116] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + .label yoffs = $20 + // [117] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + // [117] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [116] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + // [117] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 - // [116] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] - // [116] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [116] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [117] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [117] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [117] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy // bitmap_init::@1 __b1: // bitmap_plot_bit[x] = bits - // [117] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa + // [118] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x // bits >>= 1 - // [118] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // [119] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 lsr // if(bits==0) - // [119] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 + // [120] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b2 - // [121] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] - // [121] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + // [122] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [122] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 - // [120] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [121] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] // bitmap_init::@6 - // [121] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] - // [121] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [122] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [122] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy // bitmap_init::@2 __b2: // for(byte x : 0..255) - // [122] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx + // [123] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx inx - // [123] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 + // [124] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1 - // [124] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] - // [124] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [125] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [125] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [124] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + // [125] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 - // [124] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] - // [124] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [124] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [125] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [125] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [125] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy // bitmap_init::@3 __b3: // y&$7 - // [125] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [126] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __7 // yoffs - // [129] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 + // [130] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 lda.z yoffs+1 // bitmap_plot_yhi[y] = >yoffs - // [130] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [131] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x // if((y&$7)==7) - // [131] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [132] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4 // bitmap_init::@5 // yoffs = yoffs + 40*8 - // [132] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [133] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -9645,68 +9590,71 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [133] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] - // [133] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [134] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [134] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy // bitmap_init::@4 __b4: // for(byte y : 0..255) - // [134] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx + // [135] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx inx - // [135] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 + // [136] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3 // bitmap_init::@return // } - // [136] return + // [137] return rts } // sin16s_gen2 // Generate signed word sinus table - with values in the range min-max. // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen2(signed word* zp($10) sintab) +// sin16s_gen2(signed word* zp($11) sintab) sin16s_gen2: { .label wavelength = $200 .const min = -$1001 .const max = $1001 .const ampl = max-min - .label __6 = $a - .label __9 = $1c + .label __6 = 8 + .label __9 = $22 .label step = $18 - .label sintab = $10 + .label sintab = $11 // u[4.28] // Iterate over the table - .label x = 6 + .label x = 4 .label i = $e // div32u16u(PI2_u4f28, wavelength) - // [138] call div32u16u - // [205] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [139] call div32u16u + // [206] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] jsr div32u16u // div32u16u(PI2_u4f28, wavelength) - // [139] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 + // [140] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 // sin16s_gen2::@3 // step = div32u16u(PI2_u4f28, wavelength) - // [140] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 - // [141] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 + // [141] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 + // [142] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1] + // [142] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) SINUS [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 lda #SINUS sta.z sintab+1 - // [141] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [142] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [141] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [142] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] // sin16s_gen2::@1 __b1: // for( word i=0; iwavelength bcc __b2 @@ -9717,12 +9665,12 @@ sin16s_gen2: { !: // sin16s_gen2::@return // } - // [143] return + // [144] return rts // sin16s_gen2::@2 __b2: // sin16s(x) - // [144] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 + // [145] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 lda.z x sta.z sin16s.x lda.z x+1 @@ -9731,13 +9679,13 @@ sin16s_gen2: { sta.z sin16s.x+2 lda.z x+3 sta.z sin16s.x+3 - // [145] call sin16s + // [146] call sin16s jsr sin16s - // [146] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 + // [147] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 // sin16s_gen2::@4 // mul16s(sin16s(x), ampl) - // [147] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 - // [148] call mul16s + // [148] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 + // [149] call mul16s // [63] phi from sin16s_gen2::@4 to mul16s [phi:sin16s_gen2::@4->mul16s] // [63] phi (signed word) mul16s::b#3 = (const signed word) sin16s_gen2::ampl#0 [phi:sin16s_gen2::@4->mul16s#0] -- vwsz1=vwsc1 lda #mul16s#1] -- register_copy jsr mul16s // mul16s(sin16s(x), ampl) - // [149] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 + // [150] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 // sin16s_gen2::@5 - // [150] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 + // [151] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 // >mul16s(sin16s(x), ampl) - // [151] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 + // [152] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 lda.z __6+2 sta.z __9 lda.z __6+3 sta.z __9+1 // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl) - // [152] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 + // [153] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __9 sta (sintab),y @@ -9765,7 +9713,7 @@ sin16s_gen2: { lda.z __9+1 sta (sintab),y // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); - // [153] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 + // [154] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab @@ -9774,7 +9722,7 @@ sin16s_gen2: { inc.z sintab+1 !: // x = x + step - // [154] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 + // [155] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step @@ -9789,37 +9737,37 @@ sin16s_gen2: { adc.z step+3 sta.z x+3 // for( word i=0; isin16s_gen2::@1] - // [141] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy - // [141] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy - // [141] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy + // [142] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1] + // [142] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy + // [142] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy + // [142] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp($a) x) +// sin16s(dword zp(8) x) sin16s: { - .label __4 = $1e - .label x = $a - .label return = 4 + .label __4 = $1c + .label x = 8 + .label return = 2 .label x1 = $22 - .label x2 = $13 - .label x3 = $13 - .label x3_6 = $24 - .label usinx = 4 - .label x4 = $13 - .label x5 = $24 - .label x5_128 = $24 - .label sinx = 4 + .label x2 = $c + .label x3 = $c + .label x3_6 = $20 + .label usinx = 2 + .label x4 = $c + .label x5 = $20 + .label x5_128 = $20 + .label sinx = 2 // if(x >= PI_u4f28 ) - // [156] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [157] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc b1 @@ -9838,7 +9786,7 @@ sin16s: { !: // sin16s::@4 // x = x - PI_u4f28 - // [157] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [158] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [158] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] - // [158] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [159] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [159] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [158] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [159] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [158] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [159] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] b1: - // [158] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [159] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [158] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [159] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy // sin16s::@1 __b1: // if(x >= PI_HALF_u4f28 ) - // [159] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [160] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2 @@ -9884,7 +9832,7 @@ sin16s: { !: // sin16s::@5 // x = PI_u4f28 - x - // [160] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [161] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [161] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] - // [161] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [162] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [162] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy // sin16s::@2 __b2: // x<<3 - // [162] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [163] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -9925,81 +9873,81 @@ sin16s: { rol.z __4+2 rol.z __4+3 // x1 = >x<<3 - // [163] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [164] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // mulu16_sel(x1, x1, 0) - // [164] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [165] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [165] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [166] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [166] call mulu16_sel - // [196] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [167] call mulu16_sel + // [197] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x1, x1, 0) - // [167] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [168] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 // sin16s::@7 // x2 = mulu16_sel(x1, x1, 0) - // [168] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [169] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 // mulu16_sel(x2, x1, 1) - // [169] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [170] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [170] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [171] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [171] call mulu16_sel - // [196] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] - // [196] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [172] call mulu16_sel + // [197] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [197] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x2, x1, 1) - // [172] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [173] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@8 // x3 = mulu16_sel(x2, x1, 1) - // [173] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [174] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 // mulu16_sel(x3, $10000/6, 1) - // [174] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [175] call mulu16_sel - // [196] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] - // [196] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [175] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [176] call mulu16_sel + // [197] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [197] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [196] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [197] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, $10000/6, 1) - // [176] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [177] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 // sin16s::@9 // x3_6 = mulu16_sel(x3, $10000/6, 1) - // [177] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [178] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 // usinx = x1 - x3_6 - // [178] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [179] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -10008,49 +9956,49 @@ sin16s: { sbc.z x3_6+1 sta.z usinx+1 // mulu16_sel(x3, x1, 0) - // [179] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [180] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [180] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [181] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [181] call mulu16_sel - // [196] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [182] call mulu16_sel + // [197] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, x1, 0) - // [182] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [183] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@10 // x4 = mulu16_sel(x3, x1, 0) - // [183] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [184] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 // mulu16_sel(x4, x1, 0) - // [184] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [185] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [185] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [186] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [186] call mulu16_sel - // [196] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] - // [196] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [187] call mulu16_sel + // [197] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [197] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [196] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [197] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [197] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x4, x1, 0) - // [187] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [188] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 // sin16s::@11 // x5 = mulu16_sel(x4, x1, 0) - // [188] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [189] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 // x5_128 = x5>>4 - // [189] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [190] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -10060,7 +10008,7 @@ sin16s: { lsr.z x5_128+1 ror.z x5_128 // usinx = usinx + x5_128 - // [190] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [191] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -10069,12 +10017,12 @@ sin16s: { adc.z x5_128+1 sta.z usinx+1 // if(isUpper!=0) - // [191] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [192] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b3 // sin16s::@6 // sinx = -(signed word)usinx - // [192] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [193] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -10082,53 +10030,46 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [193] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] - // [193] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [194] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [194] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy // sin16s::@3 __b3: // sin16s::@return // } - // [194] return + // [195] return rts // sin16s::@12 - // [195] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [196] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 } // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zp($13) v1, word zp(2) v2, byte register(X) select) +// mulu16_sel(word zp($c) v1, word zp($13) v2, byte register(X) select) mulu16_sel: { - .label __0 = $a - .label __1 = $a - .label v1 = $13 - .label v2 = 2 - .label return = $24 - .label return_1 = $13 + .label __0 = 8 + .label __1 = 8 + .label v1 = $c + .label v2 = $13 + .label return = $20 + .label return_1 = $c // mul16u(v1, v2) - // [197] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [198] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [199] call mul16u + // [199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [200] call mul16u // [81] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] // [81] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [81] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [81] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u // mul16u(v1, v2) - // [200] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [201] (dword) mul16u::return#3 ← (dword) mul16u::res#2 // mulu16_sel::@1 - // [201] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [202] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 // mul16u(v1, v2)< (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [204] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 sta.z return+1 // mulu16_sel::@return // } - // [204] return + // [205] return rts } // div32u16u // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $24 - .label quotient_lo = $10 + .label quotient_hi = $22 + .label quotient_lo = $e .label return = $18 // divr16u(>dividend, divisor, 0) - // [206] call divr16u - // [215] phi from div32u16u to divr16u [phi:div32u16u->divr16u] - // [215] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [207] call divr16u + // [216] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [216] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [215] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [216] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 jsr divr16u // divr16u(>dividend, divisor, 0) - // [207] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [208] (word) divr16u::return#2 ← (word) divr16u::return#0 // div32u16u::@1 // quotient_hi = divr16u(>dividend, divisor, 0) - // [208] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [209] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 // divr16u(divr16u] - // [215] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [210] (word) divr16u::rem#4 ← (word) rem16u#1 + // [211] call divr16u + // [216] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [216] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [215] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [216] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // divr16u(divr16u::@1] - // [216] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + .label rem = $13 + .label dividend = $15 + .label quotient = $e + .label return = $e + // [217] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [217] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [216] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [217] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 - // [216] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [216] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy - // [216] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [216] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [216] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [216] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [216] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [217] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [217] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [217] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [217] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [217] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [217] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [217] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 __b1: // rem = rem << 1 - // [217] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [218] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // >dividend - // [218] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [219] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // >dividend & $80 - // [219] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [220] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) - // [220] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [221] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2 // divr16u::@4 // rem = rem | 1 - // [221] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [222] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [222] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [222] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [223] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [223] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 __b2: // dividend = dividend << 1 - // [223] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [224] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // quotient = quotient << 1 - // [224] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [225] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // if(rem>=divisor) - // [225] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [226] if((word) divr16u::rem#6<(const word) sin16s_gen2::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>sin16s_gen2.wavelength bcc __b3 @@ -10281,13 +10222,13 @@ divr16u: { !: // divr16u::@5 // quotient++; - // [226] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [227] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: // rem = rem - divisor - // [227] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 + // [228] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) sin16s_gen2::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #sin16s_gen2.wavelength sta.z rem+1 - // [228] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - // [228] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [228] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [229] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [229] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [229] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 __b3: // for( byte i : 0..15) - // [229] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [230] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [230] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [231] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1 // divr16u::@6 // rem16u = rem - // [231] (word) rem16u#1 ← (word) divr16u::rem#11 + // [232] (word) rem16u#1 ← (word) divr16u::rem#11 // divr16u::@return // } - // [232] return + // [233] return rts } // irq @@ -10320,32 +10261,32 @@ irq: { // entry interrupt(HARDWARE_CLOBBER) sta rega+1 // *BGCOL = WHITE - // [233] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 + // [234] *((const byte*) BGCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 lda #WHITE sta BGCOL // if(frame_cnt) - // [234] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 + // [235] if((byte) 0==(byte) frame_cnt) goto irq::@1 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z frame_cnt beq __b1 // irq::@2 // frame_cnt++; - // [235] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 + // [236] (byte) frame_cnt ← ++ (byte) frame_cnt -- vbuz1=_inc_vbuz1 inc.z frame_cnt // irq::@1 __b1: // *BGCOL = BLACK - // [236] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 + // [237] *((const byte*) BGCOL) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL // *IRQ_STATUS = IRQ_RASTER - // [237] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [238] *((const byte*) IRQ_STATUS) ← (const byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ lda #IRQ_RASTER sta IRQ_STATUS // irq::@return // } - // [238] return - exit interrupt(HARDWARE_CLOBBER) + // [239] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 rti diff --git a/src/test/ref/bitmap-plot-2.sym b/src/test/ref/bitmap-plot-2.sym index 6048acfd2..63229e477 100644 --- a/src/test/ref/bitmap-plot-2.sym +++ b/src/test/ref/bitmap-plot-2.sym @@ -4,32 +4,32 @@ (label) @end (const byte*) BGCOL = (byte*) 53281 (const byte*) BITMAP = (byte*) 8192 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const signed word*) SINUS[(number) $200] = { fill( $200, 0) } (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -63,9 +63,9 @@ (byte) bitmap_init::y#1 reg byte x 16.5 (byte) bitmap_init::y#2 reg byte x 5.5 (byte*) bitmap_init::yoffs -(byte*) bitmap_init::yoffs#1 yoffs zp[2]:36 22.0 -(byte*) bitmap_init::yoffs#2 yoffs zp[2]:36 6.875 -(byte*) bitmap_init::yoffs#4 yoffs zp[2]:36 11.0 +(byte*) bitmap_init::yoffs#1 yoffs zp[2]:32 22.0 +(byte*) bitmap_init::yoffs#2 yoffs zp[2]:32 6.875 +(byte*) bitmap_init::yoffs#4 yoffs zp[2]:32 11.0 (void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y) (word~) bitmap_plot::$1 zp[2]:21 4.0 (byte~) bitmap_plot::$2 reg byte a 4.0 @@ -74,7 +74,7 @@ (word) bitmap_plot::plotter#0 plotter zp[2]:19 1.0 (byte*) bitmap_plot::plotter#1 plotter zp[2]:19 3.0 (word) bitmap_plot::x -(word) bitmap_plot::x#0 x zp[2]:28 3.75 +(word) bitmap_plot::x#0 x zp[2]:17 3.75 (byte) bitmap_plot::y (byte) bitmap_plot::y#0 reg byte x 7.5 (const byte*) bitmap_plot_bit[(number) $100] = { fill( $100, 0) } @@ -89,9 +89,9 @@ (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi -(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:36 0.8 +(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:34 0.8 (word) div32u16u::quotient_lo -(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0 +(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:14 4.0 (dword) div32u16u::return (dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333 (dword) div32u16u::return#2 return zp[4]:24 4.0 @@ -106,31 +106,31 @@ (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend -(word) divr16u::dividend#0 dividend zp[2]:14 2.75 -(word) divr16u::dividend#3 dividend zp[2]:14 5.0 -(word) divr16u::dividend#5 dividend zp[2]:14 2.0 +(word) divr16u::dividend#0 dividend zp[2]:21 2.75 +(word) divr16u::dividend#3 dividend zp[2]:21 5.0 +(word) divr16u::dividend#5 dividend zp[2]:21 2.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 16.5 (byte) divr16u::i#2 reg byte x 1.6923076923076923 (word) divr16u::quotient -(word) divr16u::quotient#1 quotient zp[2]:16 16.5 -(word) divr16u::quotient#2 quotient zp[2]:16 11.0 -(word) divr16u::quotient#3 quotient zp[2]:16 2.75 +(word) divr16u::quotient#1 quotient zp[2]:14 16.5 +(word) divr16u::quotient#2 quotient zp[2]:14 11.0 +(word) divr16u::quotient#3 quotient zp[2]:14 2.75 (word) divr16u::rem -(word) divr16u::rem#0 rem zp[2]:21 8.25 -(word) divr16u::rem#1 rem zp[2]:21 22.0 -(word) divr16u::rem#10 rem zp[2]:21 4.0 -(word) divr16u::rem#11 rem zp[2]:21 11.666666666666666 -(word) divr16u::rem#2 rem zp[2]:21 22.0 -(word) divr16u::rem#4 rem zp[2]:21 4.0 -(word) divr16u::rem#5 rem zp[2]:21 24.0 -(word) divr16u::rem#6 rem zp[2]:21 11.0 +(word) divr16u::rem#0 rem zp[2]:19 8.25 +(word) divr16u::rem#1 rem zp[2]:19 22.0 +(word) divr16u::rem#10 rem zp[2]:19 4.0 +(word) divr16u::rem#11 rem zp[2]:19 11.666666666666666 +(word) divr16u::rem#2 rem zp[2]:19 22.0 +(word) divr16u::rem#4 rem zp[2]:19 4.0 +(word) divr16u::rem#5 rem zp[2]:19 24.0 +(word) divr16u::rem#6 rem zp[2]:19 11.0 (word) divr16u::return -(word) divr16u::return#0 return zp[2]:16 5.285714285714286 -(word) divr16u::return#2 return zp[2]:16 4.0 -(word) divr16u::return#3 return zp[2]:16 4.0 -(byte) frame_cnt loadstore zp[1]:18 0.5555555555555556 +(word) divr16u::return#0 return zp[2]:14 5.285714285714286 +(word) divr16u::return#2 return zp[2]:14 4.0 +(word) divr16u::return#3 return zp[2]:14 4.0 +(byte) frame_cnt loadstore zp[1]:16 0.5555555555555556 (void()) init_irq() (label) init_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() @@ -140,12 +140,12 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() (word~) main::$13 zp[2]:19 11.0 (signed word~) main::$14 zp[2]:19 22.0 -(word~) main::$31 zp[2]:36 22.0 -(word~) main::$32 zp[2]:36 22.0 -(signed word*~) main::$33 zp[2]:36 22.0 -(signed word*~) main::$34 zp[2]:36 22.0 -(word~) main::$7 zp[2]:28 11.0 -(signed word~) main::$8 zp[2]:28 22.0 +(word~) main::$31 zp[2]:12 22.0 +(word~) main::$32 zp[2]:12 22.0 +(signed word*~) main::$33 zp[2]:12 22.0 +(signed word*~) main::$34 zp[2]:12 22.0 +(word~) main::$7 zp[2]:17 11.0 +(signed word~) main::$8 zp[2]:17 22.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -164,37 +164,37 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) main::@8 (label) main::@9 (signed word) main::cos_x -(signed word) main::cos_x#0 cos_x zp[2]:36 11.0 +(signed word) main::cos_x#0 cos_x zp[2]:12 11.0 (word) main::idx_x -(word) main::idx_x#1 idx_x zp[2]:2 11.0 -(word) main::idx_x#10 idx_x zp[2]:2 3.0 -(word) main::idx_x#11 idx_x zp[2]:2 1.222222222222222 +(word) main::idx_x#1 idx_x zp[2]:14 11.0 +(word) main::idx_x#10 idx_x zp[2]:14 3.0 +(word) main::idx_x#11 idx_x zp[2]:14 1.222222222222222 (word) main::idx_y -(word) main::idx_y#1 idx_y zp[2]:14 11.0 -(word) main::idx_y#10 idx_y zp[2]:14 3.142857142857143 -(word) main::idx_y#3 idx_y zp[2]:14 1.064516129032258 +(word) main::idx_y#1 idx_y zp[2]:32 11.0 +(word) main::idx_y#10 idx_y zp[2]:32 3.142857142857143 +(word) main::idx_y#3 idx_y zp[2]:32 1.064516129032258 (signed word) main::r -(signed word) main::r#1 r zp[2]:4 5.5 -(signed word) main::r#10 r zp[2]:4 1.2571428571428571 +(signed word) main::r#1 r zp[2]:2 5.5 +(signed word) main::r#10 r zp[2]:2 1.2571428571428571 (byte) main::r_add (byte) main::r_add#1 r_add zp[1]:23 22.0 (byte) main::r_add#10 r_add zp[1]:23 2.026315789473684 (byte) main::r_add#12 r_add zp[1]:23 16.5 (signed word) main::sin_y -(signed word) main::sin_y#0 sin_y zp[2]:36 11.0 +(signed word) main::sin_y#0 sin_y zp[2]:12 11.0 (label) main::toD0181 (byte*) main::toD0181_gfx (byte) main::toD0181_return (const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP/(byte) 4&(byte) $f (byte*) main::toD0181_screen (word) main::x -(signed word) main::x#0 x zp[2]:28 0.8461538461538461 +(signed word) main::x#0 x zp[2]:17 0.8461538461538461 (signed dword) main::xpos -(signed dword) main::xpos#0 xpos zp[4]:10 22.0 +(signed dword) main::xpos#0 xpos zp[4]:8 22.0 (word) main::y (signed word) main::y#0 y zp[2]:19 11.0 (signed dword) main::ypos -(signed dword) main::ypos#0 ypos zp[4]:10 22.0 +(signed dword) main::ypos#0 ypos zp[4]:8 22.0 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 @@ -203,16 +203,16 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) memset::c (byte) memset::c#4 reg byte x 1.375 (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:14 22.0 -(byte*) memset::dst#2 dst zp[2]:14 15.333333333333332 -(byte*) memset::dst#4 dst zp[2]:14 4.0 +(byte*) memset::dst#1 dst zp[2]:2 22.0 +(byte*) memset::dst#2 dst zp[2]:2 15.333333333333332 +(byte*) memset::dst#4 dst zp[2]:2 4.0 (byte*) memset::end -(byte*) memset::end#0 end zp[2]:4 2.1666666666666665 +(byte*) memset::end#0 end zp[2]:14 2.1666666666666665 (word) memset::num -(word) memset::num#2 num zp[2]:4 2.0 +(word) memset::num#2 num zp[2]:14 2.0 (void*) memset::return (void*) memset::str -(void*) memset::str#3 str zp[2]:14 +(void*) memset::str#3 str zp[2]:2 (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) (word~) mul16s::$13 zp[2]:34 4.0 (word~) mul16s::$16 zp[2]:21 4.0 @@ -225,25 +225,25 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (label) mul16s::@5 (label) mul16s::@return (signed word) mul16s::a -(signed word) mul16s::a#0 a zp[2]:4 22.0 -(signed word) mul16s::a#1 a zp[2]:4 11.0 -(signed word) mul16s::a#2 a zp[2]:4 11.0 -(signed word) mul16s::a#3 a zp[2]:4 2.692307692307692 +(signed word) mul16s::a#0 a zp[2]:2 22.0 +(signed word) mul16s::a#1 a zp[2]:2 11.0 +(signed word) mul16s::a#2 a zp[2]:2 11.0 +(signed word) mul16s::a#3 a zp[2]:2 2.692307692307692 (signed word) mul16s::b -(signed word) mul16s::b#1 b zp[2]:36 22.0 -(signed word) mul16s::b#2 b zp[2]:36 22.0 -(signed word) mul16s::b#3 b zp[2]:36 2.1818181818181817 +(signed word) mul16s::b#1 b zp[2]:12 22.0 +(signed word) mul16s::b#2 b zp[2]:12 22.0 +(signed word) mul16s::b#3 b zp[2]:12 2.1818181818181817 (dword) mul16s::m -(dword) mul16s::m#0 m zp[4]:10 2.0 -(dword) mul16s::m#1 m zp[4]:10 4.0 -(dword) mul16s::m#2 m zp[4]:10 4.0 -(dword) mul16s::m#4 m zp[4]:10 4.0 -(dword) mul16s::m#5 m zp[4]:10 2.5 +(dword) mul16s::m#0 m zp[4]:8 2.0 +(dword) mul16s::m#1 m zp[4]:8 4.0 +(dword) mul16s::m#2 m zp[4]:8 4.0 +(dword) mul16s::m#4 m zp[4]:8 4.0 +(dword) mul16s::m#5 m zp[4]:8 2.5 (signed dword) mul16s::return -(signed dword) mul16s::return#0 return zp[4]:10 7.000000000000001 -(signed dword) mul16s::return#2 return zp[4]:10 22.0 -(signed dword) mul16s::return#3 return zp[4]:10 22.0 -(signed dword) mul16s::return#4 return zp[4]:10 22.0 +(signed dword) mul16s::return#0 return zp[4]:8 7.000000000000001 +(signed dword) mul16s::return#2 return zp[4]:8 22.0 +(signed dword) mul16s::return#3 return zp[4]:8 22.0 +(signed dword) mul16s::return#4 return zp[4]:8 22.0 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (byte~) mul16u::$1 reg byte a 202.0 (label) mul16u::@1 @@ -256,53 +256,54 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (word) mul16u::a#1 a zp[2]:21 2.0 (word) mul16u::a#2 a zp[2]:21 2.0 (word) mul16u::a#3 a zp[2]:21 67.66666666666666 -(word) mul16u::a#6 a zp[2]:21 6.0 +(word) mul16u::a#6 a zp[2]:21 3.0 (word) mul16u::b (word) mul16u::b#0 b zp[2]:19 4.0 -(word) mul16u::b#1 b_1 zp[2]:2 4.0 +(word) mul16u::b#1 b zp[2]:19 4.0 +(word) mul16u::b#2 b zp[2]:19 4.0 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:30 6.0 -(dword) mul16u::mb#1 mb zp[4]:30 202.0 -(dword) mul16u::mb#2 mb zp[4]:30 43.57142857142858 +(dword) mul16u::mb#0 mb zp[4]:28 4.0 +(dword) mul16u::mb#1 mb zp[4]:28 202.0 +(dword) mul16u::mb#2 mb zp[4]:28 43.57142857142858 (dword) mul16u::res -(dword) mul16u::res#1 res zp[4]:10 202.0 -(dword) mul16u::res#2 res zp[4]:10 43.85714285714286 -(dword) mul16u::res#6 res zp[4]:10 101.0 +(dword) mul16u::res#1 res zp[4]:8 202.0 +(dword) mul16u::res#2 res zp[4]:8 43.85714285714286 +(dword) mul16u::res#6 res zp[4]:8 101.0 (dword) mul16u::return -(dword) mul16u::return#2 return zp[4]:10 4.0 -(dword) mul16u::return#3 return zp[4]:10 4.0 +(dword) mul16u::return#2 return zp[4]:8 4.0 +(dword) mul16u::return#3 return zp[4]:8 4.0 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) -(dword~) mulu16_sel::$0 zp[4]:10 4.0 -(dword~) mulu16_sel::$1 zp[4]:10 4.0 +(dword~) mulu16_sel::$0 zp[4]:8 4.0 +(dword~) mulu16_sel::$1 zp[4]:8 4.0 (label) mulu16_sel::@1 (label) mulu16_sel::@return (word) mulu16_sel::return -(word) mulu16_sel::return#0 return zp[2]:36 4.0 -(word) mulu16_sel::return#1 return_1 zp[2]:19 4.0 -(word) mulu16_sel::return#10 return_1 zp[2]:19 4.0 -(word) mulu16_sel::return#11 return zp[2]:36 4.0 -(word) mulu16_sel::return#12 return zp[2]:36 1.714285714285714 -(word) mulu16_sel::return#2 return zp[2]:36 4.0 +(word) mulu16_sel::return#0 return zp[2]:32 4.0 +(word) mulu16_sel::return#1 return_1 zp[2]:12 4.0 +(word) mulu16_sel::return#10 return_1 zp[2]:12 4.0 +(word) mulu16_sel::return#11 return zp[2]:32 4.0 +(word) mulu16_sel::return#12 return zp[2]:32 1.714285714285714 +(word) mulu16_sel::return#2 return zp[2]:32 4.0 (byte) mulu16_sel::select (byte) mulu16_sel::select#5 reg byte x 0.3333333333333333 (word) mulu16_sel::v1 -(word) mulu16_sel::v1#0 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#1 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#2 v1 zp[2]:19 4.0 -(word) mulu16_sel::v1#3 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#4 v1 zp[2]:19 2.0 -(word) mulu16_sel::v1#5 v1 zp[2]:19 12.0 +(word) mulu16_sel::v1#0 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#1 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#2 v1 zp[2]:12 4.0 +(word) mulu16_sel::v1#3 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#4 v1 zp[2]:12 2.0 +(word) mulu16_sel::v1#5 v1 zp[2]:12 12.0 (word) mulu16_sel::v2 -(word) mulu16_sel::v2#0 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#1 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#3 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#4 v2 zp[2]:2 4.0 -(word) mulu16_sel::v2#5 v2 zp[2]:2 5.0 +(word) mulu16_sel::v2#0 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#1 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#3 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#4 v2 zp[2]:19 4.0 +(word) mulu16_sel::v2#5 v2 zp[2]:19 5.0 (const byte*) plots_per_frame[(number) $100] = { fill( $100, 0) } (word) rem16u -(word) rem16u#1 rem16u zp[2]:21 0.8 +(word) rem16u#1 rem16u zp[2]:19 0.8 (signed word()) sin16s((dword) sin16s::x) -(dword~) sin16s::$4 zp[4]:30 4.0 +(dword~) sin16s::$4 zp[4]:28 4.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 @@ -319,37 +320,37 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (byte) sin16s::isUpper (byte) sin16s::isUpper#2 reg byte y 0.06060606060606061 (signed word) sin16s::return -(signed word) sin16s::return#0 return zp[2]:4 22.0 -(signed word) sin16s::return#1 return zp[2]:4 5.0 -(signed word) sin16s::return#5 return zp[2]:4 4.0 +(signed word) sin16s::return#0 return zp[2]:2 22.0 +(signed word) sin16s::return#1 return zp[2]:2 5.0 +(signed word) sin16s::return#5 return zp[2]:2 4.0 (signed word) sin16s::sinx -(signed word) sin16s::sinx#1 sinx zp[2]:4 4.0 +(signed word) sin16s::sinx#1 sinx zp[2]:2 4.0 (word) sin16s::usinx -(word) sin16s::usinx#0 usinx zp[2]:4 0.3333333333333333 -(word) sin16s::usinx#1 usinx zp[2]:4 1.0 +(word) sin16s::usinx#0 usinx zp[2]:2 0.3333333333333333 +(word) sin16s::usinx#1 usinx zp[2]:2 1.0 (dword) sin16s::x -(dword) sin16s::x#0 x zp[4]:10 8.5 -(dword) sin16s::x#1 x zp[4]:10 4.0 -(dword) sin16s::x#2 x zp[4]:10 4.0 -(dword) sin16s::x#4 x zp[4]:10 5.0 -(dword) sin16s::x#6 x zp[4]:10 6.0 +(dword) sin16s::x#0 x zp[4]:8 8.5 +(dword) sin16s::x#1 x zp[4]:8 4.0 +(dword) sin16s::x#2 x zp[4]:8 4.0 +(dword) sin16s::x#4 x zp[4]:8 5.0 +(dword) sin16s::x#6 x zp[4]:8 6.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp[2]:34 0.6363636363636365 (word) sin16s::x2 -(word) sin16s::x2#0 x2 zp[2]:19 4.0 +(word) sin16s::x2#0 x2 zp[2]:12 4.0 (word) sin16s::x3 -(word) sin16s::x3#0 x3 zp[2]:19 1.0 +(word) sin16s::x3#0 x3 zp[2]:12 1.0 (word) sin16s::x3_6 -(word) sin16s::x3_6#0 x3_6 zp[2]:36 4.0 +(word) sin16s::x3_6#0 x3_6 zp[2]:32 4.0 (word) sin16s::x4 -(word) sin16s::x4#0 x4 zp[2]:19 4.0 +(word) sin16s::x4#0 x4 zp[2]:12 4.0 (word) sin16s::x5 -(word) sin16s::x5#0 x5 zp[2]:36 4.0 +(word) sin16s::x5#0 x5 zp[2]:32 4.0 (word) sin16s::x5_128 -(word) sin16s::x5_128#0 x5_128 zp[2]:36 4.0 +(word) sin16s::x5_128#0 x5_128 zp[2]:32 4.0 (void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max) -(signed dword~) sin16s_gen2::$6 zp[4]:10 22.0 -(word~) sin16s_gen2::$9 zp[2]:28 11.0 +(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0 +(word~) sin16s_gen2::$9 zp[2]:34 11.0 (label) sin16s_gen2::@1 (label) sin16s_gen2::@2 (label) sin16s_gen2::@3 @@ -367,43 +368,42 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (const signed word) sin16s_gen2::min#0 min = (signed word) -$1001 (signed word) sin16s_gen2::offs (signed word*) sin16s_gen2::sintab -(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333 -(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0 +(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:17 7.333333333333333 +(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:17 3.0 (dword) sin16s_gen2::step (dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666 (word) sin16s_gen2::wavelength (const word) sin16s_gen2::wavelength#0 wavelength = (word) $200 (dword) sin16s_gen2::x -(dword) sin16s_gen2::x#1 x zp[4]:6 11.0 -(dword) sin16s_gen2::x#2 x zp[4]:6 2.75 +(dword) sin16s_gen2::x#1 x zp[4]:4 11.0 +(dword) sin16s_gen2::x#2 x zp[4]:4 2.75 -zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] -zp[2]:4 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] +zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ] reg byte x [ memset::c#4 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] -zp[4]:6 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] +zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] reg byte y [ sin16s::isUpper#2 ] -zp[4]:10 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] +zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] +zp[2]:12 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] reg byte x [ mulu16_sel::select#5 ] -zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] -zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] +zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_x#11 main::idx_x#10 main::idx_x#1 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] -zp[1]:18 [ frame_cnt ] +zp[1]:16 [ frame_cnt ] +zp[2]:17 [ main::$7 main::$8 main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] reg byte x [ bitmap_plot::y#0 ] -zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ] +zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$13 main::$14 main::y#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] reg byte a [ bitmap_plot::$2 ] -zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] reg byte a [ mul16u::$1 ] zp[1]:23 [ bitmap_init::$7 main::r_add#10 main::r_add#12 main::r_add#1 ] reg byte a [ bitmap_init::$4 ] reg byte a [ bitmap_init::$5 ] reg byte a [ bitmap_init::$6 ] zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -zp[2]:28 [ sin16s_gen2::$9 main::$7 main::$8 main::x#0 bitmap_plot::x#0 ] -zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -zp[2]:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ] -zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$31 main::$33 main::$32 main::$34 ] +zp[4]:28 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +zp[2]:32 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ] +zp[2]:34 [ div32u16u::quotient_hi#0 sin16s::x1#0 sin16s_gen2::$9 mul16s::$13 mul16s::$17 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index cb366aaf3..0c9f6c6eb 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -150,7 +150,7 @@ bitmap_init: scope:[bitmap_init] from main (byte*) bitmap_init::gfx#1 ← phi( main/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -610,8 +610,8 @@ main::@13: scope:[main] from main::toD0181_@return (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) (byte~) main::$2 ← (byte) main::toD0181_return#3 *((const byte*) D018) ← (byte~) main::$2 - (byte) main::i#0 ← (number) 0 - (byte) main::a#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 + (byte) main::a#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@13 main::@16 (byte*) bitmap_screen#17 ← phi( main::@13/(byte*) bitmap_screen#20 main::@16/(byte*) bitmap_screen#21 ) @@ -686,7 +686,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) COSTAB = (const byte*) SINTAB+(number) $40 (const byte*) D011 = (byte*)(number) $d011 (const byte*) D018 = (byte*)(number) $d018 @@ -696,10 +696,10 @@ SYMBOL TABLE SSA (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN = (byte*)(number) $400 (const byte*) SINTAB[(number) $180] = kickasm {{ .fill $180, 99.5+99.5*sin(i*2*PI/256) }} -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 (number~) abs_u16::$1 @@ -1201,7 +1201,6 @@ Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bit Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) $40 in Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -1244,8 +1243,6 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::a#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) main::$3 ← (byte) main::i#2 != (number) 8 Adding number conversion cast (unumber) $78 in (number~) main::$5 ← (word~) main::$4 + (number) $78 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (word~) main::$4 + (unumber)(number) $78 @@ -1260,7 +1257,6 @@ Adding number conversion cast (unumber) $3e7 in (byte*~) main::$16 ← (const by Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast (byte~) bitmap_line::$15 ← (byte)(word) bitmap_line::y#3 @@ -1272,8 +1268,6 @@ Inlining cast (word) sgn_u16::return#3 ← (unumber)(number) 1 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::a#0 ← (unumber)(number) 0 Inlining cast (word~) main::$4 ← (word)*((const byte*) COSTAB + (byte) main::a#2) Inlining cast (word~) main::$6 ← (word)*((const byte*) SINTAB + (byte) main::a#2) Inlining cast (word~) main::$8 ← (word)*((const byte*) COSTAB + (unumber~) main::$7) @@ -1285,7 +1279,6 @@ Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $40 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -1313,8 +1306,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast $78 Simplifying constant integer cast $20 @@ -1325,7 +1316,6 @@ Simplifying constant integer cast $3e7 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -1350,8 +1340,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $78 Finalized unsigned number type (byte) $20 @@ -4647,10 +4635,10 @@ FINAL SYMBOL TABLE (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN = (byte*) 1024 (const byte*) SINTAB[(number) $180] = kickasm {{ .fill $180, 99.5+99.5*sin(i*2*PI/256) }} -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 reg byte a 4.0 (byte~) abs_u16::$1 reg byte a 4.0 diff --git a/src/test/ref/bitmap-plot-3.sym b/src/test/ref/bitmap-plot-3.sym index a938dece9..de6a4528a 100644 --- a/src/test/ref/bitmap-plot-3.sym +++ b/src/test/ref/bitmap-plot-3.sym @@ -11,10 +11,10 @@ (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN = (byte*) 1024 (const byte*) SINTAB[(number) $180] = kickasm {{ .fill $180, 99.5+99.5*sin(i*2*PI/256) }} -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 reg byte a 4.0 (byte~) abs_u16::$1 reg byte a 4.0 diff --git a/src/test/ref/bitmap-plotter.cfg b/src/test/ref/bitmap-plotter.cfg index 074f1bb14..9b253e53c 100644 --- a/src/test/ref/bitmap-plotter.cfg +++ b/src/test/ref/bitmap-plotter.cfg @@ -58,7 +58,7 @@ plot: scope:[plot] from plots::@2 [25] (byte~) plot::$7 ← *((const byte*) plot_xlo + (byte) plot::x#0) [26] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [27] (byte~) plot::$8 ← *((const byte*) plot_yhi + (byte) plot::y#0) - [28] (word) plot::plotter_y#1 ← (byte) 0 hi= (byte~) plot::$8 + [28] (word) plot::plotter_y#1 ← (word) 0 hi= (byte~) plot::$8 [29] (byte~) plot::$9 ← *((const byte*) plot_ylo + (byte) plot::y#0) [30] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index 4fe208666..d7e37cb30 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -75,7 +75,7 @@ main::@return: scope:[main] from main::@7 (void()) plots() plots: scope:[plots] from main::@3 - (byte) plots::i#0 ← (number) 0 + (byte) plots::i#0 ← (byte) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@7 (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@7/(byte) plots::i#1 ) @@ -101,7 +101,7 @@ plot: scope:[plot] from plots::@2 (byte) plot::y#1 ← phi( plots::@2/(byte) plot::y#0 ) (byte) plot::x#1 ← phi( plots::@2/(byte) plot::x#0 ) (byte*) plot::plotter_x#0 ← (byte*)(number) 0 - (word) plot::plotter_y#0 ← (number) 0 + (word) plot::plotter_y#0 ← (word) 0 (byte~) plot::$6 ← *((const byte*) plot_xhi + (byte) plot::x#1) (byte*) plot::plotter_x#1 ← (byte*) plot::plotter_x#0 hi= (byte~) plot::$6 (byte~) plot::$7 ← *((const byte*) plot_xlo + (byte) plot::x#1) @@ -121,7 +121,7 @@ plot::@return: scope:[plot] from plot (void()) init_plot_tables() init_plot_tables: scope:[init_plot_tables] from main::@5 - (byte) init_plot_tables::bits#0 ← (number) $80 + (byte) init_plot_tables::bits#0 ← (byte) $80 (byte) init_plot_tables::x#0 ← (byte) 0 to:init_plot_tables::@1 init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_tables::@2 @@ -360,8 +360,8 @@ SYMBOL TABLE SSA (byte) plots::i#3 (byte) plots::i#4 (const byte) plots_cnt = (byte) 8 -(const byte*) plots_x[] = { (byte)(number) $3c, (byte)(number) $50, (byte)(number) $6e, (byte)(number) $50, (byte)(number) $3c, (byte)(number) $28, (byte)(number) $a, (byte)(number) $28 } -(const byte*) plots_y[] = { (byte)(number) $a, (byte)(number) $28, (byte)(number) $3c, (byte)(number) $50, (byte)(number) $6e, (byte)(number) $50, (byte)(number) $3c, (byte)(number) $28 } +(const byte*) plots_x[] = { (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a, (byte) $28 } +(const byte*) plots_y[] = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28 } Adding number conversion cast (unumber) 0 in *((const byte*) BGCOL) ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) FGCOL) ← (number) 0 @@ -373,9 +373,6 @@ Adding number conversion cast (unumber) (word)BITMAP/$400 in (number~) main::$5 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (unumber~) main::$4 | (unumber)(word)(const byte*) BITMAP/(number) $400 Adding number conversion cast (unumber) $400 in (unumber~) main::$5 ← (unumber~) main::$4 | (unumber)(word)(const byte*) BITMAP/(number) $400 Adding number conversion cast (unumber) $ff in (bool~) main::$9 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) plots::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) plot::plotter_y#0 ← (number) 0 -Adding number conversion cast (unumber) $80 in (byte) init_plot_tables::bits#0 ← (number) $80 Adding number conversion cast (unumber) $f8 in (number~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (number) $f8 Adding number conversion cast (unumber) init_plot_tables::$0 in (number~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 2 in (number~) init_plot_tables::$1 ← (byte) init_plot_tables::bits#3 / (number) 2 @@ -398,30 +395,11 @@ Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) FGCOL) ← (unumber)(number) 0 Inlining cast (word~) main::$3 ← (word)(const byte*) SCREEN Inlining cast (byte~) main::$6 ← (byte)(unumber~) main::$5 -Inlining cast (byte) plots::i#0 ← (unumber)(number) 0 -Inlining cast (word) plot::plotter_y#0 ← (unumber)(number) 0 -Inlining cast (byte) init_plot_tables::bits#0 ← (unumber)(number) $80 Inlining cast (byte) init_plot_tables::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) init_screen::b#3) ← (unumber)(number) 0 Inlining cast *((byte*) init_screen::c#3) ← (unumber)(number) $14 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $3c -Simplifying constant integer cast $50 -Simplifying constant integer cast $6e -Simplifying constant integer cast $50 -Simplifying constant integer cast $3c -Simplifying constant integer cast $28 -Simplifying constant integer cast $a -Simplifying constant integer cast $28 -Simplifying constant integer cast $a -Simplifying constant integer cast $28 -Simplifying constant integer cast $3c -Simplifying constant integer cast $50 -Simplifying constant integer cast $6e -Simplifying constant integer cast $50 -Simplifying constant integer cast $3c -Simplifying constant integer cast $28 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53272 @@ -435,10 +413,7 @@ Simplifying constant integer cast $40 Simplifying constant integer cast (word)(const byte*) BITMAP/(unumber)(number) $400 Simplifying constant integer cast $400 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast $f8 Simplifying constant integer cast 2 Simplifying constant integer cast 0 @@ -458,9 +433,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 @@ -577,7 +549,7 @@ Inlining constant with var siblings (const byte*) init_screen::c#0 Constant inlined plots::i#0 = (byte) 0 Constant inlined init_plot_tables::bits#2 = (byte) $80 Constant inlined init_plot_tables::bits#0 = (byte) $80 -Constant inlined plot::plotter_y#0 = (byte) 0 +Constant inlined plot::plotter_y#0 = (word) 0 Constant inlined plot::plotter_x#0 = (byte*) 0 Constant inlined init_screen::$1 = (const byte*) SCREEN+(word) $400 Constant inlined main::$1 = (const byte) BMM|(const byte) DEN|(const byte) RSEL @@ -716,7 +688,7 @@ plot: scope:[plot] from plots::@2 [25] (byte~) plot::$7 ← *((const byte*) plot_xlo + (byte) plot::x#0) [26] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7 [27] (byte~) plot::$8 ← *((const byte*) plot_yhi + (byte) plot::y#0) - [28] (word) plot::plotter_y#1 ← (byte) 0 hi= (byte~) plot::$8 + [28] (word) plot::plotter_y#1 ← (word) 0 hi= (byte~) plot::$8 [29] (byte~) plot::$9 ← *((const byte*) plot_ylo + (byte) plot::y#0) [30] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9 [31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2 @@ -1086,7 +1058,7 @@ plot: { ldy.z y lda plot_yhi,y sta.z __8 - // [28] (word) plot::plotter_y#1 ← (byte) 0 hi= (byte~) plot::$8 -- vwuz1=vbuc1_sethi_vbuz2 + // [28] (word) plot::plotter_y#1 ← (word) 0 hi= (byte~) plot::$8 -- vwuz1=vwuc1_sethi_vbuz2 lda.z __8 sta.z plotter_y+1 lda #<0 @@ -1611,7 +1583,7 @@ plot: { // [27] (byte~) plot::$8 ← *((const byte*) plot_yhi + (byte) plot::y#0) -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z y lda plot_yhi,y - // [28] (word) plot::plotter_y#1 ← (byte) 0 hi= (byte~) plot::$8 -- vwuz1=vbuc1_sethi_vbuaa + // [28] (word) plot::plotter_y#1 ← (word) 0 hi= (byte~) plot::$8 -- vwuz1=vwuc1_sethi_vbuaa sta.z plotter_y+1 lda #<0 sta.z plotter_y @@ -2170,7 +2142,7 @@ plot: { // [27] (byte~) plot::$8 ← *((const byte*) plot_yhi + (byte) plot::y#0) -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z y lda plot_yhi,y - // [28] (word) plot::plotter_y#1 ← (byte) 0 hi= (byte~) plot::$8 -- vwuz1=vbuc1_sethi_vbuaa + // [28] (word) plot::plotter_y#1 ← (word) 0 hi= (byte~) plot::$8 -- vwuz1=vwuc1_sethi_vbuaa sta.z plotter_y+1 lda #<0 sta.z plotter_y diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index e7a1141d3..acefd54ea 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -78,7 +78,7 @@ main::@4: scope:[main] from main::@3 asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3 *((const byte*) BORDERCOL) ← (number) 0 - (byte) main::rst#0 ← (number) $42 + (byte) main::rst#0 ← (byte) $42 to:main::@6 main::@6: scope:[main] from main::@4 main::@6 (byte) main::rst#2 ← phi( main::@4/(byte) main::rst#0 main::@6/(byte) main::rst#2 ) @@ -163,7 +163,7 @@ gfx_init_plane_charset8::@9: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte*) gfx_init_plane_charset8::gfxa#0 ← (byte*)(number) $4000+(word)(const byte*) CHARSET8&(number) $3fff (byte*) gfx_init_plane_charset8::chargen#0 ← (const byte*) CHARGEN+(number) 1 *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM - (byte) gfx_init_plane_charset8::col#0 ← (number) 0 + (byte) gfx_init_plane_charset8::col#0 ← (byte) 0 (byte) gfx_init_plane_charset8::ch#0 ← (byte) 0 to:gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@1: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@9 @@ -191,7 +191,7 @@ gfx_init_plane_charset8::@3: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte) gfx_init_plane_charset8::col#4 ← phi( gfx_init_plane_charset8::@2/(byte) gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::@4/(byte) gfx_init_plane_charset8::col#1 ) (byte*) gfx_init_plane_charset8::gfxa#3 ← phi( gfx_init_plane_charset8::@2/(byte*) gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::@4/(byte*) gfx_init_plane_charset8::gfxa#1 ) (byte) gfx_init_plane_charset8::bits#2 ← phi( gfx_init_plane_charset8::@2/(byte) gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::@4/(byte) gfx_init_plane_charset8::bits#1 ) - (byte) gfx_init_plane_charset8::c#0 ← (number) 0 + (byte) gfx_init_plane_charset8::c#0 ← (byte) 0 (number~) gfx_init_plane_charset8::$2 ← (byte) gfx_init_plane_charset8::bits#2 & (number) $80 (bool~) gfx_init_plane_charset8::$3 ← (number~) gfx_init_plane_charset8::$2 != (number) 0 (bool~) gfx_init_plane_charset8::$4 ← ! (bool~) gfx_init_plane_charset8::$3 @@ -271,13 +271,13 @@ SYMBOL TABLE SSA (const byte*) CHARSET8 = (byte*)(number) $8000 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_CHUNKY = (number) $40 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_CHUNKY = (byte) $40 (const byte*) DTV_CONTROL = (byte*)(number) $d03c (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 (const byte*) DTV_PALETTE = (byte*)(number) $d200 (const byte*) DTV_PLANEA_MODULO_HI = (byte*)(number) $d039 (const byte*) DTV_PLANEA_MODULO_LO = (byte*)(number) $d038 @@ -293,19 +293,19 @@ SYMBOL TABLE SSA (const byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $7c00 (const byte*) VIC_CONTROL = (byte*)(number) $d011 (const byte*) VIC_CONTROL2 = (byte*)(number) $d016 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (label) dtvSetCpuBankSegment1::@return (const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*)(number) $ff @@ -476,7 +476,6 @@ Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← Adding number conversion cast (unumber) VIC_DEN|VIC_ECM|VIC_RSEL|3 in *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const byte*) VIC_CONTROL) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 -Adding number conversion cast (unumber) $42 in (byte) main::rst#0 ← (number) $42 Adding number conversion cast (unumber) 7 in (number~) main::$3 ← (byte) main::rst#1 & (number) 7 Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (byte) main::rst#1 & (unumber)(number) 7 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (unumber~) main::$3 @@ -493,8 +492,6 @@ Adding number conversion cast (unumber) gfx_init_screen0::$3 in (number~) gfx_in Adding number conversion cast (unumber) $4000 in (byte) gfx_init_plane_charset8::gfxbCpuBank#0 ← (byte)(const byte*) CHARSET8/(number) $4000 Adding number conversion cast (unumber) $3fff in (byte*) gfx_init_plane_charset8::gfxa#0 ← (byte*)(number) $4000+(word)(const byte*) CHARSET8&(number) $3fff Adding number conversion cast (unumber) 1 in (byte*) gfx_init_plane_charset8::chargen#0 ← (const byte*) CHARGEN+(number) 1 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::col#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gfx_init_plane_charset8::$2 ← (byte) gfx_init_plane_charset8::bits#2 & (number) $80 Adding number conversion cast (unumber) gfx_init_plane_charset8::$2 in (number~) gfx_init_plane_charset8::$2 ← (byte) gfx_init_plane_charset8::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) gfx_init_plane_charset8::$3 ← (unumber~) gfx_init_plane_charset8::$2 != (number) 0 @@ -519,9 +516,6 @@ Inlining cast *((const byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byt Inlining cast *((const byte*) VIC_MEMORY) ← (unumber)(byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const byte*) SCREEN&(unumber)(number) $3fff/(unumber)(number) 4 Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast (byte) main::rst#0 ← (unumber)(number) $42 -Inlining cast (byte) gfx_init_plane_charset8::col#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::c#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 Simplifying constant pointer cast (byte*) 1 @@ -574,7 +568,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 Simplifying constant integer cast 0 -Simplifying constant integer cast $42 Simplifying constant integer cast 7 Simplifying constant integer cast $10 Simplifying constant integer cast $f2 @@ -585,8 +578,6 @@ Simplifying constant integer cast $4000 Simplifying constant integer cast $4000 Simplifying constant integer cast $3fff Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -609,7 +600,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $42 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f2 @@ -620,8 +610,6 @@ Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -2637,13 +2625,13 @@ FINAL SYMBOL TABLE (const byte*) CHARSET8 = (byte*) 32768 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_CHUNKY = (number) $40 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_CHUNKY = (byte) $40 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PLANEA_MODULO_HI = (byte*) 53305 (const byte*) DTV_PLANEA_MODULO_LO = (byte*) 53304 @@ -2659,19 +2647,19 @@ FINAL SYMBOL TABLE (const byte*) DTV_PLANEB_STEP = (byte*) 53324 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 31744 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (label) dtvSetCpuBankSegment1::@return (const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*) 255 diff --git a/src/test/ref/c64dtv-8bppcharstretch.sym b/src/test/ref/c64dtv-8bppcharstretch.sym index 8e87f565a..be0cb851a 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.sym +++ b/src/test/ref/c64dtv-8bppcharstretch.sym @@ -6,13 +6,13 @@ (const byte*) CHARSET8 = (byte*) 32768 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_CHUNKY = (number) $40 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_CHUNKY = (byte) $40 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PLANEA_MODULO_HI = (byte*) 53305 (const byte*) DTV_PLANEA_MODULO_LO = (byte*) 53304 @@ -28,19 +28,19 @@ (const byte*) DTV_PLANEB_STEP = (byte*) 53324 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 31744 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (label) dtvSetCpuBankSegment1::@return (const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*) 255 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 06350a973..720fd3158 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -69,7 +69,7 @@ main::@4: scope:[main] from main::@3 asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize } *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3 *((const byte*) BORDERCOL) ← (number) 0 - (byte) main::rst#0 ← (number) $42 + (byte) main::rst#0 ← (byte) $42 to:main::@6 main::@6: scope:[main] from main::@4 main::@6 (byte) main::rst#2 ← phi( main::@4/(byte) main::rst#0 main::@6/(byte) main::rst#2 ) @@ -182,14 +182,14 @@ SYMBOL TABLE SSA (const byte*) CHUNKY = (byte*)(number) $8000 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 (const byte*) DTV_CONTROL = (byte*)(number) $d03c (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 (const byte*) DTV_PALETTE = (byte*)(number) $d200 (const byte*) DTV_PLANEB_MODULO_HI = (byte*)(number) $d048 (const byte*) DTV_PLANEB_MODULO_LO = (byte*)(number) $d047 @@ -199,17 +199,17 @@ SYMBOL TABLE SSA (const byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 (const byte*) VIC_CONTROL2 = (byte*)(number) $d016 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (label) dtvSetCpuBankSegment1::@return (const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*)(number) $ff @@ -313,7 +313,6 @@ Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← Adding number conversion cast (unumber) VIC_DEN|VIC_ECM|VIC_RSEL|3 in *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const byte*) VIC_CONTROL) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 -Adding number conversion cast (unumber) $42 in (byte) main::rst#0 ← (number) $42 Adding number conversion cast (unumber) 7 in (number~) main::$3 ← (byte) main::rst#1 & (number) 7 Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (byte) main::rst#1 & (unumber)(number) 7 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (unumber~) main::$3 @@ -336,7 +335,6 @@ Inlining cast *((const byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byt Inlining cast *((const byte*) VIC_MEMORY) ← (unumber)(byte)(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) 4 Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast (byte) main::rst#0 ← (unumber)(number) $42 Inlining cast (byte~) gfx_init_chunky::$6 ← (byte)(word~) gfx_init_chunky::$5 Inlining cast (byte*) gfx_init_chunky::gfxb#2 ← (byte*)(number) $4000 Successful SSA optimization Pass2InlineCast @@ -379,7 +377,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 Simplifying constant integer cast 0 -Simplifying constant integer cast $42 Simplifying constant integer cast 7 Simplifying constant integer cast $10 Simplifying constant integer cast $f2 @@ -402,7 +399,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $42 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f2 @@ -1812,14 +1808,14 @@ FINAL SYMBOL TABLE (const byte*) CHUNKY = (byte*) 32768 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PLANEB_MODULO_HI = (byte*) 53320 (const byte*) DTV_PLANEB_MODULO_LO = (byte*) 53319 @@ -1829,17 +1825,17 @@ FINAL SYMBOL TABLE (const byte*) DTV_PLANEB_STEP = (byte*) 53324 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (label) dtvSetCpuBankSegment1::@return (const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*) 255 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.sym b/src/test/ref/c64dtv-8bppchunkystretch.sym index b0a30bfde..1e3fca927 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.sym +++ b/src/test/ref/c64dtv-8bppchunkystretch.sym @@ -5,14 +5,14 @@ (const byte*) CHUNKY = (byte*) 32768 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PLANEB_MODULO_HI = (byte*) 53320 (const byte*) DTV_PLANEB_MODULO_LO = (byte*) 53319 @@ -22,17 +22,17 @@ (const byte*) DTV_PLANEB_STEP = (byte*) 53324 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (label) dtvSetCpuBankSegment1::@return (const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*) 255 diff --git a/src/test/ref/c64dtv-blitter-box.log b/src/test/ref/c64dtv-blitter-box.log index cbde27f45..397b79a51 100644 --- a/src/test/ref/c64dtv-blitter-box.log +++ b/src/test/ref/c64dtv-blitter-box.log @@ -97,20 +97,20 @@ SYMBOL TABLE SSA (const byte*) DTV_BLITTER_SRCB_MOD_LO = (byte*)(number) $d32b (const byte*) DTV_BLITTER_SRCB_STEP = (byte*)(number) $d32f (const byte*) DTV_BLITTER_TRANSPARANCY = (byte*)(number) $d33b -(const byte) DTV_BLIT_ADD = (number) $30 -(const byte) DTV_BLIT_CLEAR_IRQ = (number) 1 -(const byte) DTV_BLIT_DEST_CONT = (number) 8 -(const byte) DTV_BLIT_DEST_FWD = (number) 8 -(const byte) DTV_BLIT_FORCE_START = (number) 1 -(const byte) DTV_BLIT_SRCA_FWD = (number) 2 -(const byte) DTV_BLIT_SRCB_FWD = (number) 4 -(const byte) DTV_BLIT_STATUS_BUSY = (number) 1 -(const byte) DTV_BLIT_TRANSPARANCY_NONE = (number) 0 +(const byte) DTV_BLIT_ADD = (byte) $30 +(const byte) DTV_BLIT_CLEAR_IRQ = (byte) 1 +(const byte) DTV_BLIT_DEST_CONT = (byte) 8 +(const byte) DTV_BLIT_DEST_FWD = (byte) 8 +(const byte) DTV_BLIT_FORCE_START = (byte) 1 +(const byte) DTV_BLIT_SRCA_FWD = (byte) 2 +(const byte) DTV_BLIT_SRCB_FWD = (byte) 4 +(const byte) DTV_BLIT_STATUS_BUSY = (byte) 1 +(const byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) SCREEN = (byte*)(number) $400 (const byte*) SRCA[] = (string) "camelot rules!" -(const byte*) SRCB[] = { (byte)(number) $80 } +(const byte*) SRCB[] = { (byte) $80 } (void()) main() (byte~) main::$0 (bool~) main::$1 @@ -181,7 +181,6 @@ Simplifying constant pointer cast (byte*) 54074 Simplifying constant pointer cast (byte*) 54075 Simplifying constant pointer cast (byte*) 54079 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 54078 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -849,17 +848,17 @@ FINAL SYMBOL TABLE (const byte*) DTV_BLITTER_SRCB_MOD_LO = (byte*) 54059 (const byte*) DTV_BLITTER_SRCB_STEP = (byte*) 54063 (const byte*) DTV_BLITTER_TRANSPARANCY = (byte*) 54075 -(const byte) DTV_BLIT_ADD = (number) $30 -(const byte) DTV_BLIT_CLEAR_IRQ = (number) 1 -(const byte) DTV_BLIT_DEST_CONT = (number) 8 -(const byte) DTV_BLIT_DEST_FWD = (number) 8 -(const byte) DTV_BLIT_FORCE_START = (number) 1 -(const byte) DTV_BLIT_SRCA_FWD = (number) 2 -(const byte) DTV_BLIT_SRCB_FWD = (number) 4 -(const byte) DTV_BLIT_STATUS_BUSY = (number) 1 -(const byte) DTV_BLIT_TRANSPARANCY_NONE = (number) 0 +(const byte) DTV_BLIT_ADD = (byte) $30 +(const byte) DTV_BLIT_CLEAR_IRQ = (byte) 1 +(const byte) DTV_BLIT_DEST_CONT = (byte) 8 +(const byte) DTV_BLIT_DEST_FWD = (byte) 8 +(const byte) DTV_BLIT_FORCE_START = (byte) 1 +(const byte) DTV_BLIT_SRCA_FWD = (byte) 2 +(const byte) DTV_BLIT_SRCB_FWD = (byte) 4 +(const byte) DTV_BLIT_STATUS_BUSY = (byte) 1 +(const byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) SRCA[] = (string) "camelot rules!" (const byte*) SRCB[] = { (byte) $80 } diff --git a/src/test/ref/c64dtv-blitter-box.sym b/src/test/ref/c64dtv-blitter-box.sym index bb708cb2b..8d21131b2 100644 --- a/src/test/ref/c64dtv-blitter-box.sym +++ b/src/test/ref/c64dtv-blitter-box.sym @@ -31,17 +31,17 @@ (const byte*) DTV_BLITTER_SRCB_MOD_LO = (byte*) 54059 (const byte*) DTV_BLITTER_SRCB_STEP = (byte*) 54063 (const byte*) DTV_BLITTER_TRANSPARANCY = (byte*) 54075 -(const byte) DTV_BLIT_ADD = (number) $30 -(const byte) DTV_BLIT_CLEAR_IRQ = (number) 1 -(const byte) DTV_BLIT_DEST_CONT = (number) 8 -(const byte) DTV_BLIT_DEST_FWD = (number) 8 -(const byte) DTV_BLIT_FORCE_START = (number) 1 -(const byte) DTV_BLIT_SRCA_FWD = (number) 2 -(const byte) DTV_BLIT_SRCB_FWD = (number) 4 -(const byte) DTV_BLIT_STATUS_BUSY = (number) 1 -(const byte) DTV_BLIT_TRANSPARANCY_NONE = (number) 0 +(const byte) DTV_BLIT_ADD = (byte) $30 +(const byte) DTV_BLIT_CLEAR_IRQ = (byte) 1 +(const byte) DTV_BLIT_DEST_CONT = (byte) 8 +(const byte) DTV_BLIT_DEST_FWD = (byte) 8 +(const byte) DTV_BLIT_FORCE_START = (byte) 1 +(const byte) DTV_BLIT_SRCA_FWD = (byte) 2 +(const byte) DTV_BLIT_SRCB_FWD = (byte) 4 +(const byte) DTV_BLIT_STATUS_BUSY = (byte) 1 +(const byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) SRCA[] = (string) "camelot rules!" (const byte*) SRCB[] = { (byte) $80 } diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index f711b2e39..eea548bee 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -107,21 +107,21 @@ SYMBOL TABLE SSA (const byte*) DTV_BLITTER_SRCB_MOD_LO = (byte*)(number) $d32b (const byte*) DTV_BLITTER_SRCB_STEP = (byte*)(number) $d32f (const byte*) DTV_BLITTER_TRANSPARANCY = (byte*)(number) $d33b -(const byte) DTV_BLIT_ADD = (number) $30 -(const byte) DTV_BLIT_CLEAR_IRQ = (number) 1 -(const byte) DTV_BLIT_DEST_CONT = (number) 8 -(const byte) DTV_BLIT_DEST_FWD = (number) 8 -(const byte) DTV_BLIT_FORCE_START = (number) 1 -(const byte) DTV_BLIT_SRCA_FWD = (number) 2 -(const byte) DTV_BLIT_SRCB_FWD = (number) 4 -(const byte) DTV_BLIT_STATUS_BUSY = (number) 1 -(const byte) DTV_BLIT_TRANSPARANCY_NONE = (number) 0 +(const byte) DTV_BLIT_ADD = (byte) $30 +(const byte) DTV_BLIT_CLEAR_IRQ = (byte) 1 +(const byte) DTV_BLIT_DEST_CONT = (byte) 8 +(const byte) DTV_BLIT_DEST_FWD = (byte) 8 +(const byte) DTV_BLIT_FORCE_START = (byte) 1 +(const byte) DTV_BLIT_SRCA_FWD = (byte) 2 +(const byte) DTV_BLIT_SRCB_FWD = (byte) 4 +(const byte) DTV_BLIT_STATUS_BUSY = (byte) 1 +(const byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) SCREEN = (byte*)(number) $400 (const byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } -(const byte) SRCA_LEN = (number) 9 -(const byte*) SRCB[] = { (byte)(number) $80 } +(const byte) SRCA_LEN = (byte) 9 +(const byte*) SRCB[] = { (byte) $80 } (void()) main() (byte~) main::$0 (bool~) main::$1 @@ -195,7 +195,6 @@ Simplifying constant pointer cast (byte*) 54074 Simplifying constant pointer cast (byte*) 54075 Simplifying constant pointer cast (byte*) 54079 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 54078 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -983,20 +982,20 @@ FINAL SYMBOL TABLE (const byte*) DTV_BLITTER_SRCB_MOD_LO = (byte*) 54059 (const byte*) DTV_BLITTER_SRCB_STEP = (byte*) 54063 (const byte*) DTV_BLITTER_TRANSPARANCY = (byte*) 54075 -(const byte) DTV_BLIT_ADD = (number) $30 -(const byte) DTV_BLIT_CLEAR_IRQ = (number) 1 -(const byte) DTV_BLIT_DEST_CONT = (number) 8 -(const byte) DTV_BLIT_DEST_FWD = (number) 8 -(const byte) DTV_BLIT_FORCE_START = (number) 1 -(const byte) DTV_BLIT_SRCA_FWD = (number) 2 -(const byte) DTV_BLIT_SRCB_FWD = (number) 4 -(const byte) DTV_BLIT_STATUS_BUSY = (number) 1 -(const byte) DTV_BLIT_TRANSPARANCY_NONE = (number) 0 +(const byte) DTV_BLIT_ADD = (byte) $30 +(const byte) DTV_BLIT_CLEAR_IRQ = (byte) 1 +(const byte) DTV_BLIT_DEST_CONT = (byte) 8 +(const byte) DTV_BLIT_DEST_FWD = (byte) 8 +(const byte) DTV_BLIT_FORCE_START = (byte) 1 +(const byte) DTV_BLIT_SRCA_FWD = (byte) 2 +(const byte) DTV_BLIT_SRCB_FWD = (byte) 4 +(const byte) DTV_BLIT_STATUS_BUSY = (byte) 1 +(const byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } -(const byte) SRCA_LEN = (number) 9 +(const byte) SRCA_LEN = (byte) 9 (const byte*) SRCB[] = { (byte) $80 } (void()) main() (byte~) main::$0 reg byte a 202.0 diff --git a/src/test/ref/c64dtv-blittermin.sym b/src/test/ref/c64dtv-blittermin.sym index c8f081979..781dda585 100644 --- a/src/test/ref/c64dtv-blittermin.sym +++ b/src/test/ref/c64dtv-blittermin.sym @@ -31,20 +31,20 @@ (const byte*) DTV_BLITTER_SRCB_MOD_LO = (byte*) 54059 (const byte*) DTV_BLITTER_SRCB_STEP = (byte*) 54063 (const byte*) DTV_BLITTER_TRANSPARANCY = (byte*) 54075 -(const byte) DTV_BLIT_ADD = (number) $30 -(const byte) DTV_BLIT_CLEAR_IRQ = (number) 1 -(const byte) DTV_BLIT_DEST_CONT = (number) 8 -(const byte) DTV_BLIT_DEST_FWD = (number) 8 -(const byte) DTV_BLIT_FORCE_START = (number) 1 -(const byte) DTV_BLIT_SRCA_FWD = (number) 2 -(const byte) DTV_BLIT_SRCB_FWD = (number) 4 -(const byte) DTV_BLIT_STATUS_BUSY = (number) 1 -(const byte) DTV_BLIT_TRANSPARANCY_NONE = (number) 0 +(const byte) DTV_BLIT_ADD = (byte) $30 +(const byte) DTV_BLIT_CLEAR_IRQ = (byte) 1 +(const byte) DTV_BLIT_DEST_CONT = (byte) 8 +(const byte) DTV_BLIT_DEST_FWD = (byte) 8 +(const byte) DTV_BLIT_FORCE_START = (byte) 1 +(const byte) DTV_BLIT_SRCA_FWD = (byte) 2 +(const byte) DTV_BLIT_SRCB_FWD = (byte) 4 +(const byte) DTV_BLIT_STATUS_BUSY = (byte) 1 +(const byte) DTV_BLIT_TRANSPARANCY_NONE = (byte) 0 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } -(const byte) SRCA_LEN = (number) 9 +(const byte) SRCA_LEN = (byte) 9 (const byte*) SRCB[] = { (byte) $80 } (void()) main() (byte~) main::$0 reg byte a 202.0 diff --git a/src/test/ref/c64dtv-color.log b/src/test/ref/c64dtv-color.log index f38690f5b..1a0074c8b 100644 --- a/src/test/ref/c64dtv-color.log +++ b/src/test/ref/c64dtv-color.log @@ -73,12 +73,12 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_BORDER_OFF = (number) 2 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_BORDER_OFF = (byte) 2 (const byte*) DTV_CONTROL = (byte*)(number) $d03c (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 (const byte*) DTV_PALETTE = (byte*)(number) $d200 (const byte*) RASTER = (byte*)(number) $d012 (void()) main() @@ -96,7 +96,7 @@ SYMBOL TABLE SSA (byte) main::c#0 (byte) main::c#1 (byte) main::c#2 -(const byte*) main::palette[(number) $10] = { (byte)(number) 0, (byte)(number) 1, (byte)(number) 2, (byte)(number) 3, (byte)(number) 4, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 8, (byte)(number) 9, (byte)(number) $a, (byte)(number) $b, (byte)(number) $c, (byte)(number) $d, (byte)(number) $e, (byte)(number) $f } +(const byte*) main::palette[(number) $10] = { (byte) 0, (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $e, (byte) $f } (byte) main::r (byte) main::r#0 (byte) main::r#1 @@ -112,22 +112,6 @@ Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 8 -Simplifying constant integer cast 9 -Simplifying constant integer cast $a -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $d -Simplifying constant integer cast $e -Simplifying constant integer cast $f Simplifying constant integer cast $40 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification @@ -574,12 +558,12 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_BORDER_OFF = (number) 2 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_BORDER_OFF = (byte) 2 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) RASTER = (byte*) 53266 (void()) main() diff --git a/src/test/ref/c64dtv-color.sym b/src/test/ref/c64dtv-color.sym index 0a96d60ed..06a1e58b1 100644 --- a/src/test/ref/c64dtv-color.sym +++ b/src/test/ref/c64dtv-color.sym @@ -2,12 +2,12 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) DTV_BADLINE_OFF = (number) $20 -(const byte) DTV_BORDER_OFF = (number) 2 +(const byte) DTV_BADLINE_OFF = (byte) $20 +(const byte) DTV_BORDER_OFF = (byte) 2 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 -(const byte) DTV_HIGHCOLOR = (number) 4 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 +(const byte) DTV_HIGHCOLOR = (byte) 4 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) RASTER = (byte*) 53266 (void()) main() diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index 09bd31be8..004cdc62e 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -545,14 +545,14 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri (byte*) print_char_cursor#60 ← phi( @18/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#60 ← phi( @18/(byte*) print_line_cursor#0 ) (byte*) print_screen#37 ← phi( @18/(byte*) print_screen#0 ) - (byte) keyboard_events_size#0 ← (number) 0 - (byte) keyboard_modifiers#0 ← (number) 0 + (byte) keyboard_events_size#0 ← (byte) 0 + (byte) keyboard_modifiers#0 ← (byte) 0 to:@82 (void()) keyboard_event_scan() keyboard_event_scan: scope:[keyboard_event_scan] from form_control::@3 gfx_mode::@36 (byte) keyboard_events_size#97 ← phi( form_control::@3/(byte) keyboard_events_size#48 gfx_mode::@36/(byte) keyboard_events_size#44 ) - (byte) keyboard_event_scan::keycode#0 ← (number) 0 + (byte) keyboard_event_scan::keycode#0 ← (byte) 0 (byte) keyboard_event_scan::row#0 ← (byte) 0 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@10 @@ -802,7 +802,7 @@ keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get (void()) bitmap_init((byte*) bitmap_init::bitmap) bitmap_init: scope:[bitmap_init] from gfx_init_vic_bitmap (byte*) bitmap_init::bitmap#2 ← phi( gfx_init_vic_bitmap/(byte*) bitmap_init::bitmap#0 ) - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -904,8 +904,8 @@ bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3 bitmap_plot: scope:[bitmap_plot] from bitmap_line_xdyd::@1 bitmap_line_xdyi::@1 bitmap_line_ydxd::@1 bitmap_line_ydxi::@1 (byte) bitmap_plot::y#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::y#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::y#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::y#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::y#2 ) (byte) bitmap_plot::x#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::x#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::x#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::x#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::x#2 ) - (word) bitmap_plot::plotter_x#0 ← ((word)) { *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } - (word) bitmap_plot::plotter_y#0 ← ((word)) { *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } + (word) bitmap_plot::plotter_x#0 ← (word){ *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } + (word) bitmap_plot::plotter_y#0 ← (word){ *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } (word~) bitmap_plot::$0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0 (byte~) bitmap_plot::$1 ← *((byte*) bitmap_plot::plotter#0) | *((const byte*) bitmap_plot_bit + (byte) bitmap_plot::x#4) @@ -1755,7 +1755,7 @@ apply_preset::@33: scope:[apply_preset] from apply_preset::@32 to:apply_preset::@22 apply_preset::@22: scope:[apply_preset] from apply_preset::@1 apply_preset::@10 apply_preset::@11 apply_preset::@2 apply_preset::@3 apply_preset::@33 apply_preset::@4 apply_preset::@5 apply_preset::@6 apply_preset::@7 apply_preset::@8 apply_preset::@9 (byte*) apply_preset::preset#15 ← phi( apply_preset::@1/(byte*) apply_preset::preset#1 apply_preset::@10/(byte*) apply_preset::preset#10 apply_preset::@11/(byte*) apply_preset::preset#11 apply_preset::@2/(byte*) apply_preset::preset#2 apply_preset::@3/(byte*) apply_preset::preset#3 apply_preset::@33/(byte*) apply_preset::preset#12 apply_preset::@4/(byte*) apply_preset::preset#4 apply_preset::@5/(byte*) apply_preset::preset#5 apply_preset::@6/(byte*) apply_preset::preset#6 apply_preset::@7/(byte*) apply_preset::preset#7 apply_preset::@8/(byte*) apply_preset::preset#8 apply_preset::@9/(byte*) apply_preset::preset#9 ) - (byte) apply_preset::i#0 ← (number) 0 + (byte) apply_preset::i#0 ← (byte) 0 to:apply_preset::@45 apply_preset::@45: scope:[apply_preset] from apply_preset::@22 apply_preset::@46 (byte*) apply_preset::preset#14 ← phi( apply_preset::@22/(byte*) apply_preset::preset#15 apply_preset::@46/(byte*) apply_preset::preset#13 ) @@ -1882,7 +1882,7 @@ render_preset_name::@return: scope:[render_preset_name] from render_preset_name gfx_mode: scope:[gfx_mode] from main::@9 (byte) keyboard_modifiers#124 ← phi( main::@9/(byte) keyboard_modifiers#7 ) (byte) keyboard_events_size#143 ← phi( main::@9/(byte) keyboard_events_size#6 ) - (byte) gfx_mode::dtv_control#0 ← (number) 0 + (byte) gfx_mode::dtv_control#0 ← (byte) 0 (bool~) gfx_mode::$0 ← *((const byte*) form_ctrl_line) != (number) 0 (bool~) gfx_mode::$1 ← ! (bool~) gfx_mode::$0 if((bool~) gfx_mode::$1) goto gfx_mode::@1 @@ -1967,7 +1967,7 @@ gfx_mode::@6: scope:[gfx_mode] from gfx_mode::@17 gfx_mode::@5 (byte) keyboard_events_size#132 ← phi( gfx_mode::@17/(byte) keyboard_events_size#133 gfx_mode::@5/(byte) keyboard_events_size#134 ) (byte) gfx_mode::dtv_control#12 ← phi( gfx_mode::@17/(byte) gfx_mode::dtv_control#6 gfx_mode::@5/(byte) gfx_mode::dtv_control#18 ) *((const byte*) DTV_CONTROL) ← (byte) gfx_mode::dtv_control#12 - (byte) gfx_mode::vic_control#0 ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 + (byte) gfx_mode::vic_control#0 ← (byte)(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 (bool~) gfx_mode::$12 ← *((const byte*) form_ctrl_ecm) != (number) 0 (bool~) gfx_mode::$13 ← ! (bool~) gfx_mode::$12 if((bool~) gfx_mode::$13) goto gfx_mode::@7 @@ -2523,7 +2523,7 @@ gfx_init_vic_bitmap::@7: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap call bitmap_clear to:gfx_init_vic_bitmap::@8 gfx_init_vic_bitmap::@8: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@7 - (byte) gfx_init_vic_bitmap::l#0 ← (number) 0 + (byte) gfx_init_vic_bitmap::l#0 ← (byte) 0 to:gfx_init_vic_bitmap::@1 gfx_init_vic_bitmap::@1: scope:[gfx_init_vic_bitmap] from gfx_init_vic_bitmap::@8 gfx_init_vic_bitmap::@9 (byte) gfx_init_vic_bitmap::l#2 ← phi( gfx_init_vic_bitmap::@8/(byte) gfx_init_vic_bitmap::l#0 gfx_init_vic_bitmap::@9/(byte) gfx_init_vic_bitmap::l#1 ) @@ -2788,7 +2788,7 @@ gfx_init_plane_charset8::@9: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte*) gfx_init_plane_charset8::gfxa#0 ← (byte*)(number) $4000+(const dword) PLANE_CHARSET8&(number) $3fff (byte*) gfx_init_plane_charset8::chargen#0 ← (const byte*) CHARGEN *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM - (byte) gfx_init_plane_charset8::col#0 ← (number) 0 + (byte) gfx_init_plane_charset8::col#0 ← (byte) 0 (byte) gfx_init_plane_charset8::ch#0 ← (byte) 0 to:gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@1: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@9 @@ -2816,7 +2816,7 @@ gfx_init_plane_charset8::@3: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte) gfx_init_plane_charset8::col#4 ← phi( gfx_init_plane_charset8::@2/(byte) gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::@4/(byte) gfx_init_plane_charset8::col#1 ) (byte*) gfx_init_plane_charset8::gfxa#3 ← phi( gfx_init_plane_charset8::@2/(byte*) gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::@4/(byte*) gfx_init_plane_charset8::gfxa#1 ) (byte) gfx_init_plane_charset8::bits#2 ← phi( gfx_init_plane_charset8::@2/(byte) gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::@4/(byte) gfx_init_plane_charset8::bits#1 ) - (byte) gfx_init_plane_charset8::c#0 ← (number) 0 + (byte) gfx_init_plane_charset8::c#0 ← (byte) 0 (number~) gfx_init_plane_charset8::$2 ← (byte) gfx_init_plane_charset8::bits#2 & (number) $80 (bool~) gfx_init_plane_charset8::$3 ← (number~) gfx_init_plane_charset8::$2 != (number) 0 (bool~) gfx_init_plane_charset8::$4 ← ! (bool~) gfx_init_plane_charset8::$3 @@ -3266,8 +3266,8 @@ form_mode::@33: scope:[form_mode] from form_mode::@32 (byte*) print_char_cursor#55 ← phi( @46/(byte*) print_char_cursor#60 ) (byte*) print_line_cursor#53 ← phi( @46/(byte*) print_line_cursor#60 ) (byte*) print_screen#32 ← phi( @46/(byte*) print_screen#37 ) - (byte) form_field_idx#4 ← (number) 0 - (signed byte) form_cursor_count#4 ← (const signed byte) FORM_CURSOR_BLINK/(number) 2 + (byte) form_field_idx#4 ← (byte) 0 + (signed byte) form_cursor_count#4 ← (signed byte)(const signed byte) FORM_CURSOR_BLINK/(number) 2 to:@86 (void()) form_set_screen((byte*) form_set_screen::screen) @@ -3312,7 +3312,7 @@ form_field_ptr::@return: scope:[form_field_ptr] from form_field_ptr (void()) form_render_values() form_render_values: scope:[form_render_values] from form_mode::@27 form_mode::@31 - (byte) form_render_values::idx#0 ← (number) 0 + (byte) form_render_values::idx#0 ← (byte) 0 to:form_render_values::@1 form_render_values::@1: scope:[form_render_values] from form_render_values form_render_values::@7 (byte) form_render_values::idx#2 ← phi( form_render_values/(byte) form_render_values::idx#0 form_render_values::@7/(byte) form_render_values::idx#1 ) @@ -3629,21 +3629,21 @@ SYMBOL TABLE SSA (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const byte*) COLS = (byte*)(number) $d800 -(const byte) DTV_BORDER_OFF = (number) 2 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 -(const dword) DTV_COLOR_BANK_DEFAULT = (number) $1d800 +(const byte) DTV_BORDER_OFF = (byte) 2 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 +(const dword) DTV_COLOR_BANK_DEFAULT = (dword) $1d800 (const byte*) DTV_COLOR_BANK_HI = (byte*)(number) $d037 (const byte*) DTV_COLOR_BANK_LO = (byte*)(number) $d036 (const byte*) DTV_CONTROL = (byte*)(number) $d03c (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) DTV_GRAPHICS_VIC_BANK = (byte*)(number) $d03d -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 -(const byte) DTV_OVERSCAN = (number) 8 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 +(const byte) DTV_OVERSCAN = (byte) 8 (const byte*) DTV_PALETTE = (byte*)(number) $d200 -(const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte)(number) 0, (byte)(number) $f, (byte)(number) $36, (byte)(number) $be, (byte)(number) $58, (byte)(number) $db, (byte)(number) $86, (byte)(number) $ff, (byte)(number) $29, (byte)(number) $26, (byte)(number) $3b, (byte)(number) 5, (byte)(number) 7, (byte)(number) $df, (byte)(number) $9a, (byte)(number) $a } +(const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte) 0, (byte) $f, (byte) $36, (byte) $be, (byte) $58, (byte) $db, (byte) $86, (byte) $ff, (byte) $29, (byte) $26, (byte) $3b, (byte) 5, (byte) 7, (byte) $df, (byte) $9a, (byte) $a } (const byte*) DTV_PLANEA_MODULO_HI = (byte*)(number) $d039 (const byte*) DTV_PLANEA_MODULO_LO = (byte*)(number) $d038 (const byte*) DTV_PLANEA_START_HI = (byte*)(number) $d045 @@ -3658,50 +3658,50 @@ SYMBOL TABLE SSA (const byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c (const byte*) FORM_CHARSET = (byte*)(number) $1800 (const byte*) FORM_COLS[] = (string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ @aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm @ nnnnnnnnnnnn jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -(const signed byte) FORM_CURSOR_BLINK = (number) $28 +(const signed byte) FORM_CURSOR_BLINK = (signed byte) $28 (const byte*) FORM_SCREEN = (byte*)(number) $400 (const byte*) FORM_TEXT[] = (string) " C64 DTV Graphics Mode Explorer @ @ PRESET 0 Standard Charset @ @ CONTROL PLANE A VIC II @ bmm 0 pattern p0 screen s0 @ mcm 0 start 00 gfx g0 @ ecm 0 step 00 colors c0 @ hicolor 0 modulo 00 @ linear 0 COLORS @ color off 0 PLANE B palet 0 @ chunky 0 pattern p0 bgcol0 00 @ border off 0 start 00 bgcol1 00 @ overscan 0 step 00 bgcol2 00 @ modulo 00 bgcol3 00 @" -(const byte) KEY_COMMODORE = (number) $3d -(const byte) KEY_CRSR_DOWN = (number) 7 -(const byte) KEY_CRSR_RIGHT = (number) 2 -(const byte) KEY_CTRL = (number) $3a -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_MODIFIER_COMMODORE = (number) 8 -(const byte) KEY_MODIFIER_CTRL = (number) 4 -(const byte) KEY_MODIFIER_LSHIFT = (number) 1 -(const byte) KEY_MODIFIER_RSHIFT = (number) 2 +(const byte) KEY_COMMODORE = (byte) $3d +(const byte) KEY_CRSR_DOWN = (byte) 7 +(const byte) KEY_CRSR_RIGHT = (byte) 2 +(const byte) KEY_CTRL = (byte) $3a +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_MODIFIER_COMMODORE = (byte) 8 +(const byte) KEY_MODIFIER_CTRL = (byte) 4 +(const byte) KEY_MODIFIER_LSHIFT = (byte) 1 +(const byte) KEY_MODIFIER_RSHIFT = (byte) 2 (const byte) KEY_MODIFIER_SHIFT = (const byte) KEY_MODIFIER_LSHIFT|(const byte) KEY_MODIFIER_RSHIFT -(const byte) KEY_RSHIFT = (number) $34 -(const byte) KEY_SPACE = (number) $3c -(const dword) PLANE_8BPP_CHUNKY = (number) $20000 -(const dword) PLANE_BLANK = (number) $38000 -(const dword) PLANE_CHARSET8 = (number) $3c000 -(const dword) PLANE_FULL = (number) $3a000 -(const dword) PLANE_HORISONTAL = (number) $30000 -(const dword) PLANE_HORISONTAL2 = (number) $34000 -(const dword) PLANE_VERTICAL = (number) $32000 -(const dword) PLANE_VERTICAL2 = (number) $36000 +(const byte) KEY_RSHIFT = (byte) $34 +(const byte) KEY_SPACE = (byte) $3c +(const dword) PLANE_8BPP_CHUNKY = (dword) $20000 +(const dword) PLANE_BLANK = (dword) $38000 +(const dword) PLANE_CHARSET8 = (dword) $3c000 +(const dword) PLANE_FULL = (dword) $3a000 +(const dword) PLANE_HORISONTAL = (dword) $30000 +(const dword) PLANE_HORISONTAL2 = (dword) $34000 +(const dword) PLANE_VERTICAL = (dword) $32000 +(const dword) PLANE_VERTICAL2 = (dword) $36000 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_BITMAP = (byte*)(number) $6000 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CHARSET_ROM = (byte*)(number) $5800 (const byte*) VIC_CONTROL = (byte*)(number) $d011 (const byte*) VIC_CONTROL2 = (byte*)(number) $d016 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) VIC_SCREEN0 = (byte*)(number) $4000 (const byte*) VIC_SCREEN1 = (byte*)(number) $4400 (const byte*) VIC_SCREEN2 = (byte*)(number) $4800 @@ -4546,10 +4546,10 @@ SYMBOL TABLE SSA (byte) form_field_ptr::y (byte) form_field_ptr::y#0 (const byte) form_fields_cnt = (byte) $24 -(const byte*) form_fields_max[] = { (byte)(number) $a, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) $d, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $d, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) 3, (byte)(number) 1, (byte)(number) 4, (byte)(number) 1, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f, (byte)(number) $f } -(const byte*) form_fields_val[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) form_fields_x[] = { (byte)(number) 8, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $c, (byte)(number) $19, (byte)(number) $18, (byte)(number) $19, (byte)(number) $18, (byte)(number) $19, (byte)(number) $18, (byte)(number) $19, (byte)(number) $19, (byte)(number) $18, (byte)(number) $19, (byte)(number) $18, (byte)(number) $19, (byte)(number) $18, (byte)(number) $19, (byte)(number) $25, (byte)(number) $25, (byte)(number) $25, (byte)(number) $25, (byte)(number) $24, (byte)(number) $25, (byte)(number) $24, (byte)(number) $25, (byte)(number) $24, (byte)(number) $25, (byte)(number) $24, (byte)(number) $25 } -(const byte*) form_fields_y[] = { (byte)(number) 2, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 8, (byte)(number) 9, (byte)(number) $a, (byte)(number) $b, (byte)(number) $c, (byte)(number) $d, (byte)(number) 5, (byte)(number) 6, (byte)(number) 6, (byte)(number) 7, (byte)(number) 7, (byte)(number) 8, (byte)(number) 8, (byte)(number) $b, (byte)(number) $c, (byte)(number) $c, (byte)(number) $d, (byte)(number) $d, (byte)(number) $e, (byte)(number) $e, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) $a, (byte)(number) $b, (byte)(number) $b, (byte)(number) $c, (byte)(number) $c, (byte)(number) $d, (byte)(number) $d, (byte)(number) $e, (byte)(number) $e } +(const byte*) form_fields_max[] = { (byte) $a, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) $d, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $d, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) 3, (byte) 1, (byte) 4, (byte) 1, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f } +(const byte*) form_fields_val[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) form_fields_x[] = { (byte) 8, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $25, (byte) $25, (byte) $25, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25 } +(const byte*) form_fields_y[] = { (byte) 2, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) 5, (byte) 6, (byte) 6, (byte) 7, (byte) 7, (byte) 8, (byte) 8, (byte) $b, (byte) $c, (byte) $c, (byte) $d, (byte) $d, (byte) $e, (byte) $e, (byte) 5, (byte) 6, (byte) 7, (byte) $a, (byte) $b, (byte) $b, (byte) $c, (byte) $c, (byte) $d, (byte) $d, (byte) $e, (byte) $e } (const byte*) form_line_hi[(number) $19] = { fill( $19, 0) } (const byte*) form_line_lo[(number) $19] = { fill( $19, 0) } (void()) form_mode() @@ -5108,7 +5108,7 @@ SYMBOL TABLE SSA (byte) gfx_init_plane_horisontal2::gfxbCpuBank#2 (byte) gfx_init_plane_horisontal2::row (byte) gfx_init_plane_horisontal2::row#0 -(const byte*) gfx_init_plane_horisontal2::row_bitmask[] = { (byte)(number) 0, (byte)(number) $55, (byte)(number) $aa, (byte)(number) $ff } +(const byte*) gfx_init_plane_horisontal2::row_bitmask[] = { (byte) 0, (byte) $55, (byte) $aa, (byte) $ff } (void()) gfx_init_plane_vertical() (bool~) gfx_init_plane_vertical::$2 (bool~) gfx_init_plane_vertical::$3 @@ -5293,8 +5293,8 @@ SYMBOL TABLE SSA (byte) gfx_init_vic_bitmap::l#3 (byte) gfx_init_vic_bitmap::l#4 (const byte) gfx_init_vic_bitmap::lines_cnt = (byte) 9 -(const byte*) gfx_init_vic_bitmap::lines_x[] = { (byte)(number) 0, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) 0, (byte)(number) 0, (byte)(number) $80, (byte)(number) $ff, (byte)(number) $80, (byte)(number) 0, (byte)(number) $80 } -(const byte*) gfx_init_vic_bitmap::lines_y[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) $c7, (byte)(number) $c7, (byte)(number) 0, (byte)(number) 0, (byte)(number) $64, (byte)(number) $c7, (byte)(number) $64, (byte)(number) 0 } +(const byte*) gfx_init_vic_bitmap::lines_x[] = { (byte) 0, (byte) $ff, (byte) $ff, (byte) 0, (byte) 0, (byte) $80, (byte) $ff, (byte) $80, (byte) 0, (byte) $80 } +(const byte*) gfx_init_vic_bitmap::lines_y[] = { (byte) 0, (byte) 0, (byte) $c7, (byte) $c7, (byte) 0, (byte) 0, (byte) $64, (byte) $c7, (byte) $64, (byte) 0 } (void()) gfx_mode() (bool~) gfx_mode::$0 (bool~) gfx_mode::$1 @@ -5788,7 +5788,7 @@ SYMBOL TABLE SSA (byte) keyboard_events_size#99 (void()) keyboard_init() (label) keyboard_init::@return -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -5803,7 +5803,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (byte) keyboard_modifiers (byte) keyboard_modifiers#0 (byte) keyboard_modifiers#1 @@ -5982,17 +5982,17 @@ SYMBOL TABLE SSA (void*) memset::str#3 (void*) memset::str#4 (void*) memset::str#5 -(const byte*) preset_8bpppixelcell[] = { (byte)(number) $a, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) $b, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_chunky[] = { (byte)(number) 7, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 6, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 8, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_ecmchar[] = { (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 2, (byte)(number) 0, (byte)(number) 5, (byte)(number) 0, (byte)(number) 6 } -(const byte*) preset_hi_ecmchar[] = { (byte)(number) 5, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 3, (byte)(number) 4, (byte)(number) 6, (byte)(number) 8, (byte)(number) 9, (byte)(number) $c, (byte)(number) $c } -(const byte*) preset_hi_stdchar[] = { (byte)(number) 4, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_mcbm[] = { (byte)(number) 3, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 2, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 9, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_sixsfred[] = { (byte)(number) 8, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 9, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) $a, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_sixsfred2[] = { (byte)(number) 9, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 9, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) $a, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_stdbm[] = { (byte)(number) 2, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 2, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_stdchar[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) preset_twoplane[] = { (byte)(number) 6, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 7, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 8, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 7, (byte)(number) 0, (byte)(number) $d, (byte)(number) 4, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } +(const byte*) preset_8bpppixelcell[] = { (byte) $a, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) $b, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_chunky[] = { (byte) 7, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 6, (byte) 0, (byte) 0, (byte) 0, (byte) 8, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_ecmchar[] = { (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 2, (byte) 0, (byte) 5, (byte) 0, (byte) 6 } +(const byte*) preset_hi_ecmchar[] = { (byte) 5, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 3, (byte) 4, (byte) 6, (byte) 8, (byte) 9, (byte) $c, (byte) $c } +(const byte*) preset_hi_stdchar[] = { (byte) 4, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_mcbm[] = { (byte) 3, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 2, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 9, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_sixsfred[] = { (byte) 8, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 9, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) $a, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_sixsfred2[] = { (byte) 9, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 9, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) $a, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_stdbm[] = { (byte) 2, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 2, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_stdchar[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) preset_twoplane[] = { (byte) 6, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 7, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 8, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 7, (byte) 0, (byte) $d, (byte) 4, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (byte*) print_char_cursor (byte*) print_char_cursor#0 (byte*) print_char_cursor#1 @@ -6365,9 +6365,6 @@ Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) $ff in *((const byte*) CIA1_PORT_A_DDR) ← (number) $ff Adding number conversion cast (unumber) 0 in *((const byte*) CIA1_PORT_B_DDR) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_events_size#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_modifiers#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::keycode#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (number) 8 Adding number conversion cast (unumber) keyboard_event_scan::$14 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (number) 0 @@ -6385,7 +6382,6 @@ Adding number conversion cast (unumber) 7 in (number~) keyboard_event_pressed::$ Adding number conversion cast (unumber) keyboard_event_pressed::$1 in (number~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#4 & (unumber)(number) 7 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_get::$0 ← (byte) keyboard_events_size#22 == (number) 0 Adding number conversion cast (unumber) $ff in (byte) keyboard_event_get::return#0 ← (number) $ff -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 @@ -6445,7 +6441,6 @@ Adding number conversion cast (unumber) 7 in (bool~) apply_preset::$7 ← (byte) Adding number conversion cast (unumber) 8 in (bool~) apply_preset::$8 ← (byte) apply_preset::idx#9 == (number) 8 Adding number conversion cast (unumber) 9 in (bool~) apply_preset::$9 ← (byte) apply_preset::idx#10 == (number) 9 Adding number conversion cast (unumber) $a in (bool~) apply_preset::$10 ← (byte) apply_preset::idx#11 == (number) $a -Adding number conversion cast (unumber) 0 in (byte) apply_preset::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) render_preset_name::$0 ← (byte) render_preset_name::idx#2 == (number) 0 Adding number conversion cast (unumber) 1 in (bool~) render_preset_name::$1 ← (byte) render_preset_name::idx#3 == (number) 1 Adding number conversion cast (unumber) 2 in (bool~) render_preset_name::$2 ← (byte) render_preset_name::idx#4 == (number) 2 @@ -6459,15 +6454,13 @@ Adding number conversion cast (unumber) 9 in (bool~) render_preset_name::$9 ← Adding number conversion cast (unumber) $a in (bool~) render_preset_name::$10 ← (byte) render_preset_name::idx#12 == (number) $a Adding number conversion cast (unumber) $a in (byte*) print_str_at::at#1 ← (const byte*) FORM_SCREEN+(number) $28*(number) 2+(number) $a Adding number conversion cast (unumber) $28*2 in (byte*) print_str_at::at#1 ← (const byte*) FORM_SCREEN+(number) $28*(number) 2+(unumber)(number) $a -Adding number conversion cast (unumber) 0 in (byte) gfx_mode::dtv_control#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$0 ← *((const byte*) form_ctrl_line) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$2 ← *((const byte*) form_ctrl_borof) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$4 ← *((const byte*) form_ctrl_hicol) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$6 ← *((const byte*) form_ctrl_overs) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$8 ← *((const byte*) form_ctrl_colof) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$10 ← *((const byte*) form_ctrl_chunk) != (number) 0 -Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in (byte) gfx_mode::vic_control#0 ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 -Adding number conversion cast (unumber) 3 in (byte) gfx_mode::vic_control#0 ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 +Adding number conversion cast (unumber) 3 in (byte) gfx_mode::vic_control#0 ← (byte)(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$12 ← *((const byte*) form_ctrl_ecm) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$14 ← *((const byte*) form_ctrl_bmm) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$16 ← *((const byte*) form_ctrl_mcm) != (number) 0 @@ -6546,7 +6539,6 @@ Adding number conversion cast (unumber) 3 in (number~) gfx_init_screen3::$2 ← Adding number conversion cast (unumber) gfx_init_screen3::$2 in (number~) gfx_init_screen3::$2 ← (byte) gfx_init_screen3::cy#2 & (unumber)(number) 3 Adding number conversion cast (unumber) gfx_init_screen3::$3 in (number~) gfx_init_screen3::$3 ← (unumber~) gfx_init_screen3::$1 | (unumber~) gfx_init_screen3::$2 Adding number conversion cast (unumber) 0 in *((byte*) gfx_init_screen4::ch#2) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_vic_bitmap::l#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) gfx_init_vic_bitmap::$3 ← (byte) gfx_init_vic_bitmap::l#3 + (number) 1 Adding number conversion cast (unumber) gfx_init_vic_bitmap::$3 in (number~) gfx_init_vic_bitmap::$3 ← (byte) gfx_init_vic_bitmap::l#3 + (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (number~) gfx_init_vic_bitmap::$4 ← (byte) gfx_init_vic_bitmap::l#3 + (number) 1 @@ -6571,8 +6563,6 @@ Adding number conversion cast (unumber) $3fff in (byte*) gfx_init_plane_vertical Adding number conversion cast (unumber) $f in *((byte*) gfx_init_plane_vertical::gfxb#2) ← (number) $f Adding number conversion cast (unumber) $4000 in (byte) gfx_init_plane_charset8::gfxbCpuBank#0 ← (byte)(const dword) PLANE_CHARSET8/(number) $4000 Adding number conversion cast (unumber) $3fff in (byte*) gfx_init_plane_charset8::gfxa#0 ← (byte*)(number) $4000+(const dword) PLANE_CHARSET8&(number) $3fff -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::col#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gfx_init_plane_charset8::$2 ← (byte) gfx_init_plane_charset8::bits#2 & (number) $80 Adding number conversion cast (unumber) gfx_init_plane_charset8::$2 in (number~) gfx_init_plane_charset8::$2 ← (byte) gfx_init_plane_charset8::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) gfx_init_plane_charset8::$3 ← (unumber~) gfx_init_plane_charset8::$2 != (number) 0 @@ -6606,11 +6596,8 @@ Adding number conversion cast (unumber) 0 in *((const byte*) BGCOL) ← (number) Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) form_mode::$10 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in (bool~) form_mode::$12 ← (byte~) form_mode::$11 != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) form_field_idx#4 ← (number) 0 -Adding number conversion cast (snumber) FORM_CURSOR_BLINK/2 in (signed byte) form_cursor_count#4 ← (const signed byte) FORM_CURSOR_BLINK/(number) 2 -Adding number conversion cast (snumber) 2 in (signed byte) form_cursor_count#4 ← ((snumber)) (const signed byte) FORM_CURSOR_BLINK/(number) 2 +Adding number conversion cast (snumber) 2 in (signed byte) form_cursor_count#4 ← (signed byte)(const signed byte) FORM_CURSOR_BLINK/(number) 2 Adding number conversion cast (unumber) $28 in (byte*~) form_set_screen::$2 ← (byte*) form_set_screen::line#2 + (number) $28 -Adding number conversion cast (unumber) 0 in (byte) form_render_values::idx#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) form_control::$1 ← (signed byte) form_cursor_count#5 < (number) 0 Adding number conversion cast (snumber) FORM_CURSOR_BLINK/2 in (bool~) form_control::$3 ← (signed byte) form_cursor_count#15 < (const signed byte) FORM_CURSOR_BLINK/(number) 2 Adding number conversion cast (snumber) 2 in (bool~) form_control::$3 ← (signed byte) form_cursor_count#15 < (snumber)(const signed byte) FORM_CURSOR_BLINK/(number) 2 @@ -6647,18 +6634,11 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast *((const byte*) CIA1_PORT_A_DDR) ← (unumber)(number) $ff Inlining cast *((const byte*) CIA1_PORT_B_DDR) ← (unumber)(number) 0 -Inlining cast (byte) keyboard_events_size#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_modifiers#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_event_scan::keycode#0 ← (unumber)(number) 0 Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 -Inlining cast (byte) apply_preset::i#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_mode::dtv_control#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_mode::vic_control#0 ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const byte*) DTV_PLANEA_MODULO_HI) ← (unumber)(number) 0 Inlining cast *((const byte*) DTV_PLANEB_MODULO_HI) ← (unumber)(number) 0 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 @@ -6670,14 +6650,11 @@ Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $32 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $37 Inlining cast *((byte*) gfx_init_screen4::ch#2) ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_vic_bitmap::l#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_8bppchunky::$6 ← (byte)(word~) gfx_init_plane_8bppchunky::$5 Inlining cast (byte*) gfx_init_plane_8bppchunky::gfxb#2 ← (byte*)(number) $4000 Inlining cast *((byte*) gfx_init_plane_horisontal::gfxa#3) ← (unumber)(number) 0 Inlining cast *((byte*) gfx_init_plane_horisontal::gfxa#4) ← (unumber)(number) $ff Inlining cast *((byte*) gfx_init_plane_vertical::gfxb#2) ← (unumber)(number) $f -Inlining cast (byte) gfx_init_plane_charset8::col#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::c#0 ← (unumber)(number) 0 Inlining cast (byte) gfx_init_plane_fill::fill#0 ← (unumber)(number) $1b Inlining cast (byte) gfx_init_plane_fill::fill#1 ← (unumber)(number) 0 Inlining cast (byte) gfx_init_plane_fill::fill#2 ← (unumber)(number) $ff @@ -6689,9 +6666,6 @@ Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(co Inlining cast *((const byte*) DTV_PLANEA_START_HI) ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast (byte) form_field_idx#4 ← (unumber)(number) 0 -Inlining cast (signed byte) form_cursor_count#4 ← (snumber)(const signed byte) FORM_CURSOR_BLINK/(snumber)(number) 2 -Inlining cast (byte) form_render_values::idx#0 ← (unumber)(number) 0 Inlining cast (signed byte) form_cursor_count#7 ← (snumber)(const signed byte) FORM_CURSOR_BLINK/(snumber)(number) 2 Inlining cast (byte) form_control::return#1 ← (unumber)(number) 0 Inlining cast (byte) form_field_idx#8 ← (unumber)(number) 0 @@ -6723,22 +6697,6 @@ Simplifying constant pointer cast (byte*) 56578 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f -Simplifying constant integer cast $36 -Simplifying constant integer cast $be -Simplifying constant integer cast $58 -Simplifying constant integer cast $db -Simplifying constant integer cast $86 -Simplifying constant integer cast $ff -Simplifying constant integer cast $29 -Simplifying constant integer cast $26 -Simplifying constant integer cast $3b -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast $df -Simplifying constant integer cast $9a -Simplifying constant integer cast $a Simplifying constant pointer cast (byte*) 53306 Simplifying constant pointer cast (byte*) 53307 Simplifying constant pointer cast (byte*) 53317 @@ -6755,22 +6713,6 @@ Simplifying constant pointer cast (byte*) 53302 Simplifying constant pointer cast (byte*) 53303 Simplifying constant pointer cast (byte*) 53309 Simplifying constant pointer cast (byte*) 255 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 17408 Simplifying constant pointer cast (byte*) 18432 @@ -6780,546 +6722,6 @@ Simplifying constant pointer cast (byte*) 22528 Simplifying constant pointer cast (byte*) 24576 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 6144 -Simplifying constant integer cast 8 -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $19 -Simplifying constant integer cast $18 -Simplifying constant integer cast $19 -Simplifying constant integer cast $18 -Simplifying constant integer cast $19 -Simplifying constant integer cast $18 -Simplifying constant integer cast $19 -Simplifying constant integer cast $19 -Simplifying constant integer cast $18 -Simplifying constant integer cast $19 -Simplifying constant integer cast $18 -Simplifying constant integer cast $19 -Simplifying constant integer cast $18 -Simplifying constant integer cast $19 -Simplifying constant integer cast $25 -Simplifying constant integer cast $25 -Simplifying constant integer cast $25 -Simplifying constant integer cast $25 -Simplifying constant integer cast $24 -Simplifying constant integer cast $25 -Simplifying constant integer cast $24 -Simplifying constant integer cast $25 -Simplifying constant integer cast $24 -Simplifying constant integer cast $25 -Simplifying constant integer cast $24 -Simplifying constant integer cast $25 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 8 -Simplifying constant integer cast 9 -Simplifying constant integer cast $a -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $d -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 8 -Simplifying constant integer cast 8 -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $d -Simplifying constant integer cast $d -Simplifying constant integer cast $e -Simplifying constant integer cast $e -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast $a -Simplifying constant integer cast $b -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $d -Simplifying constant integer cast $d -Simplifying constant integer cast $e -Simplifying constant integer cast $e -Simplifying constant integer cast $a -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast $d -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $d -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 5 -Simplifying constant integer cast 0 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 9 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 5 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 8 -Simplifying constant integer cast 9 -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast $d -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 8 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 9 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $a -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 9 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 9 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $a -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $a -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $b -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 @@ -7357,30 +6759,6 @@ Simplifying constant integer cast $21 Simplifying constant integer cast $22 Simplifying constant integer cast $23 Simplifying constant integer cast 0 -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 -Simplifying constant integer cast $ff -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $c7 -Simplifying constant integer cast $c7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $64 -Simplifying constant integer cast $c7 -Simplifying constant integer cast $64 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $55 -Simplifying constant integer cast $aa -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -7390,9 +6768,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -7407,7 +6782,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast $ff -Simplifying constant integer cast $80 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -7474,7 +6848,6 @@ Simplifying constant integer cast 8 Simplifying constant integer cast 9 Simplifying constant integer cast $a Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 3 @@ -7492,8 +6865,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -7534,7 +6905,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast $10 Simplifying constant integer cast 3 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $4000 @@ -7560,8 +6930,6 @@ Simplifying constant integer cast $f Simplifying constant integer cast $4000 Simplifying constant integer cast $4000 Simplifying constant integer cast $3fff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -7590,14 +6958,11 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast (const signed byte) FORM_CURSOR_BLINK/(snumber)(number) 2 Simplifying constant integer cast 2 Simplifying constant integer cast $28 Simplifying constant integer cast *((const byte*) form_line_hi + (byte) form_field_ptr::y#0) Simplifying constant integer cast *((const byte*) form_line_lo + (byte) form_field_ptr::y#0) Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast (const signed byte) FORM_CURSOR_BLINK/(snumber)(number) 2 Simplifying constant integer cast 2 Simplifying constant integer cast $80 @@ -7662,9 +7027,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -7679,7 +7041,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -7731,7 +7092,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 @@ -7749,7 +7109,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -7789,7 +7148,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $4000 @@ -7813,8 +7171,6 @@ Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $3fff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -7841,10 +7197,8 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 2 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 2 Finalized unsigned number type (byte) $80 @@ -8778,7 +8132,7 @@ Constant (const byte*) render_preset_name::name#11 = render_preset_name::$22 Constant (const byte*) render_preset_name::name#12 = render_preset_name::$23 Constant (const byte*) print_str_at::at#1 = FORM_SCREEN+(byte)$28*2+$a Constant (const byte) gfx_mode::dtv_control#0 = 0 -Constant (const byte) gfx_mode::vic_control#0 = VIC_DEN|VIC_RSEL|3 +Constant (const byte) gfx_mode::vic_control#0 = (byte)VIC_DEN|VIC_RSEL|3 Constant (const byte) gfx_mode::vic_control2#0 = VIC_CSEL Constant (const byte*) gfx_mode::col#0 = COLS Constant (const byte) gfx_mode::cy#0 = 0 @@ -8852,7 +8206,7 @@ Constant (const byte*) print_str_lines::str#2 = FORM_TEXT Constant (const byte*) form_set_screen::screen#0 = FORM_SCREEN Constant (const byte) form_mode::i#0 = 0 Constant (const byte) form_field_idx#34 = 0 -Constant (const signed byte) form_cursor_count#26 = FORM_CURSOR_BLINK/2 +Constant (const signed byte) form_cursor_count#26 = (signed byte)FORM_CURSOR_BLINK/2 Constant (const byte) form_set_screen::y#0 = 0 Constant (const byte) form_render_values::idx#0 = 0 Constant (const signed byte) form_cursor_count#6 = FORM_CURSOR_BLINK @@ -9054,6 +8408,8 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) bitmap_clear::bitmap#0 ← (byte*)(word~) bitmap_clear::$3 Inlining cast (byte*) form_field_ptr::line#0 ← (byte*)(word~) form_field_ptr::$2 Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 +Simplifying constant integer cast (const signed byte) FORM_CURSOR_BLINK/(signed byte) 2 Simplifying constant integer cast 8 Simplifying constant integer cast 8 Simplifying constant integer cast 0 @@ -27651,19 +27007,19 @@ FINAL SYMBOL TABLE (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) COLS = (byte*) 55296 -(const byte) DTV_BORDER_OFF = (number) 2 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 -(const dword) DTV_COLOR_BANK_DEFAULT = (number) $1d800 +(const byte) DTV_BORDER_OFF = (byte) 2 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 +(const dword) DTV_COLOR_BANK_DEFAULT = (dword) $1d800 (const byte*) DTV_COLOR_BANK_HI = (byte*) 53303 (const byte*) DTV_COLOR_BANK_LO = (byte*) 53302 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) DTV_GRAPHICS_VIC_BANK = (byte*) 53309 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 -(const byte) DTV_OVERSCAN = (number) 8 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 +(const byte) DTV_OVERSCAN = (byte) 8 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte) 0, (byte) $f, (byte) $36, (byte) $be, (byte) $58, (byte) $db, (byte) $86, (byte) $ff, (byte) $29, (byte) $26, (byte) $3b, (byte) 5, (byte) 7, (byte) $df, (byte) $9a, (byte) $a } (const byte*) DTV_PLANEA_MODULO_HI = (byte*) 53305 @@ -27680,50 +27036,50 @@ FINAL SYMBOL TABLE (const byte*) DTV_PLANEB_STEP = (byte*) 53324 (const byte*) FORM_CHARSET = (byte*) 6144 (const byte*) FORM_COLS[] = (string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ @aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm @ nnnnnnnnnnnn jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -(const signed byte) FORM_CURSOR_BLINK = (number) $28 +(const signed byte) FORM_CURSOR_BLINK = (signed byte) $28 (const byte*) FORM_SCREEN = (byte*) 1024 (const byte*) FORM_TEXT[] = (string) " C64 DTV Graphics Mode Explorer @ @ PRESET 0 Standard Charset @ @ CONTROL PLANE A VIC II @ bmm 0 pattern p0 screen s0 @ mcm 0 start 00 gfx g0 @ ecm 0 step 00 colors c0 @ hicolor 0 modulo 00 @ linear 0 COLORS @ color off 0 PLANE B palet 0 @ chunky 0 pattern p0 bgcol0 00 @ border off 0 start 00 bgcol1 00 @ overscan 0 step 00 bgcol2 00 @ modulo 00 bgcol3 00 @" -(const byte) KEY_COMMODORE = (number) $3d -(const byte) KEY_CRSR_DOWN = (number) 7 -(const byte) KEY_CRSR_RIGHT = (number) 2 -(const byte) KEY_CTRL = (number) $3a -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_MODIFIER_COMMODORE = (number) 8 -(const byte) KEY_MODIFIER_CTRL = (number) 4 -(const byte) KEY_MODIFIER_LSHIFT = (number) 1 -(const byte) KEY_MODIFIER_RSHIFT = (number) 2 +(const byte) KEY_COMMODORE = (byte) $3d +(const byte) KEY_CRSR_DOWN = (byte) 7 +(const byte) KEY_CRSR_RIGHT = (byte) 2 +(const byte) KEY_CTRL = (byte) $3a +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_MODIFIER_COMMODORE = (byte) 8 +(const byte) KEY_MODIFIER_CTRL = (byte) 4 +(const byte) KEY_MODIFIER_LSHIFT = (byte) 1 +(const byte) KEY_MODIFIER_RSHIFT = (byte) 2 (const byte) KEY_MODIFIER_SHIFT = (const byte) KEY_MODIFIER_LSHIFT|(const byte) KEY_MODIFIER_RSHIFT -(const byte) KEY_RSHIFT = (number) $34 -(const byte) KEY_SPACE = (number) $3c -(const dword) PLANE_8BPP_CHUNKY = (number) $20000 -(const dword) PLANE_BLANK = (number) $38000 -(const dword) PLANE_CHARSET8 = (number) $3c000 -(const dword) PLANE_FULL = (number) $3a000 -(const dword) PLANE_HORISONTAL = (number) $30000 -(const dword) PLANE_HORISONTAL2 = (number) $34000 -(const dword) PLANE_VERTICAL = (number) $32000 -(const dword) PLANE_VERTICAL2 = (number) $36000 +(const byte) KEY_RSHIFT = (byte) $34 +(const byte) KEY_SPACE = (byte) $3c +(const dword) PLANE_8BPP_CHUNKY = (dword) $20000 +(const dword) PLANE_BLANK = (dword) $38000 +(const dword) PLANE_CHARSET8 = (dword) $3c000 +(const dword) PLANE_FULL = (dword) $3a000 +(const dword) PLANE_HORISONTAL = (dword) $30000 +(const dword) PLANE_HORISONTAL2 = (dword) $34000 +(const dword) PLANE_VERTICAL = (dword) $32000 +(const dword) PLANE_VERTICAL2 = (dword) $36000 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_BITMAP = (byte*) 24576 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CHARSET_ROM = (byte*) 22528 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) VIC_SCREEN0 = (byte*) 16384 (const byte*) VIC_SCREEN1 = (byte*) 17408 (const byte*) VIC_SCREEN2 = (byte*) 18432 diff --git a/src/test/ref/c64dtv-gfxexplorer.sym b/src/test/ref/c64dtv-gfxexplorer.sym index 3e0741a3e..9b85ffa60 100644 --- a/src/test/ref/c64dtv-gfxexplorer.sym +++ b/src/test/ref/c64dtv-gfxexplorer.sym @@ -15,19 +15,19 @@ (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) COLS = (byte*) 55296 -(const byte) DTV_BORDER_OFF = (number) 2 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 -(const dword) DTV_COLOR_BANK_DEFAULT = (number) $1d800 +(const byte) DTV_BORDER_OFF = (byte) 2 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 +(const dword) DTV_COLOR_BANK_DEFAULT = (dword) $1d800 (const byte*) DTV_COLOR_BANK_HI = (byte*) 53303 (const byte*) DTV_COLOR_BANK_LO = (byte*) 53302 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) DTV_GRAPHICS_VIC_BANK = (byte*) 53309 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 -(const byte) DTV_OVERSCAN = (number) 8 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 +(const byte) DTV_OVERSCAN = (byte) 8 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte) 0, (byte) $f, (byte) $36, (byte) $be, (byte) $58, (byte) $db, (byte) $86, (byte) $ff, (byte) $29, (byte) $26, (byte) $3b, (byte) 5, (byte) 7, (byte) $df, (byte) $9a, (byte) $a } (const byte*) DTV_PLANEA_MODULO_HI = (byte*) 53305 @@ -44,50 +44,50 @@ (const byte*) DTV_PLANEB_STEP = (byte*) 53324 (const byte*) FORM_CHARSET = (byte*) 6144 (const byte*) FORM_COLS[] = (string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ @aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm ooooooooo @ nnnnnnnnnnnn mmmmmmmmmm @ nnnnnnnnnnnn jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @ nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -(const signed byte) FORM_CURSOR_BLINK = (number) $28 +(const signed byte) FORM_CURSOR_BLINK = (signed byte) $28 (const byte*) FORM_SCREEN = (byte*) 1024 (const byte*) FORM_TEXT[] = (string) " C64 DTV Graphics Mode Explorer @ @ PRESET 0 Standard Charset @ @ CONTROL PLANE A VIC II @ bmm 0 pattern p0 screen s0 @ mcm 0 start 00 gfx g0 @ ecm 0 step 00 colors c0 @ hicolor 0 modulo 00 @ linear 0 COLORS @ color off 0 PLANE B palet 0 @ chunky 0 pattern p0 bgcol0 00 @ border off 0 start 00 bgcol1 00 @ overscan 0 step 00 bgcol2 00 @ modulo 00 bgcol3 00 @" -(const byte) KEY_COMMODORE = (number) $3d -(const byte) KEY_CRSR_DOWN = (number) 7 -(const byte) KEY_CRSR_RIGHT = (number) 2 -(const byte) KEY_CTRL = (number) $3a -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_MODIFIER_COMMODORE = (number) 8 -(const byte) KEY_MODIFIER_CTRL = (number) 4 -(const byte) KEY_MODIFIER_LSHIFT = (number) 1 -(const byte) KEY_MODIFIER_RSHIFT = (number) 2 +(const byte) KEY_COMMODORE = (byte) $3d +(const byte) KEY_CRSR_DOWN = (byte) 7 +(const byte) KEY_CRSR_RIGHT = (byte) 2 +(const byte) KEY_CTRL = (byte) $3a +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_MODIFIER_COMMODORE = (byte) 8 +(const byte) KEY_MODIFIER_CTRL = (byte) 4 +(const byte) KEY_MODIFIER_LSHIFT = (byte) 1 +(const byte) KEY_MODIFIER_RSHIFT = (byte) 2 (const byte) KEY_MODIFIER_SHIFT = (const byte) KEY_MODIFIER_LSHIFT|(const byte) KEY_MODIFIER_RSHIFT -(const byte) KEY_RSHIFT = (number) $34 -(const byte) KEY_SPACE = (number) $3c -(const dword) PLANE_8BPP_CHUNKY = (number) $20000 -(const dword) PLANE_BLANK = (number) $38000 -(const dword) PLANE_CHARSET8 = (number) $3c000 -(const dword) PLANE_FULL = (number) $3a000 -(const dword) PLANE_HORISONTAL = (number) $30000 -(const dword) PLANE_HORISONTAL2 = (number) $34000 -(const dword) PLANE_VERTICAL = (number) $32000 -(const dword) PLANE_VERTICAL2 = (number) $36000 +(const byte) KEY_RSHIFT = (byte) $34 +(const byte) KEY_SPACE = (byte) $3c +(const dword) PLANE_8BPP_CHUNKY = (dword) $20000 +(const dword) PLANE_BLANK = (dword) $38000 +(const dword) PLANE_CHARSET8 = (dword) $3c000 +(const dword) PLANE_FULL = (dword) $3a000 +(const dword) PLANE_HORISONTAL = (dword) $30000 +(const dword) PLANE_HORISONTAL2 = (dword) $34000 +(const dword) PLANE_VERTICAL = (dword) $32000 +(const dword) PLANE_VERTICAL2 = (dword) $36000 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_BITMAP = (byte*) 24576 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CHARSET_ROM = (byte*) 22528 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (const byte*) VIC_SCREEN0 = (byte*) 16384 (const byte*) VIC_SCREEN1 = (byte*) 17408 (const byte*) VIC_SCREEN2 = (byte*) 18432 diff --git a/src/test/ref/c64dtv-gfxmodes.asm b/src/test/ref/c64dtv-gfxmodes.asm index 802cce2a4..2f6c56ac0 100644 --- a/src/test/ref/c64dtv-gfxmodes.asm +++ b/src/test/ref/c64dtv-gfxmodes.asm @@ -305,9 +305,8 @@ mode_8bppchunkybmm: { lda #VIC_MCM|VIC_CSEL sta VIC_CONTROL2 // Linear Graphics Plane B Counter - lda #PLANEB&$ffff sta DTV_PLANEB_START_MI lda #>$10 sta DTV_PLANEB_START_HI diff --git a/src/test/ref/c64dtv-gfxmodes.cfg b/src/test/ref/c64dtv-gfxmodes.cfg index d6475bc3d..9aefff39a 100644 --- a/src/test/ref/c64dtv-gfxmodes.cfg +++ b/src/test/ref/c64dtv-gfxmodes.cfg @@ -224,8 +224,8 @@ mode_8bppchunkybmm: scope:[mode_8bppchunkybmm] from menu::@28 [119] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_CHUNKY|(const byte) DTV_COLORRAM_OFF [120] *((const byte*) VIC_CONTROL) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [121] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL - [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB - [123] *((const byte*) DTV_PLANEB_START_MI) ← ><(const dword) mode_8bppchunkybmm::PLANEB + [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 + [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB [125] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 [126] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index c4b5b8ab5..33e64ba6f 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -386,7 +386,7 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (void()) bitmap_init((byte*) bitmap_init::bitmap) bitmap_init: scope:[bitmap_init] from mode_stdbitmap::@6 (byte*) bitmap_init::bitmap#2 ← phi( mode_stdbitmap::@6/(byte*) bitmap_init::bitmap#0 ) - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -488,8 +488,8 @@ bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3 bitmap_plot: scope:[bitmap_plot] from bitmap_line_xdyd::@1 bitmap_line_xdyi::@1 bitmap_line_ydxd::@1 bitmap_line_ydxi::@1 (byte) bitmap_plot::y#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::y#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::y#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::y#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::y#2 ) (byte) bitmap_plot::x#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::x#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::x#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::x#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::x#2 ) - (word) bitmap_plot::plotter_x#0 ← ((word)) { *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } - (word) bitmap_plot::plotter_y#0 ← ((word)) { *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } + (word) bitmap_plot::plotter_x#0 ← (word){ *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } + (word) bitmap_plot::plotter_y#0 ← (word){ *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } (word~) bitmap_plot::$0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0 (byte~) bitmap_plot::$1 ← *((byte*) bitmap_plot::plotter#0) | *((const byte*) bitmap_plot_bit + (byte) bitmap_plot::x#4) @@ -1511,7 +1511,7 @@ menu::@77: scope:[menu] from menu::@48 (byte*) print_char_cursor#69 ← phi( @18/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#67 ← phi( @18/(byte*) print_line_cursor#0 ) (byte*) print_screen#49 ← phi( @18/(byte*) print_screen#0 ) - (byte) dtv_control#15 ← (number) 0 + (byte) dtv_control#15 ← (byte) 0 to:@72 (void()) mode_ctrl() @@ -2027,7 +2027,7 @@ mode_stdbitmap::@13: scope:[mode_stdbitmap] from mode_stdbitmap::@6 to:mode_stdbitmap::@14 mode_stdbitmap::@14: scope:[mode_stdbitmap] from mode_stdbitmap::@13 (byte) dtv_control#178 ← phi( mode_stdbitmap::@13/(byte) dtv_control#193 ) - (byte) mode_stdbitmap::l#0 ← (number) 0 + (byte) mode_stdbitmap::l#0 ← (byte) 0 to:mode_stdbitmap::@7 mode_stdbitmap::@7: scope:[mode_stdbitmap] from mode_stdbitmap::@14 mode_stdbitmap::@15 (byte) dtv_control#150 ← phi( mode_stdbitmap::@14/(byte) dtv_control#178 mode_stdbitmap::@15/(byte) dtv_control#179 ) @@ -2821,7 +2821,7 @@ mode_8bpppixelcell::@6: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@5 *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_CHARROM (byte*) mode_8bpppixelcell::gfxb#0 ← (const byte*) mode_8bpppixelcell::PLANEB (byte*) mode_8bpppixelcell::chargen#0 ← (const byte*) mode_8bpppixelcell::CHARGEN - (byte) mode_8bpppixelcell::col#0 ← (number) 0 + (byte) mode_8bpppixelcell::col#0 ← (byte) 0 (byte) mode_8bpppixelcell::ch#0 ← (byte) 0 to:mode_8bpppixelcell::@7 mode_8bpppixelcell::@7: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@13 mode_8bpppixelcell::@6 @@ -2852,7 +2852,7 @@ mode_8bpppixelcell::@9: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@10 (byte) mode_8bpppixelcell::col#4 ← phi( mode_8bpppixelcell::@10/(byte) mode_8bpppixelcell::col#1 mode_8bpppixelcell::@8/(byte) mode_8bpppixelcell::col#5 ) (byte*) mode_8bpppixelcell::gfxb#4 ← phi( mode_8bpppixelcell::@10/(byte*) mode_8bpppixelcell::gfxb#1 mode_8bpppixelcell::@8/(byte*) mode_8bpppixelcell::gfxb#5 ) (byte) mode_8bpppixelcell::bits#2 ← phi( mode_8bpppixelcell::@10/(byte) mode_8bpppixelcell::bits#1 mode_8bpppixelcell::@8/(byte) mode_8bpppixelcell::bits#0 ) - (byte) mode_8bpppixelcell::c#0 ← (number) 0 + (byte) mode_8bpppixelcell::c#0 ← (byte) 0 (number~) mode_8bpppixelcell::$8 ← (byte) mode_8bpppixelcell::bits#2 & (number) $80 (bool~) mode_8bpppixelcell::$9 ← (number~) mode_8bpppixelcell::$8 != (number) 0 (bool~) mode_8bpppixelcell::$10 ← ! (bool~) mode_8bpppixelcell::$9 @@ -3066,29 +3066,29 @@ SYMBOL TABLE SSA (const byte*) BGCOL2 = (byte*)(number) $d022 (const byte*) BGCOL3 = (byte*)(number) $d023 (const byte*) BGCOL4 = (byte*)(number) $d024 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_PORT_A = (byte*)(number) $dc00 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const byte*) COLS = (byte*)(number) $d800 -(const byte) DTV_BORDER_OFF = (number) 2 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 -(const dword) DTV_COLOR_BANK_DEFAULT = (number) $1d800 +(const byte) DTV_BORDER_OFF = (byte) 2 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 +(const dword) DTV_COLOR_BANK_DEFAULT = (dword) $1d800 (const byte*) DTV_COLOR_BANK_HI = (byte*)(number) $d037 (const byte*) DTV_COLOR_BANK_LO = (byte*)(number) $d036 (const byte*) DTV_CONTROL = (byte*)(number) $d03c (const byte*) DTV_FEATURE = (byte*)(number) $d03f -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) DTV_GRAPHICS_VIC_BANK = (byte*)(number) $d03d -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 -(const byte) DTV_OVERSCAN = (number) 8 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 +(const byte) DTV_OVERSCAN = (byte) 8 (const byte*) DTV_PALETTE = (byte*)(number) $d200 -(const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte)(number) 0, (byte)(number) $f, (byte)(number) $36, (byte)(number) $be, (byte)(number) $58, (byte)(number) $db, (byte)(number) $86, (byte)(number) $ff, (byte)(number) $29, (byte)(number) $26, (byte)(number) $3b, (byte)(number) 5, (byte)(number) 7, (byte)(number) $df, (byte)(number) $9a, (byte)(number) $a } +(const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte) 0, (byte) $f, (byte) $36, (byte) $be, (byte) $58, (byte) $db, (byte) $86, (byte) $ff, (byte) $29, (byte) $26, (byte) $3b, (byte) 5, (byte) 7, (byte) $df, (byte) $9a, (byte) $a } (const byte*) DTV_PLANEA_MODULO_HI = (byte*)(number) $d039 (const byte*) DTV_PLANEA_MODULO_LO = (byte*)(number) $d038 (const byte*) DTV_PLANEA_START_HI = (byte*)(number) $d045 @@ -3101,46 +3101,46 @@ SYMBOL TABLE SSA (const byte*) DTV_PLANEB_START_LO = (byte*)(number) $d049 (const byte*) DTV_PLANEB_START_MI = (byte*)(number) $d04a (const byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c -(const byte) GREEN = (number) 5 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_A = (number) $a -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_D = (number) $12 -(const byte) KEY_E = (number) $e -(const byte) KEY_H = (number) $1d -(const byte) KEY_L = (number) $2a -(const byte) KEY_O = (number) $26 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_U = (number) $1e -(const byte) LIGHT_GREEN = (number) $d +(const byte) GREEN = (byte) 5 +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_A = (byte) $a +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_D = (byte) $12 +(const byte) KEY_E = (byte) $e +(const byte) KEY_H = (byte) $1d +(const byte) KEY_L = (byte) $2a +(const byte) KEY_O = (byte) $26 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_U = (byte) $1e +(const byte) LIGHT_GREEN = (byte) $d (const byte*) MENU_TEXT[] = (string) "C64DTV Graphics Modes CCLHBME@ OHIIMCC@ LUNCMMM@----------------------------------------@1. Standard Char (V) 0000000@2. Extended Color Char (V) 0000001@3. Multicolor Char (V) 0000010@4. Standard Bitmap (V) 0000100@5. Multicolor Bitmap (V) 0000110@6. High Color Standard Char (H) 0001000@7. High Extended Color Char (H) 0001001@8. High Multicolor Char (H) 0001010@9. High Multicolor Bitmap (H) 0001110@a. Sixs Fred 2 (D) 0010111@b. Two Plane Bitmap (D) 0011101@c. Sixs Fred (2 Plane MC BM) (D) 0011111@d. 8bpp Pixel Cell (D) 0111011@e. Chunky 8bpp Bitmap (D) 1111011@----------------------------------------@ (V) vicII (H) vicII+hicol (D) c64dtv@" (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*)(number) $d012 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*)(number) $d011 (const byte*) VIC_CONTROL2 = (byte*)(number) $d016 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (byte*~) bitmap_clear::$0 (bool~) bitmap_clear::$1 @@ -4004,7 +4004,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#9 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -4019,7 +4019,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() (label) main::@1 (label) main::@2 @@ -4196,7 +4196,7 @@ SYMBOL TABLE SSA (label) mode_8bppchunkybmm::@8 (label) mode_8bppchunkybmm::@9 (label) mode_8bppchunkybmm::@return -(const dword) mode_8bppchunkybmm::PLANEB = (number) $20000 +(const dword) mode_8bppchunkybmm::PLANEB = (dword) $20000 (byte) mode_8bppchunkybmm::c (byte) mode_8bppchunkybmm::c#0 (byte*) mode_8bppchunkybmm::gfxb @@ -4768,7 +4768,7 @@ SYMBOL TABLE SSA (byte) mode_sixsfred::i#2 (byte) mode_sixsfred::row (byte) mode_sixsfred::row#0 -(const byte*) mode_sixsfred::row_bitmask[] = { (byte)(number) 0, (byte)(number) $55, (byte)(number) $aa, (byte)(number) $ff } +(const byte*) mode_sixsfred::row_bitmask[] = { (byte) 0, (byte) $55, (byte) $aa, (byte) $ff } (void()) mode_sixsfred2() (bool~) mode_sixsfred2::$1 (bool~) mode_sixsfred2::$10 @@ -4856,7 +4856,7 @@ SYMBOL TABLE SSA (byte) mode_sixsfred2::i#2 (byte) mode_sixsfred2::row (byte) mode_sixsfred2::row#0 -(const byte*) mode_sixsfred2::row_bitmask[] = { (byte)(number) 0, (byte)(number) $55, (byte)(number) $aa, (byte)(number) $ff } +(const byte*) mode_sixsfred2::row_bitmask[] = { (byte) 0, (byte) $55, (byte) $aa, (byte) $ff } (void()) mode_stdbitmap() (bool~) mode_stdbitmap::$10 (bool~) mode_stdbitmap::$11 @@ -4916,8 +4916,8 @@ SYMBOL TABLE SSA (byte) mode_stdbitmap::l#3 (byte) mode_stdbitmap::l#4 (const byte) mode_stdbitmap::lines_cnt = (byte) 9 -(const byte*) mode_stdbitmap::lines_x[] = { (byte)(number) 0, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) 0, (byte)(number) 0, (byte)(number) $80, (byte)(number) $ff, (byte)(number) $80, (byte)(number) 0, (byte)(number) $80 } -(const byte*) mode_stdbitmap::lines_y[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) $c7, (byte)(number) $c7, (byte)(number) 0, (byte)(number) 0, (byte)(number) $64, (byte)(number) $c7, (byte)(number) $64, (byte)(number) 0 } +(const byte*) mode_stdbitmap::lines_x[] = { (byte) 0, (byte) $ff, (byte) $ff, (byte) 0, (byte) 0, (byte) $80, (byte) $ff, (byte) $80, (byte) 0, (byte) $80 } +(const byte*) mode_stdbitmap::lines_y[] = { (byte) 0, (byte) 0, (byte) $c7, (byte) $c7, (byte) 0, (byte) 0, (byte) $64, (byte) $c7, (byte) $64, (byte) 0 } (void()) mode_stdchar() (bool~) mode_stdchar::$1 (byte~) mode_stdchar::$2 @@ -5392,7 +5392,6 @@ Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#20 & (number) 7 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#20 & (unumber)(number) 7 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#20 >> (number) 3 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 @@ -5447,7 +5446,6 @@ Adding number conversion cast (unumber) 0 in (bool~) menu::$38 ← (byte~) menu: Adding number conversion cast (unumber) 0 in (bool~) menu::$42 ← (byte~) menu::$41 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) menu::$46 ← (byte~) menu::$45 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) menu::$50 ← (byte~) menu::$49 != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) dtv_control#15 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) mode_ctrl::$0 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in (bool~) mode_ctrl::$2 ← (byte~) mode_ctrl::$1 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mode_ctrl::$5 ← (byte~) mode_ctrl::$4 != (number) 0 @@ -5550,7 +5548,6 @@ Adding number conversion cast (unumber) mode_stdbitmap::$6 in (number~) mode_std Adding number conversion cast (unumber) $10 in (number~) mode_stdbitmap::$7 ← (byte) mode_stdbitmap::col#0 * (number) $10 Adding number conversion cast (unumber) mode_stdbitmap::$7 in (number~) mode_stdbitmap::$7 ← (byte) mode_stdbitmap::col#0 * (unumber)(number) $10 Adding number conversion cast (unumber) mode_stdbitmap::$8 in (number~) mode_stdbitmap::$8 ← (unumber~) mode_stdbitmap::$7 | (byte) mode_stdbitmap::col2#0 -Adding number conversion cast (unumber) 0 in (byte) mode_stdbitmap::l#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) mode_stdbitmap::$12 ← (byte) mode_stdbitmap::l#3 + (number) 1 Adding number conversion cast (unumber) mode_stdbitmap::$12 in (number~) mode_stdbitmap::$12 ← (byte) mode_stdbitmap::l#3 + (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (number~) mode_stdbitmap::$13 ← (byte) mode_stdbitmap::l#3 + (number) 1 @@ -5711,8 +5708,6 @@ Adding number conversion cast (unumber) mode_8bpppixelcell::$3 in (number~) mode Adding number conversion cast (unumber) $f in (number~) mode_8bpppixelcell::$4 ← (byte) mode_8bpppixelcell::ax#2 & (number) $f Adding number conversion cast (unumber) mode_8bpppixelcell::$4 in (number~) mode_8bpppixelcell::$4 ← (byte) mode_8bpppixelcell::ax#2 & (unumber)(number) $f Adding number conversion cast (unumber) mode_8bpppixelcell::$5 in (number~) mode_8bpppixelcell::$5 ← (unumber~) mode_8bpppixelcell::$3 | (unumber~) mode_8bpppixelcell::$4 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::col#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) mode_8bpppixelcell::$8 ← (byte) mode_8bpppixelcell::bits#2 & (number) $80 Adding number conversion cast (unumber) mode_8bpppixelcell::$8 in (number~) mode_8bpppixelcell::$8 ← (byte) mode_8bpppixelcell::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) mode_8bpppixelcell::$9 ← (unumber~) mode_8bpppixelcell::$8 != (number) 0 @@ -5747,7 +5742,6 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 @@ -5757,7 +5751,6 @@ Inlining cast *((const byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byt Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast (byte) dtv_control#15 ← (unumber)(number) 0 Inlining cast (byte) mode_ctrl::ctrl#7 ← (unumber)(number) 0 Inlining cast (byte) dtv_control#18 ← (unumber)(number) 0 Inlining cast *((const byte*) DTV_CONTROL) ← (unumber)(number) 0 @@ -5787,7 +5780,6 @@ Inlining cast *((const byte*) DTV_CONTROL) ← (unumber)(number) 0 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((const byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const byte*) mode_stdbitmap::BITMAP/(unumber)(number) $4000 Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast (byte) mode_stdbitmap::l#0 ← (unumber)(number) 0 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((const byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const byte*) mode_hicolstdchar::CHARSET/(unumber)(number) $4000 Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -5855,8 +5847,6 @@ Inlining cast *((const byte*) DTV_PLANEB_STEP) ← (unumber)(number) 0 Inlining cast *((const byte*) DTV_PLANEB_MODULO_LO) ← (unumber)(number) 0 Inlining cast *((const byte*) DTV_PLANEB_MODULO_HI) ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::col#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::c#0 ← (unumber)(number) 0 Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const byte*) DTV_PLANEB_STEP) ← (unumber)(number) 8 Inlining cast *((const byte*) DTV_PLANEB_MODULO_LO) ← (unumber)(number) 0 @@ -5885,22 +5875,6 @@ Simplifying constant pointer cast (byte*) 56578 Simplifying constant pointer cast (byte*) 53311 Simplifying constant pointer cast (byte*) 53308 Simplifying constant pointer cast (byte*) 53760 -Simplifying constant integer cast 0 -Simplifying constant integer cast $f -Simplifying constant integer cast $36 -Simplifying constant integer cast $be -Simplifying constant integer cast $58 -Simplifying constant integer cast $db -Simplifying constant integer cast $86 -Simplifying constant integer cast $ff -Simplifying constant integer cast $29 -Simplifying constant integer cast $26 -Simplifying constant integer cast $3b -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast $df -Simplifying constant integer cast $9a -Simplifying constant integer cast $a Simplifying constant pointer cast (byte*) 53306 Simplifying constant pointer cast (byte*) 53307 Simplifying constant pointer cast (byte*) 53317 @@ -5917,22 +5891,6 @@ Simplifying constant pointer cast (byte*) 53302 Simplifying constant pointer cast (byte*) 53303 Simplifying constant pointer cast (byte*) 53309 Simplifying constant pointer cast (byte*) 255 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 32768 Simplifying constant pointer cast (byte*) 38912 Simplifying constant pointer cast (byte*) 32768 @@ -5946,26 +5904,6 @@ Simplifying constant pointer cast (byte*) 36864 Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 24576 -Simplifying constant integer cast 0 -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 -Simplifying constant integer cast $ff -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $c7 -Simplifying constant integer cast $c7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $64 -Simplifying constant integer cast $c7 -Simplifying constant integer cast $64 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 32768 Simplifying constant pointer cast (byte*) 36864 Simplifying constant pointer cast (byte*) 33792 @@ -5981,17 +5919,9 @@ Simplifying constant pointer cast (byte*) 32768 Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 24576 Simplifying constant pointer cast (byte*) 32768 -Simplifying constant integer cast 0 -Simplifying constant integer cast $55 -Simplifying constant integer cast $aa -Simplifying constant integer cast $ff Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 24576 Simplifying constant pointer cast (byte*) 32768 -Simplifying constant integer cast 0 -Simplifying constant integer cast $55 -Simplifying constant integer cast $aa -Simplifying constant integer cast $ff Simplifying constant pointer cast (byte*) 15360 Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 53248 @@ -6004,7 +5934,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 Simplifying constant integer cast 7 Simplifying constant integer cast 3 -Simplifying constant integer cast $80 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -6059,7 +5988,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -6151,7 +6079,6 @@ Simplifying constant integer cast $400 Simplifying constant integer cast $f Simplifying constant integer cast $f Simplifying constant integer cast $10 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $10000 @@ -6286,8 +6213,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -6310,7 +6235,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -6356,7 +6280,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -6440,7 +6363,6 @@ Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (dword) $10000 @@ -6565,8 +6487,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -7597,6 +7517,8 @@ Simplifying constant evaluating to zero <(const byte*) mode_sixsfred2::PLANEB in Simplifying constant evaluating to zero >(const byte*) mode_sixsfred2::COLORS/(word) $400 in [1256] *((const byte*) DTV_COLOR_BANK_HI) ← >(const byte*) mode_sixsfred2::COLORS/(word) $400 Simplifying constant evaluating to zero <(const byte*) mode_8bpppixelcell::PLANEA in [1327] *((const byte*) DTV_PLANEA_START_LO) ← <(const byte*) mode_8bpppixelcell::PLANEA Simplifying constant evaluating to zero <(const byte*) mode_8bpppixelcell::PLANEB in [1333] *((const byte*) DTV_PLANEB_START_LO) ← <(const byte*) mode_8bpppixelcell::PLANEB +Simplifying constant evaluating to zero <<(const dword) mode_8bppchunkybmm::PLANEB in [1414] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB +Simplifying constant evaluating to zero ><(const dword) mode_8bppchunkybmm::PLANEB in [1415] *((const byte*) DTV_PLANEB_START_MI) ← ><(const dword) mode_8bppchunkybmm::PLANEB Successful SSA optimization PassNSimplifyConstantZero Simplifying expression containing zero bitmap_plot_xhi in [150] (word~) bitmap_clear::$3 ← *((const byte*) bitmap_plot_xhi + (byte) 0) w= *((const byte*) bitmap_plot_xlo + (byte) 0) Simplifying expression containing zero bitmap_plot_xlo in [150] (word~) bitmap_clear::$3 ← *((const byte*) bitmap_plot_xhi) w= *((const byte*) bitmap_plot_xlo + (byte) 0) @@ -9140,8 +9062,8 @@ mode_8bppchunkybmm: scope:[mode_8bppchunkybmm] from menu::@28 [119] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_CHUNKY|(const byte) DTV_COLORRAM_OFF [120] *((const byte*) VIC_CONTROL) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [121] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL - [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB - [123] *((const byte*) DTV_PLANEB_START_MI) ← ><(const dword) mode_8bppchunkybmm::PLANEB + [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 + [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB [125] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 [126] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 @@ -12763,12 +12685,12 @@ mode_8bppchunkybmm: { // [121] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL -- _deref_pbuc1=vbuc2 lda #VIC_MCM|VIC_CSEL sta VIC_CONTROL2 - // [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 + // [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Linear Graphics Plane B Counter - lda #<(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 - lda #>PLANEB&$ffff + // [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 sta DTV_PLANEB_START_MI // [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 lda #>$10 @@ -17433,8 +17355,8 @@ Statement [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN [ menu::c#2 ] Statement [119] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_CHUNKY|(const byte) DTV_COLORRAM_OFF [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [120] *((const byte*) VIC_CONTROL) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [121] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [123] *((const byte*) DTV_PLANEB_START_MI) ← ><(const dword) mode_8bppchunkybmm::PLANEB [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a +Statement [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a +Statement [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [125] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [126] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a @@ -17899,8 +17821,8 @@ Statement [117] *((byte*) menu::c#2) ← (const byte) LIGHT_GREEN [ menu::c#2 ] Statement [119] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_CHUNKY|(const byte) DTV_COLORRAM_OFF [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [120] *((const byte*) VIC_CONTROL) ← (const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [121] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a -Statement [123] *((const byte*) DTV_PLANEB_START_MI) ← ><(const dword) mode_8bppchunkybmm::PLANEB [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a +Statement [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a +Statement [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [125] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a Statement [126] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2::menu:9::mode_8bppchunkybmm:116 [ ] ) always clobbers reg byte a @@ -19613,12 +19535,12 @@ mode_8bppchunkybmm: { // [121] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL -- _deref_pbuc1=vbuc2 lda #VIC_MCM|VIC_CSEL sta VIC_CONTROL2 - // [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 + // [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Linear Graphics Plane B Counter - lda #<(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 - lda #>PLANEB&$ffff + // [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 -- _deref_pbuc1=vbuc2 + lda #0 sta DTV_PLANEB_START_MI // [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 lda #>$10 @@ -24044,6 +23966,7 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 +Removing instruction lda #0 Removing instruction lda #>0 Removing instruction lda #0 Removing instruction lda #0 @@ -24706,27 +24629,27 @@ FINAL SYMBOL TABLE (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 (const byte*) BGCOL4 = (byte*) 53284 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) COLS = (byte*) 55296 -(const byte) DTV_BORDER_OFF = (number) 2 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 -(const dword) DTV_COLOR_BANK_DEFAULT = (number) $1d800 +(const byte) DTV_BORDER_OFF = (byte) 2 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 +(const dword) DTV_COLOR_BANK_DEFAULT = (dword) $1d800 (const byte*) DTV_COLOR_BANK_HI = (byte*) 53303 (const byte*) DTV_COLOR_BANK_LO = (byte*) 53302 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) DTV_GRAPHICS_VIC_BANK = (byte*) 53309 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 -(const byte) DTV_OVERSCAN = (number) 8 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 +(const byte) DTV_OVERSCAN = (byte) 8 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte) 0, (byte) $f, (byte) $36, (byte) $be, (byte) $58, (byte) $db, (byte) $86, (byte) $ff, (byte) $29, (byte) $26, (byte) $3b, (byte) 5, (byte) 7, (byte) $df, (byte) $9a, (byte) $a } (const byte*) DTV_PLANEA_MODULO_HI = (byte*) 53305 @@ -24741,46 +24664,46 @@ FINAL SYMBOL TABLE (const byte*) DTV_PLANEB_START_LO = (byte*) 53321 (const byte*) DTV_PLANEB_START_MI = (byte*) 53322 (const byte*) DTV_PLANEB_STEP = (byte*) 53324 -(const byte) GREEN = (number) 5 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_A = (number) $a -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_D = (number) $12 -(const byte) KEY_E = (number) $e -(const byte) KEY_H = (number) $1d -(const byte) KEY_L = (number) $2a -(const byte) KEY_O = (number) $26 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_U = (number) $1e -(const byte) LIGHT_GREEN = (number) $d +(const byte) GREEN = (byte) 5 +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_A = (byte) $a +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_D = (byte) $12 +(const byte) KEY_E = (byte) $e +(const byte) KEY_H = (byte) $1d +(const byte) KEY_L = (byte) $2a +(const byte) KEY_O = (byte) $26 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_U = (byte) $1e +(const byte) LIGHT_GREEN = (byte) $d (const byte*) MENU_TEXT[] = (string) "C64DTV Graphics Modes CCLHBME@ OHIIMCC@ LUNCMMM@----------------------------------------@1. Standard Char (V) 0000000@2. Extended Color Char (V) 0000001@3. Multicolor Char (V) 0000010@4. Standard Bitmap (V) 0000100@5. Multicolor Bitmap (V) 0000110@6. High Color Standard Char (H) 0001000@7. High Extended Color Char (H) 0001001@8. High Multicolor Char (H) 0001010@9. High Multicolor Bitmap (H) 0001110@a. Sixs Fred 2 (D) 0010111@b. Two Plane Bitmap (D) 0011101@c. Sixs Fred (2 Plane MC BM) (D) 0011111@d. 8bpp Pixel Cell (D) 0111011@e. Chunky 8bpp Bitmap (D) 1111011@----------------------------------------@ (V) vicII (H) vicII+hicol (D) c64dtv@" (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 @@ -25183,7 +25106,7 @@ FINAL SYMBOL TABLE (label) mode_8bppchunkybmm::@8 (label) mode_8bppchunkybmm::@9 (label) mode_8bppchunkybmm::@return -(const dword) mode_8bppchunkybmm::PLANEB = (number) $20000 +(const dword) mode_8bppchunkybmm::PLANEB = (dword) $20000 (byte) mode_8bppchunkybmm::c (byte) mode_8bppchunkybmm::c#0 reg byte a 2002.0 (byte*) mode_8bppchunkybmm::gfxb @@ -25937,7 +25860,7 @@ reg byte a [ print_str_lines::ch#0 ] FINAL ASSEMBLER -Score: 2307043 +Score: 2307041 // File Comments // Exploring C64DTV Screen Modes @@ -26529,13 +26452,12 @@ mode_8bppchunkybmm: { lda #VIC_MCM|VIC_CSEL sta VIC_CONTROL2 // *DTV_PLANEB_START_LO = < < PLANEB - // [122] *((const byte*) DTV_PLANEB_START_LO) ← <<(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 + // [122] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 // Linear Graphics Plane B Counter - lda # < PLANEB - // [123] *((const byte*) DTV_PLANEB_START_MI) ← ><(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 - lda #>PLANEB&$ffff + // [123] *((const byte*) DTV_PLANEB_START_MI) ← (byte) 0 -- _deref_pbuc1=vbuc2 sta DTV_PLANEB_START_MI // *DTV_PLANEB_START_HI = < > PLANEB // [124] *((const byte*) DTV_PLANEB_START_HI) ← <>(const dword) mode_8bppchunkybmm::PLANEB -- _deref_pbuc1=vbuc2 diff --git a/src/test/ref/c64dtv-gfxmodes.sym b/src/test/ref/c64dtv-gfxmodes.sym index 02f8bab02..1dc0b6652 100644 --- a/src/test/ref/c64dtv-gfxmodes.sym +++ b/src/test/ref/c64dtv-gfxmodes.sym @@ -6,27 +6,27 @@ (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 (const byte*) BGCOL4 = (byte*) 53284 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) COLS = (byte*) 55296 -(const byte) DTV_BORDER_OFF = (number) 2 -(const byte) DTV_CHUNKY = (number) $40 -(const byte) DTV_COLORRAM_OFF = (number) $10 -(const dword) DTV_COLOR_BANK_DEFAULT = (number) $1d800 +(const byte) DTV_BORDER_OFF = (byte) 2 +(const byte) DTV_CHUNKY = (byte) $40 +(const byte) DTV_COLORRAM_OFF = (byte) $10 +(const dword) DTV_COLOR_BANK_DEFAULT = (dword) $1d800 (const byte*) DTV_COLOR_BANK_HI = (byte*) 53303 (const byte*) DTV_COLOR_BANK_LO = (byte*) 53302 (const byte*) DTV_CONTROL = (byte*) 53308 (const byte*) DTV_FEATURE = (byte*) 53311 -(const byte) DTV_FEATURE_ENABLE = (number) 1 +(const byte) DTV_FEATURE_ENABLE = (byte) 1 (const byte*) DTV_GRAPHICS_VIC_BANK = (byte*) 53309 -(const byte) DTV_HIGHCOLOR = (number) 4 -(const byte) DTV_LINEAR = (number) 1 -(const byte) DTV_OVERSCAN = (number) 8 +(const byte) DTV_HIGHCOLOR = (byte) 4 +(const byte) DTV_LINEAR = (byte) 1 +(const byte) DTV_OVERSCAN = (byte) 8 (const byte*) DTV_PALETTE = (byte*) 53760 (const byte*) DTV_PALETTE_DEFAULT[(number) $10] = { (byte) 0, (byte) $f, (byte) $36, (byte) $be, (byte) $58, (byte) $db, (byte) $86, (byte) $ff, (byte) $29, (byte) $26, (byte) $3b, (byte) 5, (byte) 7, (byte) $df, (byte) $9a, (byte) $a } (const byte*) DTV_PLANEA_MODULO_HI = (byte*) 53305 @@ -41,46 +41,46 @@ (const byte*) DTV_PLANEB_START_LO = (byte*) 53321 (const byte*) DTV_PLANEB_START_MI = (byte*) 53322 (const byte*) DTV_PLANEB_STEP = (byte*) 53324 -(const byte) GREEN = (number) 5 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_A = (number) $a -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_D = (number) $12 -(const byte) KEY_E = (number) $e -(const byte) KEY_H = (number) $1d -(const byte) KEY_L = (number) $2a -(const byte) KEY_O = (number) $26 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_U = (number) $1e -(const byte) LIGHT_GREEN = (number) $d +(const byte) GREEN = (byte) 5 +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_A = (byte) $a +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_D = (byte) $12 +(const byte) KEY_E = (byte) $e +(const byte) KEY_H = (byte) $1d +(const byte) KEY_L = (byte) $2a +(const byte) KEY_O = (byte) $26 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_U = (byte) $1e +(const byte) LIGHT_GREEN = (byte) $d (const byte*) MENU_TEXT[] = (string) "C64DTV Graphics Modes CCLHBME@ OHIIMCC@ LUNCMMM@----------------------------------------@1. Standard Char (V) 0000000@2. Extended Color Char (V) 0000001@3. Multicolor Char (V) 0000010@4. Standard Bitmap (V) 0000100@5. Multicolor Bitmap (V) 0000110@6. High Color Standard Char (H) 0001000@7. High Extended Color Char (H) 0001001@8. High Multicolor Char (H) 0001010@9. High Multicolor Bitmap (H) 0001110@a. Sixs Fred 2 (D) 0010111@b. Two Plane Bitmap (D) 0011101@c. Sixs Fred (2 Plane MC BM) (D) 0011111@d. 8bpp Pixel Cell (D) 0111011@e. Chunky 8bpp Bitmap (D) 1111011@----------------------------------------@ (V) vicII (H) vicII+hicol (D) c64dtv@" (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) RASTER = (byte*) 53266 -(const byte) VIC_BMM = (number) $20 +(const byte) VIC_BMM = (byte) $20 (const byte*) VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL2 = (byte*) 53270 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_MCM = (number) $10 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_MCM = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 @@ -483,7 +483,7 @@ (label) mode_8bppchunkybmm::@8 (label) mode_8bppchunkybmm::@9 (label) mode_8bppchunkybmm::@return -(const dword) mode_8bppchunkybmm::PLANEB = (number) $20000 +(const dword) mode_8bppchunkybmm::PLANEB = (dword) $20000 (byte) mode_8bppchunkybmm::c (byte) mode_8bppchunkybmm::c#0 reg byte a 2002.0 (byte*) mode_8bppchunkybmm::gfxb diff --git a/src/test/ref/call-parameter-autocast.log b/src/test/ref/call-parameter-autocast.log index 44ee20dee..c1be05db6 100644 --- a/src/test/ref/call-parameter-autocast.log +++ b/src/test/ref/call-parameter-autocast.log @@ -33,7 +33,7 @@ main::@return: scope:[main] from main::@3 return to:@return @1: scope:[] from @begin - (byte) idx#4 ← (number) 0 + (byte) idx#4 ← (byte) 0 to:@2 (void()) print((word) print::w) @@ -103,19 +103,15 @@ SYMBOL TABLE SSA Fixing inline constructor with main::$3 ← (byte)$12 w= (byte)$34 Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) $1234 in (word) print::w#0 ← (number) $1234 -Adding number conversion cast (unumber) 0 in (byte) idx#4 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) print::w#0 ← (unumber)(number) $1234 -Inlining cast (byte) idx#4 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast $1234 Simplifying constant integer cast $12 Simplifying constant integer cast $34 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (word) $1234 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#0 = (byte) idx#8 Alias (byte) idx#1 = (byte) idx#9 diff --git a/src/test/ref/cast-deref.log b/src/test/ref/cast-deref.log index 8b1829367..7fcf18e6b 100644 --- a/src/test/ref/cast-deref.log +++ b/src/test/ref/cast-deref.log @@ -42,14 +42,10 @@ SYMBOL TABLE SSA (byte) main::i#0 (byte) main::i#1 (byte) main::i#2 -(const signed byte*) main::sbs[] = { (signed byte)(number) -1, (signed byte)(number) -2, (signed byte)(number) -3, (signed byte)(number) -4 } +(const signed byte*) main::sbs[] = { (signed byte) -1, (signed byte) -2, (signed byte) -3, (signed byte) -4 } Inlining cast (byte~) main::$0 ← (byte)*((const signed byte*) main::sbs + (byte) main::i#2) Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast -1 -Simplifying constant integer cast -2 -Simplifying constant integer cast -3 -Simplifying constant integer cast -4 Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification Simple Condition (bool~) main::$1 [6] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 diff --git a/src/test/ref/chessboard.log b/src/test/ref/chessboard.log index 173cdf472..dbf71ef85 100644 --- a/src/test/ref/chessboard.log +++ b/src/test/ref/chessboard.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (byte*) main::screen#0 ← (byte*)(number) $400 (byte*) main::colors#0 ← (byte*)(number) $d800 - (byte) main::color#0 ← (number) 1 + (byte) main::color#0 ← (byte) 1 (byte) main::row#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -103,7 +103,6 @@ SYMBOL TABLE SSA (byte*) main::screen#3 (byte*) main::screen#4 -Adding number conversion cast (unumber) 1 in (byte) main::color#0 ← (number) 1 Adding number conversion cast (unumber) $a0 in *((byte*) main::screen#2 + (byte) main::column#2) ← (number) $a0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::color#3 ^ (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::color#3 ^ (unumber)(number) 1 @@ -112,19 +111,16 @@ Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte Adding number conversion cast (unumber) $28 in (byte*~) main::$3 ← (byte*) main::screen#3 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*~) main::$4 ← (byte*) main::colors#3 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::color#0 ← (unumber)(number) 1 Inlining cast *((byte*) main::screen#2 + (byte) main::column#2) ← (unumber)(number) $a0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 1 Simplifying constant integer cast $a0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $a0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index d08dda98a..9e980f1a4 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -213,12 +213,12 @@ SYMBOL TABLE SSA (const dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 (const byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e (const byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f -(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (number) 0 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (number) 0 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const byte) CIA_TIMER_CONTROL_STOP = (number) 0 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const byte) CIA_TIMER_CONTROL_STOP = (byte) 0 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1412,9 +1412,9 @@ FINAL SYMBOL TABLE (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cia-timer-cyclecount.sym b/src/test/ref/cia-timer-cyclecount.sym index 8895aaacb..858e22476 100644 --- a/src/test/ref/cia-timer-cyclecount.sym +++ b/src/test/ref/cia-timer-cyclecount.sym @@ -4,9 +4,9 @@ (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index 7ffdebe8f..0d3a0e28b 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -210,11 +210,11 @@ SYMBOL TABLE SSA (const dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 (const byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e (const byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f -(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (number) 0 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (number) 0 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const byte) CIA_TIMER_CONTROL_STOP = (number) 0 +(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const byte) CIA_TIMER_CONTROL_STOP = (byte) 0 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1324,8 +1324,8 @@ FINAL SYMBOL TABLE (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cia-timer-simple.sym b/src/test/ref/cia-timer-simple.sym index 3d57df4ef..ed250d92b 100644 --- a/src/test/ref/cia-timer-simple.sym +++ b/src/test/ref/cia-timer-simple.sym @@ -4,8 +4,8 @@ (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/clobber-a-problem.log b/src/test/ref/clobber-a-problem.log index 18d73cac1..6a30ce549 100644 --- a/src/test/ref/clobber-a-problem.log +++ b/src/test/ref/clobber-a-problem.log @@ -16,7 +16,7 @@ main::@return: scope:[main] from main return to:@return @1: scope:[] from @begin - (byte) irq_raster_next ← (number) 0 + (byte) irq_raster_next ← (byte) 0 to:@2 interrupt(HARDWARE_CLOBBER)(void()) irq() @@ -75,25 +75,20 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) irq_raster_next ← (number) 0 Adding number conversion cast (unumber) $15 in (byte) irq_raster_next ← (byte) irq_raster_next + (number) $15 Adding number conversion cast (unumber) 7 in (number~) irq::$0 ← (byte) irq::raster_next#0 & (number) 7 Adding number conversion cast (unumber) irq::$0 in (number~) irq::$0 ← (byte) irq::raster_next#0 & (unumber)(number) 7 Adding number conversion cast (unumber) 0 in (bool~) irq::$1 ← (unumber~) irq::$0 == (number) 0 Adding number conversion cast (unumber) 1 in (byte) irq::raster_next#1 ← (byte) irq::raster_next#3 - (number) 1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) irq_raster_next ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53266 -Simplifying constant integer cast 0 Simplifying constant integer cast $15 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/coalesce-assignment.log b/src/test/ref/coalesce-assignment.log index 4658f9a8e..6551d62dc 100644 --- a/src/test/ref/coalesce-assignment.log +++ b/src/test/ref/coalesce-assignment.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::a#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -92,15 +92,8 @@ SYMBOL TABLE SSA (byte) main::idx#3 (byte) main::idx#4 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::a#2 = (byte) main::c#0 (byte) main::a#3 Alias (byte) main::d#0 = (byte) main::b#2 Alias (byte) main::e#0 = (byte~) main::$0 diff --git a/src/test/ref/code-after-return-1.log b/src/test/ref/code-after-return-1.log index 370f68d49..dbce9b42b 100644 --- a/src/test/ref/code-after-return-1.log +++ b/src/test/ref/code-after-return-1.log @@ -2,7 +2,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) b#0 ← (number) 0 + (byte) b#0 ← (byte) 0 to:@2 (void()) main() @@ -73,19 +73,14 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) b#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (byte) b#6 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← (byte) b#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) b#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) b#1 = (byte) b#7 diff --git a/src/test/ref/comma-expr-for.log b/src/test/ref/comma-expr-for.log index 07fec3c29..1bbf9d6a2 100644 --- a/src/test/ref/comma-expr-for.log +++ b/src/test/ref/comma-expr-for.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 (byte) main::j#0 ← (byte) 'g' - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) @@ -57,16 +57,11 @@ SYMBOL TABLE SSA (byte) main::j#2 (byte) main::j#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) main::$1 ← (byte) main::i#2 < (number) $a Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::j#2 = (byte) main::j#3 diff --git a/src/test/ref/comparison-rewriting.log b/src/test/ref/comparison-rewriting.log index 9c91558a4..3d5103bf2 100644 --- a/src/test/ref/comparison-rewriting.log +++ b/src/test/ref/comparison-rewriting.log @@ -26,7 +26,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 (byte*) main::screen#16 ← phi( main::@1/(byte*) main::screen#2 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 (byte*) main::screen#10 ← phi( main::@2/(byte*) main::screen#16 main::@4/(byte*) main::screen#3 ) @@ -42,7 +42,7 @@ main::@4: scope:[main] from main::@3 to:main::@3 main::@5: scope:[main] from main::@3 (byte*) main::screen#18 ← phi( main::@3/(byte*) main::screen#10 ) - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@9 main::@9: scope:[main] from main::@16 main::@5 (byte*) main::screen#11 ← phi( main::@16/(byte*) main::screen#17 main::@5/(byte*) main::screen#18 ) @@ -214,9 +214,7 @@ SYMBOL TABLE SSA (byte*) main::screen#9 Adding number conversion cast (unumber) $3e8 in (byte*~) main::$0 ← (byte*) main::screen#0 + (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← *((const byte*) main::header + (byte) main::i#2) != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Adding number conversion cast (unumber) 9 in (bool~) main::$3 ← (byte) main::i1#2 <= (number) 9 Adding number conversion cast (unumber) $28 in (byte*) main::screen#1 ← (byte*) main::screen#4 + (number) $28 Adding number conversion cast (unumber) 0 in *((byte*) main::screen#1 + (number) 0) ← (byte~) main::$4 @@ -231,14 +229,9 @@ Adding number conversion cast (unumber) 5 in (bool~) main::$13 ← (byte) main:: Adding number conversion cast (unumber) $b in *((byte*) main::screen#8 + (number) $b) ← (byte) '+' Adding number conversion cast (unumber) $e in *((byte*) main::screen#9 + (number) $e) ← (byte) '+' Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 9 Simplifying constant integer cast $28 Simplifying constant integer cast 0 @@ -255,8 +248,6 @@ Simplifying constant integer cast $e Successful SSA optimization PassNCastSimplification Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/complex/clearscreen/clearscreen.cfg b/src/test/ref/complex/clearscreen/clearscreen.cfg index 4f4e0cb3d..6c2290ad5 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.cfg +++ b/src/test/ref/complex/clearscreen/clearscreen.cfg @@ -364,7 +364,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [205] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [206] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [206] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [206] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index 30b5c6a48..d80285a28 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -53,8 +53,8 @@ Adding struct value member variable copy (byte) main::center_x ← (byte~) main: Adding struct value member variable copy (byte) main::center_y ← (byte~) main::$5_y Adding struct value member variable copy (byte) main::center_dist ← (byte~) main::$5_dist Converted procedure struct value parameter to member unwinding in call (void~) main::$8 ← call startProcessing (byte) main::center_x (byte) main::center_y (byte) main::center_dist -Adding struct value member variable copy (byte) getCharToProcess::closest_x ← (byte)(number) 0 -Adding struct value member variable copy (byte) getCharToProcess::closest_y ← (byte)(number) 0 +Adding struct value member variable copy (byte) getCharToProcess::closest_x ← (byte) 0 +Adding struct value member variable copy (byte) getCharToProcess::closest_y ← (byte) 0 Adding struct value member variable copy (byte) getCharToProcess::closest_dist ← (const byte) NOT_FOUND Adding struct value list initializer (byte) getCharToProcess::closest_x ← (byte) getCharToProcess::x Adding struct value list initializer (byte) getCharToProcess::closest_y ← (byte) getCharToProcess::y @@ -260,7 +260,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 ) (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 - (word) atan2_16::angle#0 ← (number) 0 + (word) atan2_16::angle#0 ← (word) 0 (byte) atan2_16::i#0 ← (byte) 0 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6 @@ -583,8 +583,8 @@ main::@return: scope:[main] from main::@15 getCharToProcess: scope:[getCharToProcess] from main::@9 (byte*) SCREEN_DIST#2 ← phi( main::@9/(byte*) SCREEN_DIST#4 ) (byte*) SCREEN_COPY#2 ← phi( main::@9/(byte*) SCREEN_COPY#5 ) - (byte) getCharToProcess::closest_x#0 ← (byte)(number) 0 - (byte) getCharToProcess::closest_y#0 ← (byte)(number) 0 + (byte) getCharToProcess::closest_x#0 ← (byte) 0 + (byte) getCharToProcess::closest_y#0 ← (byte) 0 (byte) getCharToProcess::closest_dist#0 ← (const byte) NOT_FOUND (byte*) getCharToProcess::screen_line#0 ← (byte*) SCREEN_COPY#2 (byte*) getCharToProcess::dist_line#0 ← (byte*) SCREEN_DIST#2 @@ -709,7 +709,7 @@ getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@1 startProcessing: scope:[startProcessing] from main::@10 (byte) startProcessing::center_x#9 ← phi( main::@10/(byte) startProcessing::center_x#0 ) (byte) startProcessing::center_y#9 ← phi( main::@10/(byte) startProcessing::center_y#0 ) - (byte) startProcessing::freeIdx#0 ← (number) $ff + (byte) startProcessing::freeIdx#0 ← (byte) $ff to:startProcessing::@1 startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@4 (byte) startProcessing::center_x#8 ← phi( startProcessing/(byte) startProcessing::center_x#9 startProcessing::@4/(byte) startProcessing::center_x#3 ) @@ -841,7 +841,7 @@ startProcessing::@return: scope:[startProcessing] from startProcessing::@10 (void()) processChars() processChars: scope:[processChars] from irqBottom::@1 - (byte) processChars::numActive#0 ← (number) 0 + (byte) processChars::numActive#0 ← (byte) 0 (byte) processChars::i#0 ← (byte) 0 to:processChars::@2 processChars::@2: scope:[processChars] from processChars processChars::@3 @@ -1023,8 +1023,8 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - (byte) init_angle_screen::x#0 ← (number) 0 - (byte) init_angle_screen::xb#0 ← (number) $27 + (byte) init_angle_screen::x#0 ← (byte) 0 + (byte) init_angle_screen::xb#0 ← (byte) $27 to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@9 (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 ) @@ -1254,29 +1254,29 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 -(const byte) BORDER_XPOS_LEFT = (number) $18 -(const word) BORDER_XPOS_RIGHT = (number) $158 -(const byte) BORDER_YPOS_BOTTOM = (number) $fa -(const byte) BORDER_YPOS_TOP = (number) $32 +(const byte) BORDER_XPOS_LEFT = (byte) $18 +(const word) BORDER_XPOS_RIGHT = (word) $158 +(const byte) BORDER_YPOS_BOTTOM = (byte) $fa +(const byte) BORDER_YPOS_TOP = (byte) $32 (const byte*) CHARGEN = (byte*)(number) $d000 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) COLS = (byte*)(number) $d800 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -2227,7 +2226,6 @@ Adding number conversion cast (unumber) $28 in (byte*) getCharToProcess::screen_ Adding number conversion cast (unumber) $28 in (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#3 + (number) $28 Adding number conversion cast (unumber) $28 in (number~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (number) $28 Adding number conversion cast (unumber) getCharToProcess::$9 in (number~) getCharToProcess::$9 ← (word~) getCharToProcess::$8 * (unumber)(number) $28 -Adding number conversion cast (unumber) $ff in (byte) startProcessing::freeIdx#0 ← (number) $ff Adding number conversion cast (unumber) 1 in (byte) startProcessing::i#1 ← (byte) startProcessing::i#3 + rangenext(0,NUM_PROCESSING-1) Adding number conversion cast (unumber) $ff in (bool~) startProcessing::$25 ← (byte) startProcessing::freeIdx#2 == (number) $ff Adding number conversion cast (unumber) $28 in (number~) startProcessing::$1 ← (word~) startProcessing::$0 * (number) $28 @@ -2252,7 +2250,6 @@ Adding number conversion cast (unumber) $40 in (byte~) startProcessing::$19 ← Adding number conversion cast (unumber) 8 in (number~) startProcessing::$20 ← (byte) startProcessing::spriteIdx#1 * (number) 8 Adding number conversion cast (unumber) startProcessing::$20 in (number~) startProcessing::$20 ← (byte) startProcessing::spriteIdx#1 * (unumber)(number) 8 Adding number conversion cast (unumber) $3c in *((word*~) startProcessing::$32 + (byte~) startProcessing::$28) ← (number) $3c -Adding number conversion cast (unumber) 0 in (byte) processChars::numActive#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) processChars::$2 ← (number) 1 << *((byte*~) processChars::$35) Adding number conversion cast (unumber) processChars::$2 in (number~) processChars::$2 ← (unumber)(number) 1 << *((byte*~) processChars::$35) Adding number conversion cast (unumber) 1 in (byte) processChars::i#1 ← (byte) processChars::i#3 + rangenext(0,NUM_PROCESSING-1) @@ -2280,8 +2277,6 @@ Adding number conversion cast (unumber) 8 in (unumber~) processChars::$28 ← (b Adding number conversion cast (unumber) $3e7 in *((const byte*) SCREEN+(number) $3e7) ← (byte~) processChars::$31 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c -Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2 @@ -2309,7 +2304,6 @@ Adding number conversion cast (unumber) $7f in *((const byte*) VIC_CONTROL) ← Adding number conversion cast (unumber) $80 in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) | (number) $80 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word) malloc::size#0 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_COPY#0 ← (byte*)(void*~) $0 Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 @@ -2323,7 +2317,6 @@ Inlining cast *((byte*~) main::$16 + (byte~) main::$10) ← (unumber)(number) 0 Inlining cast *((byte*~) main::$17 + (byte~) main::$10) ← (unumber)(number) 0 Inlining cast *((byte**~) main::$19 + (byte~) main::$10) ← (byte*)(number) 0 Inlining cast (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::closest_y#3 -Inlining cast (byte) startProcessing::freeIdx#0 ← (unumber)(number) $ff Inlining cast (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#1 Inlining cast (word~) startProcessing::$5 ← (word)(byte) startProcessing::spriteIdx#0 Inlining cast (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 @@ -2331,13 +2324,10 @@ Inlining cast (word~) startProcessing::$11 ← (word)(byte) startProcessing::cen Inlining cast (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#2 Inlining cast (word~) startProcessing::$21 ← (word)(unumber~) startProcessing::$20 Inlining cast *((word*~) startProcessing::$32 + (byte~) startProcessing::$28) ← (unumber)(number) $3c -Inlining cast (byte) processChars::numActive#0 ← (unumber)(number) 0 Inlining cast (byte~) processChars::$12 ← (byte)(word) processChars::xpos#1 Inlining cast (byte~) processChars::$14 ← (byte)(word~) processChars::$13 Inlining cast (byte~) processChars::$24 ← (byte)(unumber~) processChars::$23 Inlining cast (byte~) processChars::$27 ← (byte)(unumber~) processChars::$26 -Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Inlining cast *((byte*) initSprites::sp#3) ← (unumber)(number) 0 @@ -2378,7 +2368,6 @@ Simplifying constant pointer cast (byte*) 40960 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -2406,12 +2395,9 @@ Simplifying constant pointer cast (byte*) 0 Simplifying constant integer cast 1 Simplifying constant integer cast $3e7 Simplifying constant integer cast $3e7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 -Simplifying constant integer cast $ff Simplifying constant integer cast 1 Simplifying constant integer cast $ff Simplifying constant integer cast $28 @@ -2425,7 +2411,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $40 Simplifying constant integer cast 8 Simplifying constant integer cast $3c -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 4 @@ -2442,8 +2427,6 @@ Simplifying constant integer cast 8 Simplifying constant integer cast (const byte) BORDER_YPOS_TOP/(unumber)(number) 8 Simplifying constant integer cast 8 Simplifying constant integer cast $3e7 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -2473,7 +2456,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -2504,7 +2486,6 @@ Finalized unsigned number type (word) $3e7 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $28 @@ -2518,7 +2499,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $3c -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 4 @@ -2533,8 +2513,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (word) $3e7 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -3194,7 +3172,7 @@ Constant inlined init_angle_screen::x#0 = (byte) 0 Constant inlined main::$14 = (word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY Constant inlined main::src#0 = (const byte*) SCREEN Constant inlined main::$15 = (byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined getCharToProcess::x#0 = (byte) 0 Constant inlined initSprites::sp#0 = (const byte*) SPRITE_DATA Constant inlined main::$11 = (word*)(const struct ProcessingSprite*) PROCESSING @@ -3837,7 +3815,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [205] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [206] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [206] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [206] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [206] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -6198,7 +6176,7 @@ atan2_16: { __b6: // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [206] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [206] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -9068,7 +9046,7 @@ atan2_16: { __b6: // [206] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [206] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [206] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -10088,26 +10066,26 @@ FINAL SYMBOL TABLE (label) @4 (label) @begin (label) @end -(const byte) BORDER_XPOS_LEFT = (number) $18 -(const word) BORDER_XPOS_RIGHT = (number) $158 -(const byte) BORDER_YPOS_BOTTOM = (number) $fa -(const byte) BORDER_YPOS_TOP = (number) $32 +(const byte) BORDER_XPOS_LEFT = (byte) $18 +(const word) BORDER_XPOS_RIGHT = (word) $158 +(const byte) BORDER_YPOS_BOTTOM = (byte) $fa +(const byte) BORDER_YPOS_TOP = (byte) $32 (const byte*) CHARGEN = (byte*) 53248 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) COLS = (byte*) 55296 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iatan2_16::@10] - // [206] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [206] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 diff --git a/src/test/ref/complex/clearscreen/clearscreen.sym b/src/test/ref/complex/clearscreen/clearscreen.sym index b51c68730..089d00b35 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.sym +++ b/src/test/ref/complex/clearscreen/clearscreen.sym @@ -4,26 +4,26 @@ (label) @4 (label) @begin (label) @end -(const byte) BORDER_XPOS_LEFT = (number) $18 -(const word) BORDER_XPOS_RIGHT = (number) $158 -(const byte) BORDER_YPOS_BOTTOM = (number) $fa -(const byte) BORDER_YPOS_TOP = (number) $32 +(const byte) BORDER_XPOS_LEFT = (byte) $18 +(const word) BORDER_XPOS_RIGHT = (word) $158 +(const byte) BORDER_YPOS_BOTTOM = (byte) $fa +(const byte) BORDER_YPOS_TOP = (byte) $32 (const byte*) CHARGEN = (byte*) 53248 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) COLS = (byte*) 55296 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i> (number) 3 -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -2327,8 +2323,6 @@ Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0 Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (snumber) $a00 in (signed word) main::origX#0 ← (number) $a00 -Adding number conversion cast (snumber) $100 in (signed word) main::rowOffsetY#0 ← (number) $100 Adding number conversion cast (unumber) $f8 in (bool~) main::$8 ← *((const byte*) RASTER) < (number) $f8 Adding number conversion cast (unumber) $f in *((const byte*) BORDERCOL) ← (number) $f Adding number conversion cast (unumber) 1 in *((const byte*) BORDERCOL) ← (number) 1 @@ -2410,15 +2404,8 @@ Adding number conversion cast (unumber) $52 in *((byte*) renderBobCleanup::scree Adding number conversion cast (unumber) 1 in (byte) renderBobCleanup::i#1 ← (byte) renderBobCleanup::i#2 + rangenext(0,NUM_BOBS-1) Adding number conversion cast (unumber) 0 in (byte) bob_charset_next_id#2 ← (number) 0 Adding number conversion cast (unumber) $30 in (byte*) charsetFindOrAddGlyph::glyph#0 ← (const byte*) PROTO_BOB+(number) $30 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::bob_table_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::shift_y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::shift_x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::cell#0 ← (number) 0 Adding number conversion cast (unumber) 9 in (bool~) prepareBobs::$5 ← (byte) prepareBobs::cell#2 < (number) 9 Adding number conversion cast (unumber) 8 in (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#3 + (number) 8 -Adding number conversion cast (unumber) 0 in (byte) protoBobShiftRight::carry#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) protoBobShiftRight::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) protoBobShiftRight::i#0 ← (number) 0 Adding number conversion cast (unumber) 3*3*8 in (bool~) protoBobShiftRight::$0 ← (byte) protoBobShiftRight::i#2 < (number) 3*(number) 3*(number) 8 Adding number conversion cast (unumber) 1 in (number~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (number) 1 Adding number conversion cast (unumber) protoBobShiftRight::$1 in (number~) protoBobShiftRight::$1 ← *((const byte*) PROTO_BOB + (byte) protoBobShiftRight::j#3) & (unumber)(number) 1 @@ -2427,7 +2414,6 @@ Adding number conversion cast (unumber) 1 in (byte~) protoBobShiftRight::$5 ← Adding number conversion cast (unumber) $30 in (bool~) protoBobShiftRight::$7 ← (byte) protoBobShiftRight::j#4 >= (number) $30 Adding number conversion cast (unumber) $2f in (byte) protoBobShiftRight::j#1 ← (byte) protoBobShiftRight::j#5 - (number) $2f Adding number conversion cast (unumber) $18 in (byte) protoBobShiftRight::j#2 ← (byte) protoBobShiftRight::j#6 + (number) $18 -Adding number conversion cast (unumber) $17 in (byte) protoBobShiftDown::i#0 ← (number) $17 Adding number conversion cast (unumber) 0 in (bool~) protoBobShiftDown::$0 ← (byte) protoBobShiftDown::i#2 > (number) 0 Adding number conversion cast (unumber) $17 in *((const byte*) PROTO_BOB + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(number) $17 + (byte) protoBobShiftDown::i#3) Adding number conversion cast (unumber) $2f in *((const byte*) PROTO_BOB+(number) $18 + (byte) protoBobShiftDown::i#3) ← *((const byte*) PROTO_BOB+(number) $2f + (byte) protoBobShiftDown::i#3) @@ -2440,10 +2426,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number Adding number conversion cast (unumber) $18 in *((const byte*) PROTO_BOB + (number) $18) ← ((unumber)) (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number) $30) ← (number) 0 Adding number conversion cast (unumber) $30 in *((const byte*) PROTO_BOB + (number) $30) ← ((unumber)) (number) 0 -Adding number conversion cast (unumber) 0 in (byte) charsetFindOrAddGlyph::glyph_id#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) charsetFindOrAddGlyph::found#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) charsetFindOrAddGlyph::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) charsetFindOrAddGlyph::i1#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) charsetFindOrAddGlyph::$1 ← (byte) charsetFindOrAddGlyph::i#2 < (number) 8 Adding number conversion cast (unumber) 0 in (byte) charsetFindOrAddGlyph::found#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) charsetFindOrAddGlyph::$6 ← (number) 0 != (byte) charsetFindOrAddGlyph::found#2 @@ -2456,10 +2438,6 @@ Adding number conversion cast (unumber) 0 in (byte) progress_idx#9 ← (number) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (word~) main::vicSelectGfxBank1_toDd001_$0 ← (word)(byte*) main::vicSelectGfxBank1_toDd001_gfx#1 @@ -2467,8 +2445,6 @@ Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (signed word) main::origX#0 ← (snumber)(number) $a00 -Inlining cast (signed word) main::rowOffsetY#0 ← (snumber)(number) $100 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) $f Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 1 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 2 @@ -2488,22 +2464,10 @@ Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 2) ← (u Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $2a) ← (unumber)(number) 0 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $52) ← (unumber)(number) 0 Inlining cast (byte) bob_charset_next_id#2 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::bob_table_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::shift_y#0 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::shift_x#0 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::cell#0 ← (unumber)(number) 0 -Inlining cast (byte) protoBobShiftRight::carry#0 ← (unumber)(number) 0 -Inlining cast (byte) protoBobShiftRight::j#0 ← (unumber)(number) 0 -Inlining cast (byte) protoBobShiftRight::i#0 ← (unumber)(number) 0 -Inlining cast (byte) protoBobShiftDown::i#0 ← (unumber)(number) $17 Inlining cast *((const byte*) PROTO_BOB+(unumber)(number) $30 + (byte) protoBobShiftDown::i#3) ← (unumber)(number) 0 Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) 0) ← (unumber)(number) 0 Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) $18) ← (unumber)(number) 0 Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) $30) ← (unumber)(number) 0 -Inlining cast (byte) charsetFindOrAddGlyph::glyph_id#0 ← (unumber)(number) 0 -Inlining cast (byte) charsetFindOrAddGlyph::found#0 ← (unumber)(number) 1 -Inlining cast (byte) charsetFindOrAddGlyph::i#0 ← (unumber)(number) 0 -Inlining cast (byte) charsetFindOrAddGlyph::i1#0 ← (unumber)(number) 0 Inlining cast (byte) charsetFindOrAddGlyph::found#1 ← (unumber)(number) 0 Inlining cast (byte) progress_idx#6 ← (unumber)(number) 0 Inlining cast (byte) progress_idx#9 ← (unumber)(number) 0 @@ -2515,48 +2479,19 @@ Simplifying constant pointer cast (byte*) 56320 Simplifying constant pointer cast (byte*) 56321 Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 4096 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $20 -Simplifying constant integer cast $65 -Simplifying constant integer cast $74 -Simplifying constant integer cast $75 -Simplifying constant integer cast $61 -Simplifying constant integer cast $f6 -Simplifying constant integer cast $e7 -Simplifying constant integer cast $ea -Simplifying constant integer cast $e0 Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -2573,8 +2508,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 -Simplifying constant integer cast $a00 -Simplifying constant integer cast $100 Simplifying constant integer cast $f8 Simplifying constant integer cast $f Simplifying constant integer cast 1 @@ -2643,22 +2576,14 @@ Simplifying constant integer cast $52 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $30 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 9 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $30 Simplifying constant integer cast $2f Simplifying constant integer cast $18 -Simplifying constant integer cast $17 Simplifying constant integer cast 0 Simplifying constant integer cast $17 Simplifying constant integer cast $2f @@ -2671,10 +2596,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $18 Simplifying constant integer cast 0 Simplifying constant integer cast $30 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2688,15 +2609,11 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -2713,8 +2630,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 -Finalized signed number type (signed word) $a00 -Finalized signed number type (signed word) $100 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 1 @@ -2774,22 +2689,14 @@ Finalized unsigned number type (byte) $52 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $30 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $30 Finalized unsigned number type (byte) $2f Finalized unsigned number type (byte) $18 -Finalized unsigned number type (byte) $17 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $17 Finalized unsigned number type (byte) $2f @@ -2802,10 +2709,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $30 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -3421,7 +3324,7 @@ Constant inlined progress_cursor#16 = (const byte*) BASIC_SCREEN Constant inlined prepareBobs::bob_glyph#0 = (const byte*) PROTO_BOB Constant inlined renderBobCleanup::i#0 = (byte) 0 Constant inlined prepareBobs::shift_y#0 = (byte) 0 -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined charsetFindOrAddGlyph::charset#0 = (const byte*) BOB_CHARSET Constant inlined charsetFindOrAddGlyph::glyph_id#0 = (byte) 0 Constant inlined charsetFindOrAddGlyph::charset#1 = (const byte*) BOB_CHARSET @@ -4160,7 +4063,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [210] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [210] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [210] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [210] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [210] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [210] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [211] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 @@ -6125,7 +6028,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [210] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [210] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -8123,7 +8026,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [210] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [210] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -8611,8 +8514,8 @@ FINAL SYMBOL TABLE (const byte*) BASIC_SCREEN = (byte*) 1024 (const byte*) BOB_CHARSET = (byte*) 8192 (const byte*) BOB_SCREEN = (byte*) 10240 -(const byte) BOB_SHIFTS_X = (number) 4 -(const byte) BOB_SHIFTS_Y = (number) 8 +(const byte) BOB_SHIFTS_X = (byte) 4 +(const byte) BOB_SHIFTS_Y = (byte) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*) 53280 @@ -8621,9 +8524,9 @@ FINAL SYMBOL TABLE (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) D018 = (byte*) 53272 -(const byte) KEY_SPACE = (number) $3c +(const byte) KEY_SPACE = (byte) $3c (const word*) MUL40[(number) $20] = { fill( $20, 0) } -(const byte) NUM_BOBS = (number) $19 +(const byte) NUM_BOBS = (byte) $19 (const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -10291,7 +10194,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [210] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [210] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/complex/prebob/grid-bobs.sym b/src/test/ref/complex/prebob/grid-bobs.sym index 3c7d3fb25..90d19ac62 100644 --- a/src/test/ref/complex/prebob/grid-bobs.sym +++ b/src/test/ref/complex/prebob/grid-bobs.sym @@ -5,8 +5,8 @@ (const byte*) BASIC_SCREEN = (byte*) 1024 (const byte*) BOB_CHARSET = (byte*) 8192 (const byte*) BOB_SCREEN = (byte*) 10240 -(const byte) BOB_SHIFTS_X = (number) 4 -(const byte) BOB_SHIFTS_Y = (number) 8 +(const byte) BOB_SHIFTS_X = (byte) 4 +(const byte) BOB_SHIFTS_Y = (byte) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*) 53280 @@ -15,9 +15,9 @@ (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) D018 = (byte*) 53272 -(const byte) KEY_SPACE = (number) $3c +(const byte) KEY_SPACE = (byte) $3c (const word*) MUL40[(number) $20] = { fill( $20, 0) } -(const byte) NUM_BOBS = (number) $19 +(const byte) NUM_BOBS = (byte) $19 (const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) diff --git a/src/test/ref/complex/prebob/vogel-bobs.cfg b/src/test/ref/complex/prebob/vogel-bobs.cfg index c7dd9f471..fa9b8ee1f 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.cfg +++ b/src/test/ref/complex/prebob/vogel-bobs.cfg @@ -522,7 +522,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [244] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [244] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [244] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [244] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [244] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [244] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [245] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 diff --git a/src/test/ref/complex/prebob/vogel-bobs.log b/src/test/ref/complex/prebob/vogel-bobs.log index 835342d08..833c1bd6b 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.log +++ b/src/test/ref/complex/prebob/vogel-bobs.log @@ -252,9 +252,9 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p (void()) mulf_init() mulf_init: scope:[mulf_init] from main - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -281,7 +281,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -583,7 +583,7 @@ main::@28: scope:[main] from main::@22 (byte) progress_idx#52 ← phi( main::@22/(byte) progress_idx#54 ) (byte*) progress_cursor#52 ← phi( main::@22/(byte*) progress_cursor#54 ) (byte**) renderBobCleanupNext#28 ← phi( main::@22/(byte**) renderBobCleanupNext#31 ) - (byte) main::angle#0 ← (number) 0 + (byte) main::angle#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@28 main::@33 (byte) bob_charset_next_id#58 ← phi( main::@28/(byte) bob_charset_next_id#60 main::@33/(byte) bob_charset_next_id#59 ) @@ -618,7 +618,7 @@ main::@29: scope:[main] from main::@5 (byte) main::angle#2 ← phi( main::@5/(byte) main::angle#4 ) (byte**) renderBobCleanupNext#9 ← phi( main::@5/(byte**) renderBobCleanupNext#7 ) (byte**) renderBobCleanupNext#0 ← (byte**) renderBobCleanupNext#9 - (signed byte) main::r#0 ← (number) $1e + (signed byte) main::r#0 ← (signed byte) $1e (byte) main::a#0 ← (byte) main::angle#2 (byte) main::i#0 ← (byte) 0 to:main::@6 @@ -957,8 +957,8 @@ prepareBobs::@20: scope:[prepareBobs] from prepareBobs::@19 (byte*) progress_cursor#30 ← phi( prepareBobs::@19/(byte*) progress_cursor#2 ) (byte) bob_charset_next_id#12 ← phi( prepareBobs::@19/(byte) bob_charset_next_id#7 ) (byte) bob_charset_next_id#3 ← (byte) bob_charset_next_id#12 - (byte) prepareBobs::bob_table_idx#0 ← (number) 0 - (byte) prepareBobs::shift_y#0 ← (number) 0 + (byte) prepareBobs::bob_table_idx#0 ← (byte) 0 + (byte) prepareBobs::shift_y#0 ← (byte) 0 to:prepareBobs::@1 prepareBobs::@1: scope:[prepareBobs] from prepareBobs::@20 prepareBobs::@21 (byte) prepareBobs::bob_table_idx#9 ← phi( prepareBobs::@20/(byte) prepareBobs::bob_table_idx#0 prepareBobs::@21/(byte) prepareBobs::bob_table_idx#12 ) @@ -975,7 +975,7 @@ prepareBobs::@2: scope:[prepareBobs] from prepareBobs::@1 (byte) bob_charset_next_id#48 ← phi( prepareBobs::@1/(byte) bob_charset_next_id#22 ) (byte) prepareBobs::shift_y#6 ← phi( prepareBobs::@1/(byte) prepareBobs::shift_y#2 ) (byte) prepareBobs::bob_table_idx#6 ← phi( prepareBobs::@1/(byte) prepareBobs::bob_table_idx#9 ) - (byte) prepareBobs::shift_x#0 ← (number) 0 + (byte) prepareBobs::shift_x#0 ← (byte) 0 to:prepareBobs::@4 prepareBobs::@4: scope:[prepareBobs] from prepareBobs::@2 prepareBobs::@25 (byte) progress_idx#37 ← phi( prepareBobs::@2/(byte) progress_idx#40 prepareBobs::@25/(byte) progress_idx#41 ) @@ -997,7 +997,7 @@ prepareBobs::@5: scope:[prepareBobs] from prepareBobs::@4 (byte*) prepareBobs::bob_glyph#0 ← (const byte*) PROTO_BOB (byte*~) prepareBobs::$4 ← (const byte*) BOB_TABLES + (byte) prepareBobs::bob_table_idx#2 (byte*) prepareBobs::bob_table#0 ← (byte*~) prepareBobs::$4 - (byte) prepareBobs::cell#0 ← (number) 0 + (byte) prepareBobs::cell#0 ← (byte) 0 to:prepareBobs::@7 prepareBobs::@6: scope:[prepareBobs] from prepareBobs::@4 (byte) prepareBobs::bob_table_idx#14 ← phi( prepareBobs::@4/(byte) prepareBobs::bob_table_idx#4 ) @@ -1114,9 +1114,9 @@ prepareBobs::@return: scope:[prepareBobs] from prepareBobs::@1 (void()) shiftProtoBobRight() shiftProtoBobRight: scope:[shiftProtoBobRight] from prepareBobs::@24 prepareBobs::@9 - (byte) shiftProtoBobRight::carry#0 ← (number) 0 - (byte) shiftProtoBobRight::j#0 ← (number) 0 - (byte) shiftProtoBobRight::i#0 ← (number) 0 + (byte) shiftProtoBobRight::carry#0 ← (byte) 0 + (byte) shiftProtoBobRight::j#0 ← (byte) 0 + (byte) shiftProtoBobRight::i#0 ← (byte) 0 to:shiftProtoBobRight::@1 shiftProtoBobRight::@1: scope:[shiftProtoBobRight] from shiftProtoBobRight shiftProtoBobRight::@8 (byte) shiftProtoBobRight::carry#6 ← phi( shiftProtoBobRight/(byte) shiftProtoBobRight::carry#0 shiftProtoBobRight::@8/(byte) shiftProtoBobRight::carry#7 ) @@ -1182,7 +1182,7 @@ shiftProtoBobRight::@return: scope:[shiftProtoBobRight] from shiftProtoBobRight (void()) shiftProtoBobDown() shiftProtoBobDown: scope:[shiftProtoBobDown] from prepareBobs::@6 - (byte) shiftProtoBobDown::i#0 ← (number) $17 + (byte) shiftProtoBobDown::i#0 ← (byte) $17 to:shiftProtoBobDown::@1 shiftProtoBobDown::@1: scope:[shiftProtoBobDown] from shiftProtoBobDown shiftProtoBobDown::@2 (byte) shiftProtoBobDown::i#2 ← phi( shiftProtoBobDown/(byte) shiftProtoBobDown::i#0 shiftProtoBobDown::@2/(byte) shiftProtoBobDown::i#1 ) @@ -1214,7 +1214,7 @@ bobCharsetFindOrAddGlyph: scope:[bobCharsetFindOrAddGlyph] from prepareBobs::@1 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 ← phi( prepareBobs::@19/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#0 prepareBobs::@8/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 ) (byte) bob_charset_next_id#23 ← phi( prepareBobs::@19/(byte) bob_charset_next_id#2 prepareBobs::@8/(byte) bob_charset_next_id#21 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#0 ← (const byte*) BOB_CHARSET - (byte) bobCharsetFindOrAddGlyph::glyph_id#0 ← (number) 0 + (byte) bobCharsetFindOrAddGlyph::glyph_id#0 ← (byte) 0 to:bobCharsetFindOrAddGlyph::@1 bobCharsetFindOrAddGlyph::@1: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph bobCharsetFindOrAddGlyph::@16 (byte*) bobCharsetFindOrAddGlyph::bob_glyph#9 ← phi( bobCharsetFindOrAddGlyph/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#10 bobCharsetFindOrAddGlyph::@16/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#11 ) @@ -1229,15 +1229,15 @@ bobCharsetFindOrAddGlyph::@2: scope:[bobCharsetFindOrAddGlyph] from bobCharsetF (byte) bobCharsetFindOrAddGlyph::glyph_id#12 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bobCharsetFindOrAddGlyph::glyph_id#2 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#6 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#9 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#8 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#12 ) - (byte) bobCharsetFindOrAddGlyph::found#0 ← (number) 1 - (byte) bobCharsetFindOrAddGlyph::i#0 ← (number) 0 + (byte) bobCharsetFindOrAddGlyph::found#0 ← (byte) 1 + (byte) bobCharsetFindOrAddGlyph::i#0 ← (byte) 0 to:bobCharsetFindOrAddGlyph::@4 bobCharsetFindOrAddGlyph::@3: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@1 (byte) bobCharsetFindOrAddGlyph::glyph_id#11 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bobCharsetFindOrAddGlyph::glyph_id#2 ) (byte) bob_charset_next_id#34 ← phi( bobCharsetFindOrAddGlyph::@1/(byte) bob_charset_next_id#15 ) (byte*) bobCharsetFindOrAddGlyph::glyph_cursor#11 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::glyph_cursor#12 ) (byte*) bobCharsetFindOrAddGlyph::bob_glyph#8 ← phi( bobCharsetFindOrAddGlyph::@1/(byte*) bobCharsetFindOrAddGlyph::bob_glyph#9 ) - (byte) bobCharsetFindOrAddGlyph::i1#0 ← (number) 0 + (byte) bobCharsetFindOrAddGlyph::i1#0 ← (byte) 0 to:bobCharsetFindOrAddGlyph::@20 bobCharsetFindOrAddGlyph::@4: scope:[bobCharsetFindOrAddGlyph] from bobCharsetFindOrAddGlyph::@2 bobCharsetFindOrAddGlyph::@7 (byte) bob_charset_next_id#41 ← phi( bobCharsetFindOrAddGlyph::@2/(byte) bob_charset_next_id#44 bobCharsetFindOrAddGlyph::@7/(byte) bob_charset_next_id#45 ) @@ -1407,8 +1407,8 @@ SYMBOL TABLE SSA (label) @end (const byte*) BOB_CHARSET = (byte*)(number) $2000 (const byte*) BOB_SCREEN = (byte*)(number) $2800 -(const byte) BOB_SHIFTS_X = (number) 4 -(const byte) BOB_SHIFTS_Y = (number) 8 +(const byte) BOB_SHIFTS_X = (byte) 4 +(const byte) BOB_SHIFTS_Y = (byte) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*)(number) $d020 @@ -1419,9 +1419,9 @@ SYMBOL TABLE SSA (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const signed byte*) COS = (const signed byte*) SIN+(number) $40 (const byte*) D018 = (byte*)(number) $d018 -(const byte) KEY_SPACE = (number) $3c +(const byte) KEY_SPACE = (byte) $3c (const word*) MUL40[(number) $20] = { fill( $20, 0) } -(const byte) NUM_BOBS = (number) $14 +(const byte) NUM_BOBS = (byte) $14 (const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -1635,7 +1635,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#6 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -1650,7 +1650,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() (signed word~) main::$10 (number~) main::$11 @@ -2272,7 +2272,7 @@ SYMBOL TABLE SSA (label) progress_inc::@1 (label) progress_inc::@2 (label) progress_inc::@return -(const byte*) progress_inc::progress_chars[] = { (byte)(number) $20, (byte)(number) $65, (byte)(number) $74, (byte)(number) $75, (byte)(number) $61, (byte)(number) $f6, (byte)(number) $e7, (byte)(number) $ea, (byte)(number) $e0 } +(const byte*) progress_inc::progress_chars[] = { (byte) $20, (byte) $65, (byte) $74, (byte) $75, (byte) $61, (byte) $f6, (byte) $e7, (byte) $ea, (byte) $e0 } (void()) progress_init((byte*) progress_init::line) (label) progress_init::@return (byte*) progress_init::line @@ -2462,16 +2462,12 @@ Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memse Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (number) 7 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#2 & (unumber)(number) 7 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#2 >> (number) 3 -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -2498,10 +2494,8 @@ Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0 Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::angle#0 ← (number) 0 Adding number conversion cast (unumber) $f8 in (bool~) main::$8 ← *((const byte*) RASTER) < (number) $f8 Adding number conversion cast (unumber) $f in *((const byte*) BORDERCOL) ← (number) $f -Adding number conversion cast (snumber) $1e in (signed byte) main::r#0 ← (number) $1e Adding number conversion cast (unumber) 1 in *((const byte*) BORDERCOL) ← (number) 1 Adding number conversion cast (snumber) $4b*$100 in (number~) main::$11 ← (signed word~) main::$10 + (number) $4b*(number) $100 Adding number conversion cast (snumber) main::$11 in (number~) main::$11 ← (signed word~) main::$10 + (snumber)(number) $4b*(number) $100 @@ -2589,15 +2583,8 @@ Adding number conversion cast (unumber) $52 in *((byte*) renderBobCleanup::scree Adding number conversion cast (unumber) 1 in (byte) renderBobCleanup::i#1 ← (byte) renderBobCleanup::i#2 + rangenext(0,NUM_BOBS-1) Adding number conversion cast (unumber) 0 in (byte) bob_charset_next_id#2 ← (number) 0 Adding number conversion cast (unumber) $30 in (byte*) bobCharsetFindOrAddGlyph::bob_glyph#0 ← (const byte*) PROTO_BOB+(number) $30 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::bob_table_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::shift_y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::shift_x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) prepareBobs::cell#0 ← (number) 0 Adding number conversion cast (unumber) 9 in (bool~) prepareBobs::$5 ← (byte) prepareBobs::cell#2 < (number) 9 Adding number conversion cast (unumber) 8 in (byte*) prepareBobs::bob_glyph#1 ← (byte*) prepareBobs::bob_glyph#3 + (number) 8 -Adding number conversion cast (unumber) 0 in (byte) shiftProtoBobRight::carry#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) shiftProtoBobRight::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) shiftProtoBobRight::i#0 ← (number) 0 Adding number conversion cast (unumber) 3*3*8 in (bool~) shiftProtoBobRight::$0 ← (byte) shiftProtoBobRight::i#2 < (number) 3*(number) 3*(number) 8 Adding number conversion cast (unumber) 1 in (number~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (number) 1 Adding number conversion cast (unumber) shiftProtoBobRight::$1 in (number~) shiftProtoBobRight::$1 ← *((const byte*) PROTO_BOB + (byte) shiftProtoBobRight::j#3) & (unumber)(number) 1 @@ -2606,7 +2593,6 @@ Adding number conversion cast (unumber) 1 in (byte~) shiftProtoBobRight::$5 ← Adding number conversion cast (unumber) $30 in (bool~) shiftProtoBobRight::$7 ← (byte) shiftProtoBobRight::j#4 >= (number) $30 Adding number conversion cast (unumber) $2f in (byte) shiftProtoBobRight::j#1 ← (byte) shiftProtoBobRight::j#5 - (number) $2f Adding number conversion cast (unumber) $18 in (byte) shiftProtoBobRight::j#2 ← (byte) shiftProtoBobRight::j#6 + (number) $18 -Adding number conversion cast (unumber) $17 in (byte) shiftProtoBobDown::i#0 ← (number) $17 Adding number conversion cast (unumber) 0 in (bool~) shiftProtoBobDown::$0 ← (byte) shiftProtoBobDown::i#2 > (number) 0 Adding number conversion cast (unumber) $17 in *((const byte*) PROTO_BOB + (byte) shiftProtoBobDown::i#3) ← *((const byte*) PROTO_BOB+(number) $17 + (byte) shiftProtoBobDown::i#3) Adding number conversion cast (unumber) $2f in *((const byte*) PROTO_BOB+(number) $18 + (byte) shiftProtoBobDown::i#3) ← *((const byte*) PROTO_BOB+(number) $2f + (byte) shiftProtoBobDown::i#3) @@ -2619,10 +2605,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number Adding number conversion cast (unumber) $18 in *((const byte*) PROTO_BOB + (number) $18) ← ((unumber)) (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) PROTO_BOB + (number) $30) ← (number) 0 Adding number conversion cast (unumber) $30 in *((const byte*) PROTO_BOB + (number) $30) ← ((unumber)) (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bobCharsetFindOrAddGlyph::glyph_id#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) bobCharsetFindOrAddGlyph::found#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) bobCharsetFindOrAddGlyph::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bobCharsetFindOrAddGlyph::i1#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) bobCharsetFindOrAddGlyph::$1 ← (byte) bobCharsetFindOrAddGlyph::i#2 < (number) 8 Adding number conversion cast (unumber) 0 in (byte) bobCharsetFindOrAddGlyph::found#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) bobCharsetFindOrAddGlyph::$6 ← (number) 0 != (byte) bobCharsetFindOrAddGlyph::found#2 @@ -2635,10 +2617,6 @@ Adding number conversion cast (unumber) 0 in (byte) progress_idx#9 ← (number) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast (byte~) mulf8s_prepared::$0 ← (byte)(signed byte) mulf8s_prepared::b#1 Inlining cast (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#3 @@ -2651,9 +2629,7 @@ Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) main::angle#0 ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) $f -Inlining cast (signed byte) main::r#0 ← (snumber)(number) $1e Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 1 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 2 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 @@ -2672,22 +2648,10 @@ Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) 2) ← (u Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $2a) ← (unumber)(number) 0 Inlining cast *((byte*) renderBobCleanup::screen#0 + (unumber)(number) $52) ← (unumber)(number) 0 Inlining cast (byte) bob_charset_next_id#2 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::bob_table_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::shift_y#0 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::shift_x#0 ← (unumber)(number) 0 -Inlining cast (byte) prepareBobs::cell#0 ← (unumber)(number) 0 -Inlining cast (byte) shiftProtoBobRight::carry#0 ← (unumber)(number) 0 -Inlining cast (byte) shiftProtoBobRight::j#0 ← (unumber)(number) 0 -Inlining cast (byte) shiftProtoBobRight::i#0 ← (unumber)(number) 0 -Inlining cast (byte) shiftProtoBobDown::i#0 ← (unumber)(number) $17 Inlining cast *((const byte*) PROTO_BOB+(unumber)(number) $30 + (byte) shiftProtoBobDown::i#3) ← (unumber)(number) 0 Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) 0) ← (unumber)(number) 0 Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) $18) ← (unumber)(number) 0 Inlining cast *((const byte*) PROTO_BOB + (unumber)(number) $30) ← (unumber)(number) 0 -Inlining cast (byte) bobCharsetFindOrAddGlyph::glyph_id#0 ← (unumber)(number) 0 -Inlining cast (byte) bobCharsetFindOrAddGlyph::found#0 ← (unumber)(number) 1 -Inlining cast (byte) bobCharsetFindOrAddGlyph::i#0 ← (unumber)(number) 0 -Inlining cast (byte) bobCharsetFindOrAddGlyph::i1#0 ← (unumber)(number) 0 Inlining cast (byte) bobCharsetFindOrAddGlyph::found#1 ← (unumber)(number) 0 Inlining cast (byte) progress_idx#6 ← (unumber)(number) 0 Inlining cast (byte) progress_idx#9 ← (unumber)(number) 0 @@ -2699,22 +2663,6 @@ Simplifying constant pointer cast (byte*) 56320 Simplifying constant pointer cast (byte*) 56321 Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 @@ -2723,29 +2671,16 @@ Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 4096 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $20 -Simplifying constant integer cast $65 -Simplifying constant integer cast $74 -Simplifying constant integer cast $75 -Simplifying constant integer cast $61 -Simplifying constant integer cast $f6 -Simplifying constant integer cast $e7 -Simplifying constant integer cast $ea -Simplifying constant integer cast $e0 Simplifying constant integer cast $40 Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -2766,10 +2701,8 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast $f8 Simplifying constant integer cast $f -Simplifying constant integer cast $1e Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 2 @@ -2839,22 +2772,14 @@ Simplifying constant integer cast $52 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $30 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 9 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $30 Simplifying constant integer cast $2f Simplifying constant integer cast $18 -Simplifying constant integer cast $17 Simplifying constant integer cast 0 Simplifying constant integer cast $17 Simplifying constant integer cast $2f @@ -2867,10 +2792,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $18 Simplifying constant integer cast 0 Simplifying constant integer cast $30 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2885,15 +2806,11 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -2912,10 +2829,8 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) $f -Finalized signed number type (signed byte) $1e Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 2 Finalized unsigned number type (byte) 2 @@ -2976,22 +2891,14 @@ Finalized unsigned number type (byte) $52 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $30 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $30 Finalized unsigned number type (byte) $2f Finalized unsigned number type (byte) $18 -Finalized unsigned number type (byte) $17 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $17 Finalized unsigned number type (byte) $2f @@ -3004,10 +2911,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $30 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -3634,7 +3537,7 @@ Constant inlined shiftProtoBobRight::$3 = (byte) $80 Constant inlined renderBobCleanup::i#0 = (byte) 0 Constant inlined main::r#0 = (signed byte) $1e Constant inlined prepareBobs::shift_y#0 = (byte) 0 -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined progress_idx#17 = (byte) 0 Constant inlined renderBobInit::y#0 = (byte) 0 Constant inlined main::angle#0 = (byte) 0 @@ -4449,7 +4352,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [244] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [244] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [244] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [244] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [244] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [244] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [245] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 @@ -6660,7 +6563,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [244] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [244] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -8959,7 +8862,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [244] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [244] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -9482,8 +9385,8 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BOB_CHARSET = (byte*) 8192 (const byte*) BOB_SCREEN = (byte*) 10240 -(const byte) BOB_SHIFTS_X = (number) 4 -(const byte) BOB_SHIFTS_Y = (number) 8 +(const byte) BOB_SHIFTS_X = (byte) 4 +(const byte) BOB_SHIFTS_Y = (byte) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*) 53280 @@ -9494,9 +9397,9 @@ FINAL SYMBOL TABLE (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const byte*) D018 = (byte*) 53272 -(const byte) KEY_SPACE = (number) $3c +(const byte) KEY_SPACE = (byte) $3c (const word*) MUL40[(number) $20] = { fill( $20, 0) } -(const byte) NUM_BOBS = (number) $14 +(const byte) NUM_BOBS = (byte) $14 (const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) @@ -11309,7 +11212,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [244] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [244] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/complex/prebob/vogel-bobs.sym b/src/test/ref/complex/prebob/vogel-bobs.sym index ba7e7d648..d7e149187 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.sym +++ b/src/test/ref/complex/prebob/vogel-bobs.sym @@ -3,8 +3,8 @@ (label) @end (const byte*) BOB_CHARSET = (byte*) 8192 (const byte*) BOB_SCREEN = (byte*) 10240 -(const byte) BOB_SHIFTS_X = (number) 4 -(const byte) BOB_SHIFTS_Y = (number) 8 +(const byte) BOB_SHIFTS_X = (byte) 4 +(const byte) BOB_SHIFTS_Y = (byte) 8 (const byte) BOB_SUBTABLE_SIZE = (const byte) BOB_SHIFTS_X*(const byte) BOB_SHIFTS_Y (const byte*) BOB_TABLES[(number) 9*(number) 8*(number) 4] = { fill( 9*8*4, 0) } (const byte*) BORDERCOL = (byte*) 53280 @@ -15,9 +15,9 @@ (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const byte*) D018 = (byte*) 53272 -(const byte) KEY_SPACE = (number) $3c +(const byte) KEY_SPACE = (byte) $3c (const word*) MUL40[(number) $20] = { fill( $20, 0) } -(const byte) NUM_BOBS = (number) $14 +(const byte) NUM_BOBS = (byte) $14 (const byte*) PROTO_BOB[(number) 3*(number) 3*(number) 8] = kickasm {{ .var pic = LoadPicture("smiley.png", List().add($000000, $ffffff)) .for (var x=0;x<3; x++) .for (var y=0; y<24; y++) diff --git a/src/test/ref/complex/prebob/vogel-sprites.cfg b/src/test/ref/complex/prebob/vogel-sprites.cfg index e93e40eaa..71691d370 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.cfg +++ b/src/test/ref/complex/prebob/vogel-sprites.cfg @@ -381,7 +381,7 @@ mulf_init: scope:[mulf_init] from init::@4 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [184] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [184] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [184] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [184] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [184] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [184] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 diff --git a/src/test/ref/complex/prebob/vogel-sprites.log b/src/test/ref/complex/prebob/vogel-sprites.log index acf225e02..6312d6e36 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.log +++ b/src/test/ref/complex/prebob/vogel-sprites.log @@ -100,9 +100,9 @@ CONTROL FLOW GRAPH SSA to:@4 @4: scope:[] from @begin (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number) $400+(number) $3f8 - (byte) plex_show_idx#0 ← (number) 0 - (byte) plex_sprite_idx#0 ← (number) 0 - (byte) plex_sprite_msb#0 ← (number) 1 + (byte) plex_show_idx#0 ← (byte) 0 + (byte) plex_sprite_idx#0 ← (byte) 0 + (byte) plex_sprite_msb#0 ← (byte) 1 to:@9 (void()) plexInit((byte*) plexInit::screen) @@ -312,14 +312,14 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexSho (byte) plex_sprite_idx#40 ← phi( @4/(byte) plex_sprite_idx#0 ) (byte) plex_show_idx#40 ← phi( @4/(byte) plex_show_idx#0 ) (byte*) PLEX_SCREEN_PTR#26 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 ) - (byte) plex_free_next#4 ← (number) 0 + (byte) plex_free_next#4 ← (byte) 0 to:@37 (void()) mulf_init() mulf_init: scope:[mulf_init] from init::@4 - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -346,7 +346,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -746,7 +746,7 @@ loop: scope:[loop] from main::@1 (byte) plex_sprite_msb#35 ← phi( main::@1/(byte) plex_sprite_msb#25 ) (byte) plex_sprite_idx#36 ← phi( main::@1/(byte) plex_sprite_idx#28 ) (byte) plex_show_idx#36 ← phi( main::@1/(byte) plex_show_idx#28 ) - (byte) loop::angle#0 ← (number) 0 + (byte) loop::angle#0 ← (byte) 0 to:loop::@1 loop::@1: scope:[loop] from loop loop::@34 (byte*) PLEX_SCREEN_PTR#47 ← phi( loop/(byte*) PLEX_SCREEN_PTR#48 loop::@34/(byte*) PLEX_SCREEN_PTR#49 ) @@ -775,7 +775,7 @@ loop::@5: scope:[loop] from loop::@4 (byte) plex_show_idx#46 ← phi( loop::@4/(byte) plex_show_idx#48 ) (byte) loop::angle#2 ← phi( loop::@4/(byte) loop::angle#4 ) *((const byte*) BORDERCOL) ← (number) $f - (signed byte) loop::r#0 ← (number) $1e + (signed byte) loop::r#0 ← (signed byte) $1e (byte) loop::a#0 ← (byte) loop::angle#2 (byte) loop::i#0 ← (byte) 0 to:loop::@6 @@ -1032,16 +1032,16 @@ SYMBOL TABLE SSA (label) @9 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_PORT_A = (byte*)(number) $dc00 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 (const signed byte*) COS = (const signed byte*) SIN+(number) $40 (const byte*) D011 = (byte*)(number) $d011 -(const byte) GREEN = (number) 5 -(const byte) KEY_SPACE = (number) $3c -(const byte) NUM_BOBS = (number) $10 -(const byte) PLEX_COUNT = (number) $20 +(const byte) GREEN = (byte) 5 +(const byte) KEY_SPACE = (byte) $3c +(const byte) NUM_BOBS = (byte) $10 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -1115,9 +1115,9 @@ SYMBOL TABLE SSA (const byte*) SPRITES_XMSB = (byte*)(number) $d010 (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) VIC_RST8 = (number) $80 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) VIC_RST8 = (byte) $80 (void()) exit() (byte~) exit::$0 (bool~) exit::$1 @@ -1172,7 +1172,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#6 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -1187,7 +1187,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) loop() (bool~) loop::$0 (signed word~) loop::$1 @@ -1828,9 +1828,6 @@ SYMBOL TABLE SSA Fixing inline constructor with mulf8u_prepared::$0 ← (byte)*(mulf8u_prepared::memB) w= (byte)*(mulf8u_prepared::resL) Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) $40 in -Adding number conversion cast (unumber) 0 in (byte) plex_show_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#0 ← (number) 1 Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 Adding number conversion cast (unumber) 1 in (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) 1 in (number~) plexSort::$1 ← (byte) plexSort::m#2 + (number) 1 @@ -1862,17 +1859,12 @@ Adding number conversion cast (unumber) plexShowSprite::$6 in (number~) plexShow Adding number conversion cast (unumber) 2 in (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#15 * (number) 2 Adding number conversion cast (unumber) 0 in (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb#3 == (number) 0 Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#4 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) plex_free_next#4 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -1901,10 +1893,8 @@ Adding number conversion cast (unumber) 1 in (byte) init::i#1 ← (byte) init::i Adding number conversion cast (unumber) $ff in *((const byte*) SPRITES_ENABLE) ← (number) $ff Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) 0 in (bool~) exit::$1 ← (number) 0 != (byte~) exit::$0 -Adding number conversion cast (unumber) 0 in (byte) loop::angle#0 ← (number) 0 Adding number conversion cast (unumber) $d8 in (bool~) loop::$0 ← *((const byte*) RASTER) < (number) $d8 Adding number conversion cast (unumber) $f in *((const byte*) BORDERCOL) ← (number) $f -Adding number conversion cast (snumber) $1e in (signed byte) loop::r#0 ← (number) $1e Adding number conversion cast (unumber) 6 in *((const byte*) BORDERCOL) ← (number) 6 Adding number conversion cast (snumber) 2 in (number~) loop::$2 ← (signed word~) loop::$1 * (number) 2 Adding number conversion cast (snumber) loop::$2 in (number~) loop::$2 ← (signed word~) loop::$1 * (snumber)(number) 2 @@ -1923,20 +1913,12 @@ Adding number conversion cast (unumber) 0 in (bool~) loop::$12 ← (byte~) loop: Adding number conversion cast (unumber) 1 in (byte) loop::i1#1 ← (byte) loop::i1#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) 0 in (bool~) loop::$21 ← (number) 0 != (byte~) loop::$18 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) plex_show_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) plex_sprite_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) plex_sprite_msb#0 ← (unumber)(number) 1 Inlining cast (byte) plex_show_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#1 ← (unumber)(number) 1 Inlining cast *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 Inlining cast (byte) plex_free_next#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#4 ← (unumber)(number) 1 -Inlining cast (byte) plex_free_next#4 ← (unumber)(number) 0 -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast (byte~) mulf8s_prepared::$0 ← (byte)(signed byte) mulf8s_prepared::b#1 Inlining cast (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#3 @@ -1948,9 +1930,7 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) loop::angle#0 ← (unumber)(number) 0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) $f -Inlining cast (signed byte) loop::r#0 ← (snumber)(number) $1e Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 6 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 3 Successful SSA optimization Pass2InlineCast @@ -1968,27 +1948,8 @@ Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 Simplifying constant pointer cast (signed byte*) 253 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $40 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant integer cast $3f8 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -2011,17 +1972,12 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -2047,10 +2003,8 @@ Simplifying constant integer cast 1 Simplifying constant integer cast $ff Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $d8 Simplifying constant integer cast $f -Simplifying constant integer cast $1e Simplifying constant integer cast 6 Simplifying constant integer cast 2 Simplifying constant integer cast 2 @@ -2064,9 +2018,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -2089,16 +2040,11 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -2121,10 +2067,8 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $d8 Finalized unsigned number type (byte) $f -Finalized signed number type (signed byte) $1e Finalized unsigned number type (byte) 6 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2 @@ -2632,7 +2576,7 @@ Constant inlined mulf_init::x_255#0 = (byte) -1 Constant inlined mulf_init::x_2#0 = (byte) 0 Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_SPACE Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_SPACE -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined loop::i1#0 = (byte) 0 Constant inlined plexInit::screen#0 = (const byte*) SCREEN Constant inlined loop::angle#0 = (byte) 0 @@ -3235,7 +3179,7 @@ mulf_init: scope:[mulf_init] from init::@4 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [184] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [184] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [184] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [184] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [184] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [184] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [185] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 @@ -4903,7 +4847,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [184] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [184] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -6559,7 +6503,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [184] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [184] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -7061,16 +7005,16 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const byte*) D011 = (byte*) 53265 -(const byte) GREEN = (number) 5 -(const byte) KEY_SPACE = (number) $3c -(const byte) NUM_BOBS = (number) $10 -(const byte) PLEX_COUNT = (number) $20 +(const byte) GREEN = (byte) 5 +(const byte) KEY_SPACE = (byte) $3c +(const byte) NUM_BOBS = (byte) $10 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -7093,9 +7037,9 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_XMSB = (byte*) 53264 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) VIC_RST8 = (number) $80 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) VIC_RST8 = (byte) $80 (void()) exit() (byte~) exit::$0 reg byte a 22.0 (label) exit::@1 @@ -8382,7 +8326,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [184] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [184] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/complex/prebob/vogel-sprites.sym b/src/test/ref/complex/prebob/vogel-sprites.sym index 3e434f145..fd273e7b3 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.sym +++ b/src/test/ref/complex/prebob/vogel-sprites.sym @@ -1,16 +1,16 @@ (label) @1 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 (const signed byte*) COS = (const signed byte*) SIN+(byte) $40 (const byte*) D011 = (byte*) 53265 -(const byte) GREEN = (number) 5 -(const byte) KEY_SPACE = (number) $3c -(const byte) NUM_BOBS = (number) $10 -(const byte) PLEX_COUNT = (number) $20 +(const byte) GREEN = (byte) 5 +(const byte) KEY_SPACE = (byte) $3c +(const byte) NUM_BOBS = (byte) $10 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -33,9 +33,9 @@ (const byte*) SPRITES_XMSB = (byte*) 53264 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) VIC_RST8 = (number) $80 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) VIC_RST8 = (byte) $80 (void()) exit() (byte~) exit::$0 reg byte a 22.0 (label) exit::@1 diff --git a/src/test/ref/complex/splines/truetype-splines.cfg b/src/test/ref/complex/splines/truetype-splines.cfg index a4d89f6a1..21f5adfbb 100644 --- a/src/test/ref/complex/splines/truetype-splines.cfg +++ b/src/test/ref/complex/splines/truetype-splines.cfg @@ -560,7 +560,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [310] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [310] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [310] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [310] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [310] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [310] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [311] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index ea25431ac..d9a38ec34 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -131,16 +131,16 @@ Converted procedure struct value parameter to member unwinding (void()) spline_1 Converted procedure struct value parameter to member unwinding (void()) spline_8seg((signed word) spline_8seg::p0_x , (signed word) spline_8seg::p0_y , (signed word) spline_8seg::p1_x , (signed word) spline_8seg::p1_y , (signed word) spline_8seg::p2_x , (signed word) spline_8seg::p2_y) Converted procedure struct value parameter to member unwinding (void()) spline_8segB((signed word) spline_8segB::p0_x , (signed word) spline_8segB::p0_y , (signed word) spline_8segB::p1_x , (signed word) spline_8segB::p1_y , (signed word) spline_8segB::p2_x , (signed word) spline_8segB::p2_y) Converted procedure struct value parameter to member unwinding (struct SplineVector16()) rotate((signed word) rotate::vector_x , (signed word) rotate::vector_y , (byte) rotate::angle) -Adding struct value list initializer (signed word) spline_16seg::a_x ← (signed word)(number~) spline_16seg::$2 -Adding struct value list initializer (signed word) spline_16seg::a_y ← (signed word)(number~) spline_16seg::$5 -Adding struct value list initializer (signed word) spline_16seg::b_x ← (signed word)(number~) spline_16seg::$7 -Adding struct value list initializer (signed word) spline_16seg::b_y ← (signed word)(number~) spline_16seg::$9 -Adding struct value list initializer (signed dword) spline_16seg::i_x ← (signed dword)(number~) spline_16seg::$15 -Adding struct value list initializer (signed dword) spline_16seg::i_y ← (signed dword)(number~) spline_16seg::$21 -Adding struct value list initializer (signed dword) spline_16seg::j_x ← (signed dword)(number~) spline_16seg::$24 -Adding struct value list initializer (signed dword) spline_16seg::j_y ← (signed dword)(number~) spline_16seg::$27 -Adding struct value list initializer (signed dword) spline_16seg::p_x ← (signed dword)(number~) spline_16seg::$29 -Adding struct value list initializer (signed dword) spline_16seg::p_y ← (signed dword)(number~) spline_16seg::$31 +Adding struct value list initializer (signed word) spline_16seg::a_x ← (number~) spline_16seg::$2 +Adding struct value list initializer (signed word) spline_16seg::a_y ← (number~) spline_16seg::$5 +Adding struct value list initializer (signed word) spline_16seg::b_x ← (number~) spline_16seg::$7 +Adding struct value list initializer (signed word) spline_16seg::b_y ← (number~) spline_16seg::$9 +Adding struct value list initializer (signed dword) spline_16seg::i_x ← (number~) spline_16seg::$15 +Adding struct value list initializer (signed dword) spline_16seg::i_y ← (number~) spline_16seg::$21 +Adding struct value list initializer (signed dword) spline_16seg::j_x ← (number~) spline_16seg::$24 +Adding struct value list initializer (signed dword) spline_16seg::j_y ← (number~) spline_16seg::$27 +Adding struct value list initializer (signed dword) spline_16seg::p_x ← (number~) spline_16seg::$29 +Adding struct value list initializer (signed dword) spline_16seg::p_y ← (number~) spline_16seg::$31 Adding struct value list initializer *((signed word*~) spline_16seg::$51 + (byte~) spline_16seg::$49) ← (signed word~) spline_16seg::$40 Adding struct value list initializer *((signed word*~) spline_16seg::$52 + (byte~) spline_16seg::$49) ← (signed word~) spline_16seg::$43 Adding struct value list initializer (signed dword) spline_16seg::p_x ← (signed dword~) spline_16seg::$44 @@ -149,16 +149,16 @@ Adding struct value list initializer (signed dword) spline_16seg::i_x ← (signe Adding struct value list initializer (signed dword) spline_16seg::i_y ← (signed dword~) spline_16seg::$47 Adding struct value list initializer *((signed word*~) spline_16seg::$53 + (number~) spline_16seg::$50) ← (signed word~) spline_16seg::$34 Adding struct value list initializer *((signed word*~) spline_16seg::$54 + (number~) spline_16seg::$50) ← (signed word~) spline_16seg::$37 -Adding struct value list initializer (signed word) spline_8seg::a_x ← (signed word)(number~) spline_8seg::$2 -Adding struct value list initializer (signed word) spline_8seg::a_y ← (signed word)(number~) spline_8seg::$5 -Adding struct value list initializer (signed word) spline_8seg::b_x ← (signed word)(number~) spline_8seg::$7 -Adding struct value list initializer (signed word) spline_8seg::b_y ← (signed word)(number~) spline_8seg::$9 -Adding struct value list initializer (signed dword) spline_8seg::i_x ← (signed dword)(number~) spline_8seg::$16 -Adding struct value list initializer (signed dword) spline_8seg::i_y ← (signed dword)(number~) spline_8seg::$23 -Adding struct value list initializer (signed dword) spline_8seg::j_x ← (signed dword)(number~) spline_8seg::$26 -Adding struct value list initializer (signed dword) spline_8seg::j_y ← (signed dword)(number~) spline_8seg::$29 -Adding struct value list initializer (signed dword) spline_8seg::p_x ← (signed dword)(number~) spline_8seg::$31 -Adding struct value list initializer (signed dword) spline_8seg::p_y ← (signed dword)(number~) spline_8seg::$33 +Adding struct value list initializer (signed word) spline_8seg::a_x ← (number~) spline_8seg::$2 +Adding struct value list initializer (signed word) spline_8seg::a_y ← (number~) spline_8seg::$5 +Adding struct value list initializer (signed word) spline_8seg::b_x ← (number~) spline_8seg::$7 +Adding struct value list initializer (signed word) spline_8seg::b_y ← (number~) spline_8seg::$9 +Adding struct value list initializer (signed dword) spline_8seg::i_x ← (number~) spline_8seg::$16 +Adding struct value list initializer (signed dword) spline_8seg::i_y ← (number~) spline_8seg::$23 +Adding struct value list initializer (signed dword) spline_8seg::j_x ← (number~) spline_8seg::$26 +Adding struct value list initializer (signed dword) spline_8seg::j_y ← (number~) spline_8seg::$29 +Adding struct value list initializer (signed dword) spline_8seg::p_x ← (number~) spline_8seg::$31 +Adding struct value list initializer (signed dword) spline_8seg::p_y ← (number~) spline_8seg::$33 Adding struct value list initializer *((signed word*~) spline_8seg::$53 + (byte~) spline_8seg::$51) ← (signed word~) spline_8seg::$42 Adding struct value list initializer *((signed word*~) spline_8seg::$54 + (byte~) spline_8seg::$51) ← (signed word~) spline_8seg::$45 Adding struct value list initializer (signed dword) spline_8seg::p_x ← (signed dword~) spline_8seg::$46 @@ -167,16 +167,16 @@ Adding struct value list initializer (signed dword) spline_8seg::i_x ← (signed Adding struct value list initializer (signed dword) spline_8seg::i_y ← (signed dword~) spline_8seg::$49 Adding struct value list initializer *((signed word*~) spline_8seg::$55 + (number~) spline_8seg::$52) ← (signed word~) spline_8seg::$36 Adding struct value list initializer *((signed word*~) spline_8seg::$56 + (number~) spline_8seg::$52) ← (signed word~) spline_8seg::$39 -Adding struct value list initializer (signed word) spline_8segB::a_x ← (signed word)(number~) spline_8segB::$2 -Adding struct value list initializer (signed word) spline_8segB::a_y ← (signed word)(number~) spline_8segB::$5 -Adding struct value list initializer (signed word) spline_8segB::b_x ← (signed word)(number~) spline_8segB::$7 -Adding struct value list initializer (signed word) spline_8segB::b_y ← (signed word)(number~) spline_8segB::$9 -Adding struct value list initializer (signed word) spline_8segB::i_x ← (signed word)(number~) spline_8segB::$11 -Adding struct value list initializer (signed word) spline_8segB::i_y ← (signed word)(number~) spline_8segB::$13 -Adding struct value list initializer (signed word) spline_8segB::j_x ← (signed word)(number~) spline_8segB::$14 -Adding struct value list initializer (signed word) spline_8segB::j_y ← (signed word)(number~) spline_8segB::$15 -Adding struct value list initializer (signed word) spline_8segB::p_x ← (signed word)(number~) spline_8segB::$16 -Adding struct value list initializer (signed word) spline_8segB::p_y ← (signed word)(number~) spline_8segB::$17 +Adding struct value list initializer (signed word) spline_8segB::a_x ← (number~) spline_8segB::$2 +Adding struct value list initializer (signed word) spline_8segB::a_y ← (number~) spline_8segB::$5 +Adding struct value list initializer (signed word) spline_8segB::b_x ← (number~) spline_8segB::$7 +Adding struct value list initializer (signed word) spline_8segB::b_y ← (number~) spline_8segB::$9 +Adding struct value list initializer (signed word) spline_8segB::i_x ← (number~) spline_8segB::$11 +Adding struct value list initializer (signed word) spline_8segB::i_y ← (number~) spline_8segB::$13 +Adding struct value list initializer (signed word) spline_8segB::j_x ← (number~) spline_8segB::$14 +Adding struct value list initializer (signed word) spline_8segB::j_y ← (number~) spline_8segB::$15 +Adding struct value list initializer (signed word) spline_8segB::p_x ← (number~) spline_8segB::$16 +Adding struct value list initializer (signed word) spline_8segB::p_y ← (number~) spline_8segB::$17 Adding struct value list initializer *((signed word*~) spline_8segB::$33 + (byte~) spline_8segB::$31) ← (number~) spline_8segB::$23 Adding struct value list initializer *((signed word*~) spline_8segB::$34 + (byte~) spline_8segB::$31) ← (number~) spline_8segB::$25 Adding struct value list initializer (signed word) spline_8segB::p_x ← (signed word~) spline_8segB::$26 @@ -185,8 +185,8 @@ Adding struct value list initializer (signed word) spline_8segB::i_x ← (signed Adding struct value list initializer (signed word) spline_8segB::i_y ← (signed word~) spline_8segB::$29 Adding struct value list initializer *((signed word*~) spline_8segB::$35 + (number~) spline_8segB::$32) ← (number~) spline_8segB::$19 Adding struct value list initializer *((signed word*~) spline_8segB::$36 + (number~) spline_8segB::$32) ← (number~) spline_8segB::$21 -Adding struct value member variable copy (signed word) show_letter::current_x ← (signed word)(number) 0 -Adding struct value member variable copy (signed word) show_letter::current_y ← (signed word)(number) 0 +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 list initializer (signed word) show_letter::to_x ← *((const struct Segment*) letter_c + (byte~) show_letter::$20).to.x Adding struct value list initializer (signed word) show_letter::to_y ← *((const struct Segment*) letter_c + (byte~) show_letter::$20).to.y Adding struct value list initializer (signed word) show_letter::to_x ← (number~) show_letter::$0 @@ -215,8 +215,8 @@ Adding struct value member variable copy (signed word) bitmap_plot_spline_8seg:: 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) -Adding struct value list initializer (signed word) rotate::rotated_x ← (signed word)(signed word~) rotate::$16 -Adding struct value list initializer (signed word) rotate::rotated_y ← (signed word)(signed word~) rotate::$19 +Adding struct value list initializer (signed word) rotate::rotated_x ← (signed word~) rotate::$16 +Adding struct value list initializer (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 @@ -509,28 +509,28 @@ spline_8segB: scope:[spline_8segB] from show_letter::@3 (number~) spline_8segB::$3 ← (signed word) spline_8segB::p1_y#1 * (number) 2 (number~) spline_8segB::$4 ← (signed word) spline_8segB::p2_y#1 - (number~) spline_8segB::$3 (number~) spline_8segB::$5 ← (number~) spline_8segB::$4 + (signed word) spline_8segB::p0_y#1 - (signed word) spline_8segB::a_x#0 ← (signed word)(number~) spline_8segB::$2 - (signed word) spline_8segB::a_y#0 ← (signed word)(number~) spline_8segB::$5 + (signed word) spline_8segB::a_x#0 ← (number~) spline_8segB::$2 + (signed word) spline_8segB::a_y#0 ← (number~) spline_8segB::$5 (signed word~) spline_8segB::$6 ← (signed word) spline_8segB::p1_x#1 - (signed word) spline_8segB::p0_x#1 (number~) spline_8segB::$7 ← (signed word~) spline_8segB::$6 * (number) 2 (signed word~) spline_8segB::$8 ← (signed word) spline_8segB::p1_y#1 - (signed word) spline_8segB::p0_y#1 (number~) spline_8segB::$9 ← (signed word~) spline_8segB::$8 * (number) 2 - (signed word) spline_8segB::b_x#0 ← (signed word)(number~) spline_8segB::$7 - (signed word) spline_8segB::b_y#0 ← (signed word)(number~) spline_8segB::$9 + (signed word) spline_8segB::b_x#0 ← (number~) spline_8segB::$7 + (signed word) spline_8segB::b_y#0 ← (number~) spline_8segB::$9 (number~) spline_8segB::$10 ← (signed word) spline_8segB::b_x#0 * (number) 8 (number~) spline_8segB::$11 ← (signed word) spline_8segB::a_x#0 + (number~) spline_8segB::$10 (number~) spline_8segB::$12 ← (signed word) spline_8segB::b_y#0 * (number) 8 (number~) spline_8segB::$13 ← (signed word) spline_8segB::a_y#0 + (number~) spline_8segB::$12 - (signed word) spline_8segB::i_x#0 ← (signed word)(number~) spline_8segB::$11 - (signed word) spline_8segB::i_y#0 ← (signed word)(number~) spline_8segB::$13 + (signed word) spline_8segB::i_x#0 ← (number~) spline_8segB::$11 + (signed word) spline_8segB::i_y#0 ← (number~) spline_8segB::$13 (number~) spline_8segB::$14 ← (signed word) spline_8segB::a_x#0 * (number) 2 (number~) spline_8segB::$15 ← (signed word) spline_8segB::a_y#0 * (number) 2 - (signed word) spline_8segB::j_x#0 ← (signed word)(number~) spline_8segB::$14 - (signed word) spline_8segB::j_y#0 ← (signed word)(number~) spline_8segB::$15 + (signed word) spline_8segB::j_x#0 ← (number~) spline_8segB::$14 + (signed word) spline_8segB::j_y#0 ← (number~) spline_8segB::$15 (number~) spline_8segB::$16 ← (signed word) spline_8segB::p0_x#1 * (number) $40 (number~) spline_8segB::$17 ← (signed word) spline_8segB::p0_y#1 * (number) $40 - (signed word) spline_8segB::p_x#0 ← (signed word)(number~) spline_8segB::$16 - (signed word) spline_8segB::p_y#0 ← (signed word)(number~) spline_8segB::$17 + (signed word) spline_8segB::p_x#0 ← (number~) spline_8segB::$16 + (signed word) spline_8segB::p_y#0 ← (number~) spline_8segB::$17 (byte) spline_8segB::n#0 ← (byte) 0 to:spline_8segB::@1 spline_8segB::@1: scope:[spline_8segB] from spline_8segB spline_8segB::@1 @@ -633,7 +633,7 @@ bitmap_init: scope:[bitmap_init] from main::@21 (byte*) bitmap_init::gfx#1 ← phi( main::@21/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -1043,9 +1043,9 @@ sgn_u16::@return: scope:[sgn_u16] from sgn_u16::@1 sgn_u16::@3 (void()) mulf_init() mulf_init: scope:[mulf_init] from main - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -1072,7 +1072,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -1309,7 +1309,7 @@ main::@20: scope:[main] from main::toD0181_@return (byte~) main::$4 ← (byte) main::toD0181_return#3 *((const byte*) D018) ← (byte~) main::$4 *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 - (byte) main::angle#0 ← (number) 0 + (byte) main::angle#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@20 main::@9 (byte*) bitmap_gfx#20 ← phi( main::@20/(byte*) bitmap_gfx#23 main::@9/(byte*) bitmap_gfx#24 ) @@ -1390,8 +1390,8 @@ main::@return: scope:[main] from main::@13 (void()) show_letter((byte) show_letter::angle) show_letter: scope:[show_letter] from main::@24 (byte) show_letter::angle#3 ← phi( main::@24/(byte) show_letter::angle#0 ) - (signed word) show_letter::current_x#0 ← (signed word)(number) 0 - (signed word) show_letter::current_y#0 ← (signed word)(number) 0 + (signed word) show_letter::current_x#0 ← (signed word) 0 + (signed word) show_letter::current_y#0 ← (signed word) 0 (byte) show_letter::i#0 ← (byte) 0 to:show_letter::@1 show_letter::@1: scope:[show_letter] from show_letter show_letter::@5 @@ -1683,8 +1683,8 @@ rotate::@5: scope:[rotate] from rotate::@4 (byte~) rotate::$17 ← > (signed word) rotate::yr#1 (signed byte~) rotate::$18 ← ((signed byte)) (byte~) rotate::$17 (signed word~) rotate::$19 ← ((signed word)) (signed byte~) rotate::$18 - (signed word) rotate::rotated_x#0 ← (signed word)(signed word~) rotate::$16 - (signed word) rotate::rotated_y#0 ← (signed word)(signed word~) rotate::$19 + (signed word) rotate::rotated_x#0 ← (signed word~) rotate::$16 + (signed word) rotate::rotated_y#0 ← (signed word~) rotate::$19 (signed word) rotate::return_x#2 ← (signed word) rotate::rotated_x#0 (signed word) rotate::return_y#2 ← (signed word) rotate::rotated_y#0 (struct SplineVector16) rotate::return#0 ← struct-unwound {(signed word) rotate::return_x#2, (signed word) rotate::return_y#2} @@ -1718,7 +1718,7 @@ SYMBOL TABLE SSA (label) @end (const byte*) BITMAP_GRAPHICS = (byte*)(number) $6000 (const byte*) BITMAP_SCREEN = (byte*)(number) $5c00 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const signed byte*) COS = (const signed byte*) SIN+(number) $40 @@ -1754,10 +1754,10 @@ SYMBOL TABLE SSA (signed word) SplineVector16::y (signed dword) SplineVector32::x (signed dword) SplineVector32::y -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 (number~) abs_u16::$1 @@ -2193,7 +2193,7 @@ SYMBOL TABLE SSA (byte*) bitmap_screen#7 (byte*) bitmap_screen#8 (byte*) bitmap_screen#9 -(const struct Segment*) letter_c[(number) $16] = { { type: (const byte) MOVE_TO, to: { x: (signed word)(number) $6c, y: (signed word)(number) $92 }, via: { x: (signed word)(number) 0, y: (signed word)(number) 0 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $59, y: (signed word)(number) $b6 }, via: { x: (signed word)(number) $67, y: (signed word)(number) $a9 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $3b, y: (signed word)(number) $c3 }, via: { x: (signed word)(number) $4b, y: (signed word)(number) $c3 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $17, y: (signed word)(number) $b2 }, via: { x: (signed word)(number) $26, y: (signed word)(number) $c3 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) 9, y: (signed word)(number) $84 }, via: { x: (signed word)(number) 9, y: (signed word)(number) $a1 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $19, y: (signed word)(number) $57 }, via: { x: (signed word)(number) 9, y: (signed word)(number) $68 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $41, y: (signed word)(number) $45 }, via: { x: (signed word)(number) $2a, y: (signed word)(number) $45 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $5d, y: (signed word)(number) $4f }, via: { x: (signed word)(number) $52, y: (signed word)(number) $45 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $69, y: (signed word)(number) $62 }, via: { x: (signed word)(number) $69, y: (signed word)(number) $58 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $66, y: (signed word)(number) $6a }, via: { x: (signed word)(number) $69, y: (signed word)(number) $67 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $5d, y: (signed word)(number) $6d }, via: { x: (signed word)(number) $62, y: (signed word)(number) $6d } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $51, y: (signed word)(number) $68 }, via: { x: (signed word)(number) $55, y: (signed word)(number) $6d } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $4e, y: (signed word)(number) $5d }, via: { x: (signed word)(number) $4f, y: (signed word)(number) $65 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $49, y: (signed word)(number) $52 }, via: { x: (signed word)(number) $4e, y: (signed word)(number) $56 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $3d, y: (signed word)(number) $4e }, via: { x: (signed word)(number) $45, y: (signed word)(number) $4e } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $28, y: (signed word)(number) $58 }, via: { x: (signed word)(number) $30, y: (signed word)(number) $4e } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $1d, y: (signed word)(number) $79 }, via: { x: (signed word)(number) $1d, y: (signed word)(number) $64 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $28, y: (signed word)(number) $9e }, via: { x: (signed word)(number) $1d, y: (signed word)(number) $8e } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $44, y: (signed word)(number) $ae }, via: { x: (signed word)(number) $32, y: (signed word)(number) $ae } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $5b, y: (signed word)(number) $a6 }, via: { x: (signed word)(number) $50, y: (signed word)(number) $ae } }, { type: (const byte) SPLINE_TO, to: { x: (signed word)(number) $68, y: (signed word)(number) $90 }, via: { x: (signed word)(number) $62, y: (signed word)(number) $a0 } }, { type: (const byte) LINE_TO, to: { x: (signed word)(number) $6c, y: (signed word)(number) $92 }, via: { x: (signed word)(number) 0, y: (signed word)(number) 0 } } } +(const struct Segment*) letter_c[(number) $16] = { { type: (const byte) MOVE_TO, to: { x: (signed word) $6c, y: (signed word) $92 }, via: { x: (signed word) 0, y: (signed word) 0 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $59, y: (signed word) $b6 }, via: { x: (signed word) $67, y: (signed word) $a9 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $3b, y: (signed word) $c3 }, via: { x: (signed word) $4b, y: (signed word) $c3 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $17, y: (signed word) $b2 }, via: { x: (signed word) $26, y: (signed word) $c3 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) 9, y: (signed word) $84 }, via: { x: (signed word) 9, y: (signed word) $a1 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $19, y: (signed word) $57 }, via: { x: (signed word) 9, y: (signed word) $68 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $41, y: (signed word) $45 }, via: { x: (signed word) $2a, y: (signed word) $45 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $5d, y: (signed word) $4f }, via: { x: (signed word) $52, y: (signed word) $45 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $69, y: (signed word) $62 }, via: { x: (signed word) $69, y: (signed word) $58 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $66, y: (signed word) $6a }, via: { x: (signed word) $69, y: (signed word) $67 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $5d, y: (signed word) $6d }, via: { x: (signed word) $62, y: (signed word) $6d } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $51, y: (signed word) $68 }, via: { x: (signed word) $55, y: (signed word) $6d } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $4e, y: (signed word) $5d }, via: { x: (signed word) $4f, y: (signed word) $65 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $49, y: (signed word) $52 }, via: { x: (signed word) $4e, y: (signed word) $56 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $3d, y: (signed word) $4e }, via: { x: (signed word) $45, y: (signed word) $4e } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $28, y: (signed word) $58 }, via: { x: (signed word) $30, y: (signed word) $4e } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $1d, y: (signed word) $79 }, via: { x: (signed word) $1d, y: (signed word) $64 } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $28, y: (signed word) $9e }, via: { x: (signed word) $1d, y: (signed word) $8e } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $44, y: (signed word) $ae }, via: { x: (signed word) $32, y: (signed word) $ae } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $5b, y: (signed word) $a6 }, via: { x: (signed word) $50, y: (signed word) $ae } }, { type: (const byte) SPLINE_TO, to: { x: (signed word) $68, y: (signed word) $90 }, via: { x: (signed word) $62, y: (signed word) $a0 } }, { type: (const byte) LINE_TO, to: { x: (signed word) $6c, y: (signed word) $92 }, via: { x: (signed word) 0, y: (signed word) 0 } } } (void()) main() (byte~) main::$4 (bool~) main::$7 @@ -2891,7 +2891,6 @@ Adding number conversion cast (snumber) spline_8segB::$21 in (number~) spline_8s Adding number conversion cast (unumber) 8 in (number~) spline_8segB::$32 ← (number) 8 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16 Adding number conversion cast (unumber) spline_8segB::$32 in (number~) spline_8segB::$32 ← (unumber)(number) 8 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -2922,16 +2921,12 @@ Adding number conversion cast (unumber) sgn_u16::$1 in (number~) sgn_u16::$1 ← Adding number conversion cast (unumber) 0 in (bool~) sgn_u16::$2 ← (number) 0 != (unumber~) sgn_u16::$1 Adding number conversion cast (unumber) -1 in (word) sgn_u16::return#2 ← (number) -1 Adding number conversion cast (unumber) 1 in (word) sgn_u16::return#3 ← (number) 1 -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -2958,7 +2953,6 @@ Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0 Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const byte*) D011) ← (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const byte*) D011) ← ((unumber)) (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 -Adding number conversion cast (unumber) 0 in (byte) main::angle#0 ← (number) 0 Adding number conversion cast (unumber) $fe in (bool~) main::$7 ← *((const byte*) RASTER) != (number) $fe Adding number conversion cast (unumber) $ff in (bool~) main::$8 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 9 in (byte) main::angle#1 ← (byte) main::angle#3 + (number) 9 @@ -2992,7 +2986,6 @@ Adding number conversion cast (snumber) rotate::$13 in (number~) rotate::$13 ← Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast (byte~) bitmap_line::$15 ← (byte)(word) bitmap_line::y#3 @@ -3001,10 +2994,6 @@ Inlining cast (byte~) bitmap_line::$13 ← (byte)(word) bitmap_line::y#7 Inlining cast (byte~) bitmap_line::$24 ← (byte)(word) bitmap_line::y#8 Inlining cast (word) sgn_u16::return#2 ← (unumber)(number) -1 Inlining cast (word) sgn_u16::return#3 ← (unumber)(number) 1 -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast (word~) mulf16s::$0 ← (word)(signed word) mulf16s::a#4 Inlining cast (word~) mulf16s::$1 ← (word)(signed word) mulf16s::b#4 @@ -3016,7 +3005,6 @@ Inlining cast (word~) main::vicSelectGfxBank1_toDd001_$0 ← (word)(byte*) main: Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast (byte) main::angle#0 ← (unumber)(number) 0 Inlining cast (word~) show_letter::$12 ← (word)(signed word) show_letter::current_x#5 Inlining cast (word~) show_letter::$13 ← (word)(signed word) show_letter::current_y#5 Inlining cast (word~) show_letter::$14 ← (word)(signed word) show_letter::segment_to_x#4 @@ -3047,94 +3035,6 @@ Simplifying constant pointer cast (dword*) 252 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 23552 Simplifying constant pointer cast (byte*) 24576 -Simplifying constant integer cast $6c -Simplifying constant integer cast $92 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $59 -Simplifying constant integer cast $b6 -Simplifying constant integer cast $67 -Simplifying constant integer cast $a9 -Simplifying constant integer cast $3b -Simplifying constant integer cast $c3 -Simplifying constant integer cast $4b -Simplifying constant integer cast $c3 -Simplifying constant integer cast $17 -Simplifying constant integer cast $b2 -Simplifying constant integer cast $26 -Simplifying constant integer cast $c3 -Simplifying constant integer cast 9 -Simplifying constant integer cast $84 -Simplifying constant integer cast 9 -Simplifying constant integer cast $a1 -Simplifying constant integer cast $19 -Simplifying constant integer cast $57 -Simplifying constant integer cast 9 -Simplifying constant integer cast $68 -Simplifying constant integer cast $41 -Simplifying constant integer cast $45 -Simplifying constant integer cast $2a -Simplifying constant integer cast $45 -Simplifying constant integer cast $5d -Simplifying constant integer cast $4f -Simplifying constant integer cast $52 -Simplifying constant integer cast $45 -Simplifying constant integer cast $69 -Simplifying constant integer cast $62 -Simplifying constant integer cast $69 -Simplifying constant integer cast $58 -Simplifying constant integer cast $66 -Simplifying constant integer cast $6a -Simplifying constant integer cast $69 -Simplifying constant integer cast $67 -Simplifying constant integer cast $5d -Simplifying constant integer cast $6d -Simplifying constant integer cast $62 -Simplifying constant integer cast $6d -Simplifying constant integer cast $51 -Simplifying constant integer cast $68 -Simplifying constant integer cast $55 -Simplifying constant integer cast $6d -Simplifying constant integer cast $4e -Simplifying constant integer cast $5d -Simplifying constant integer cast $4f -Simplifying constant integer cast $65 -Simplifying constant integer cast $49 -Simplifying constant integer cast $52 -Simplifying constant integer cast $4e -Simplifying constant integer cast $56 -Simplifying constant integer cast $3d -Simplifying constant integer cast $4e -Simplifying constant integer cast $45 -Simplifying constant integer cast $4e -Simplifying constant integer cast $28 -Simplifying constant integer cast $58 -Simplifying constant integer cast $30 -Simplifying constant integer cast $4e -Simplifying constant integer cast $1d -Simplifying constant integer cast $79 -Simplifying constant integer cast $1d -Simplifying constant integer cast $64 -Simplifying constant integer cast $28 -Simplifying constant integer cast $9e -Simplifying constant integer cast $1d -Simplifying constant integer cast $8e -Simplifying constant integer cast $44 -Simplifying constant integer cast $ae -Simplifying constant integer cast $32 -Simplifying constant integer cast $ae -Simplifying constant integer cast $5b -Simplifying constant integer cast $a6 -Simplifying constant integer cast $50 -Simplifying constant integer cast $ae -Simplifying constant integer cast $68 -Simplifying constant integer cast $90 -Simplifying constant integer cast $62 -Simplifying constant integer cast $a0 -Simplifying constant integer cast $6c -Simplifying constant integer cast $92 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast 2 Simplifying constant integer cast 2 @@ -3156,7 +3056,6 @@ Simplifying constant integer cast $20 Simplifying constant integer cast $40 Simplifying constant integer cast 8 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -3178,16 +3077,12 @@ Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast -1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -3206,13 +3101,10 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant integer cast $fe Simplifying constant integer cast $ff Simplifying constant integer cast 9 Simplifying constant integer cast $3e7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $32 Simplifying constant integer cast $96 Simplifying constant integer cast $64 @@ -3226,8 +3118,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 2 -Simplifying constant integer cast (signed word~) rotate::$16 -Simplifying constant integer cast (signed word~) rotate::$19 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $40 Finalized signed number type (signed byte) 2 @@ -3250,7 +3140,6 @@ Finalized signed number type (signed byte) $20 Finalized signed number type (signed byte) $40 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -3270,15 +3159,11 @@ Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) -1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -3296,7 +3181,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 9 @@ -3384,6 +3268,16 @@ Inversing boolean not [304] (bool~) mulf_init::$10 ← (byte) mulf_init::x_255#1 Inversing boolean not [332] (bool~) mulf16s::$4 ← (signed word) mulf16s::a#5 >= (signed byte) 0 from [331] (bool~) mulf16s::$3 ← (signed word) mulf16s::a#5 < (signed byte) 0 Inversing boolean not [336] (bool~) mulf16s::$6 ← (signed word) mulf16s::b#5 >= (signed byte) 0 from [335] (bool~) mulf16s::$5 ← (signed word) mulf16s::b#5 < (signed byte) 0 Successful SSA optimization Pass2UnaryNotSimplification +Alias (signed word) spline_8segB::a_x#0 = (signed word~) spline_8segB::$2 +Alias (signed word) spline_8segB::a_y#0 = (signed word~) spline_8segB::$5 +Alias (signed word) spline_8segB::b_x#0 = (signed word~) spline_8segB::$7 +Alias (signed word) spline_8segB::b_y#0 = (signed word~) spline_8segB::$9 +Alias (signed word) spline_8segB::i_x#0 = (signed word~) spline_8segB::$11 +Alias (signed word) spline_8segB::i_y#0 = (signed word~) spline_8segB::$13 +Alias (signed word) spline_8segB::j_x#0 = (signed word~) spline_8segB::$14 +Alias (signed word) spline_8segB::j_y#0 = (signed word~) spline_8segB::$15 +Alias (signed word) spline_8segB::p_x#0 = (signed word~) spline_8segB::$16 +Alias (signed word) spline_8segB::p_y#0 = (signed word~) spline_8segB::$17 Alias (signed word) spline_8segB::p_x#1 = (signed word~) spline_8segB::$26 (signed word) spline_8segB::p_x#3 Alias (signed word) spline_8segB::p_y#1 = (signed word~) spline_8segB::$27 (signed word) spline_8segB::p_y#3 Alias (signed word) spline_8segB::i_x#1 = (signed word~) spline_8segB::$28 @@ -3789,10 +3683,10 @@ Simplifying expression containing zero (signed word*)show_letter::$25 in [469] ( 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) Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (void*) memset::return#2 and assignment [85] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [87] (void*) memset::return#3 ← (void*) memset::str#3 -Eliminating unused variable (struct SplineVector16) rotate::return#0 and assignment [354] (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 [355] (struct SplineVector16) rotate::return#1 ← struct-unwound {(signed word) rotate::return_x#2, (signed word) rotate::return_y#2} +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 [344] (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 [345] (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 @@ -3812,16 +3706,6 @@ Adding number conversion cast (unumber) 9 in if((byte) bitmap_plot_spline_8seg:: Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast (signed word~) spline_8segB::$2 -Simplifying constant integer cast (signed word~) spline_8segB::$5 -Simplifying constant integer cast (signed word~) spline_8segB::$7 -Simplifying constant integer cast (signed word~) spline_8segB::$9 -Simplifying constant integer cast (signed word~) spline_8segB::$11 -Simplifying constant integer cast (signed word~) spline_8segB::$13 -Simplifying constant integer cast (signed word~) spline_8segB::$14 -Simplifying constant integer cast (signed word~) spline_8segB::$15 -Simplifying constant integer cast (signed word~) spline_8segB::$16 -Simplifying constant integer cast (signed word~) spline_8segB::$17 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -3836,29 +3720,19 @@ Finalized unsigned number type (byte) $3d Finalized unsigned number type (byte) $16 Finalized unsigned number type (byte) 9 Successful SSA optimization PassNFinalizeNumberTypeConversions -Alias (signed word) spline_8segB::a_x#0 = (signed word~) spline_8segB::$2 -Alias (signed word) spline_8segB::a_y#0 = (signed word~) spline_8segB::$5 -Alias (signed word) spline_8segB::b_x#0 = (signed word~) spline_8segB::$7 -Alias (signed word) spline_8segB::b_y#0 = (signed word~) spline_8segB::$9 -Alias (signed word) spline_8segB::i_x#0 = (signed word~) spline_8segB::$11 -Alias (signed word) spline_8segB::i_y#0 = (signed word~) spline_8segB::$13 -Alias (signed word) spline_8segB::j_x#0 = (signed word~) spline_8segB::$14 -Alias (signed word) spline_8segB::j_y#0 = (signed word~) spline_8segB::$15 -Alias (signed word) spline_8segB::p_x#0 = (signed word~) spline_8segB::$16 -Alias (signed word) spline_8segB::p_y#0 = (signed word~) spline_8segB::$17 Alias (byte~) bitmap_init::$7 = (byte~) bitmap_init::$3 Alias (byte~) bitmap_plot_spline_8seg::$8 = (byte~) bitmap_plot_spline_8seg::$7 Successful SSA optimization Pass2AliasElimination -Simple Condition (bool~) bitmap_line::$4 [106] if((word) bitmap_line::dx#0==(byte) 0) goto bitmap_line::@24 -Simple Condition (bool~) bitmap_line::$5 [352] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 +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 [342] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [106] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1 +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 [217] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 -Constant right-side identified [221] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [224] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 -Constant right-side identified [244] (signed word*~) show_letter::$29 ← (signed word*)(const struct SplineVector16*) show_letter::$24 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y -Constant right-side identified [261] (signed word*~) show_letter::$31 ← (signed word*)(const struct SplineVector16*) show_letter::$26 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +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::$29 ← (signed word*)(const struct SplineVector16*) show_letter::$24 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y +Constant right-side identified [251] (signed word*~) show_letter::$31 ← (signed word*)(const struct SplineVector16*) show_letter::$26 + (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 @@ -4019,7 +3893,7 @@ Constant inlined sgn_u16::return#3 = (byte) 1 Constant inlined sgn_u16::return#2 = (byte) -1 Constant inlined memset::str#1 = (void*)(const byte*) BITMAP_GRAPHICS Constant inlined memset::str#0 = (void*)(const byte*) BITMAP_SCREEN -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined show_letter::current_y#0 = (signed word) 0 Constant inlined bitmap_clear::fgcol#0 = (const byte) WHITE Constant inlined main::vicSelectGfxBank1_toDd001_$0 = (word)(const byte*) BITMAP_SCREEN @@ -4899,7 +4773,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [310] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [310] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [310] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [310] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [310] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [310] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [311] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 @@ -8243,7 +8117,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [310] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [310] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -11321,7 +11195,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [310] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [310] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -11904,10 +11778,10 @@ FINAL SYMBOL TABLE (signed word) SplineVector16::y (signed dword) SplineVector32::x (signed dword) SplineVector32::y -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 reg byte a 4.0 (byte~) abs_u16::$1 reg byte a 4.0 @@ -14416,7 +14290,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [310] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [310] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/complex/splines/truetype-splines.sym b/src/test/ref/complex/splines/truetype-splines.sym index 83eff09e5..c8c58a08d 100644 --- a/src/test/ref/complex/splines/truetype-splines.sym +++ b/src/test/ref/complex/splines/truetype-splines.sym @@ -34,10 +34,10 @@ (signed word) SplineVector16::y (signed dword) SplineVector32::x (signed dword) SplineVector32::y -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 reg byte a 4.0 (byte~) abs_u16::$1 reg byte a 4.0 diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 05c8cba24..1bcd098c1 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -43,7 +43,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@4 @4: scope:[] from @begin - (byte) render_screen_showing ← (number) 0 + (byte) render_screen_showing ← (byte) 0 kickasm(location (const byte*) PLAYFIELD_SPRITES) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000)) // Put the sprites into memory .for(var sy=0;sy<10;sy++) { @@ -67,7 +67,7 @@ sprites_init: scope:[sprites_init] from main::@4 *((const byte*) SPRITES_MC) ← (number) 0 *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) - (byte) sprites_init::xpos#0 ← (number) $18+(number) $f*(number) 8 + (byte) sprites_init::xpos#0 ← (byte)(number) $18+(number) $f*(number) 8 (byte) sprites_init::s#0 ← (byte) 0 to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 @@ -88,7 +88,7 @@ sprites_init::@return: scope:[sprites_init] from sprites_init::@1 to:@return @5: scope:[] from @4 (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST - (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(number) $15 + (byte) irq_sprite_ypos ← (byte)(const byte) SPRITES_FIRST_YPOS+(number) $15 (byte*) toSpritePtr1_sprite#0 ← (const byte*) PLAYFIELD_SPRITES to:toSpritePtr1 toSpritePtr1: scope:[] from @5 @@ -107,7 +107,7 @@ toSpritePtr1_@return: scope:[] from toSpritePtr1 (byte~) $0 ← (byte) toSpritePtr1_return#3 (number~) $1 ← (byte~) $0 + (number) 3 (byte) irq_sprite_ptr ← (number~) $1 - (byte) irq_cnt ← (number) 0 + (byte) irq_cnt ← (byte) 0 to:@7 (void()) sprites_irq_init() @@ -217,7 +217,7 @@ sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6 @7: scope:[] from @10 kickasm(location (const byte*) SIN_SPRITE) {{ .fill $40, $ff }} - (byte) sin_idx#0 ← (number) 0 + (byte) sin_idx#0 ← (byte) 0 to:@9 (void()) main() @@ -286,8 +286,8 @@ main::@4: scope:[main] from main::toD0181_@return main::@6: scope:[main] from main::@4 (byte) sin_idx#23 ← phi( main::@4/(byte) sin_idx#24 ) *((const byte*) SPRITES_ENABLE) ← (number) $ff - (byte) main::xpos#0 ← (number) $18 - (byte) main::ypos#0 ← (number) $32 + (byte) main::xpos#0 ← (byte) $18 + (byte) main::ypos#0 ← (byte) $32 (byte) main::s#0 ← (byte) 4 to:main::@1 main::@1: scope:[main] from main::@5 main::@6 @@ -413,16 +413,16 @@ SYMBOL TABLE SSA (label) @9 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D018 = (byte*)(number) $d018 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 -(const byte) IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS+(number) $13 +(const byte) IRQ_RASTER = (byte) 1 +(const byte) IRQ_RASTER_FIRST = (byte)(const byte) SPRITES_FIRST_YPOS+(number) $13 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const byte*) PLAYFIELD_CHARSET = (byte*)(number) $2800 (const byte*) PLAYFIELD_SCREEN_1 = (byte*)(number) $400 @@ -432,8 +432,8 @@ SYMBOL TABLE SSA (const byte*) PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) SPRITE_PTRS (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SIN[(number) $100] = kickasm {{ .var AMPL = 200-21 .for(var i=0; i<256; i++) { @@ -445,11 +445,11 @@ SYMBOL TABLE SSA (const byte*) SPRITES_ENABLE = (byte*)(number) $d015 (const byte*) SPRITES_EXPAND_X = (byte*)(number) $d01d (const byte*) SPRITES_EXPAND_Y = (byte*)(number) $d017 -(const byte) SPRITES_FIRST_YPOS = (number) $31 +(const byte) SPRITES_FIRST_YPOS = (byte) $31 (const byte*) SPRITES_MC = (byte*)(number) $d01c (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*)(number) $d011 (byte) irq_cnt loadstore (byte) irq_raster_next loadstore @@ -677,21 +677,17 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() (byte*) toSpritePtr1_sprite#1 Adding number conversion cast (unumber) $13 in -Adding number conversion cast (unumber) 0 in (byte) render_screen_showing ← (number) 0 Adding number conversion cast (unumber) $f in *((const byte*) SPRITES_ENABLE) ← (number) $f Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_MC) ← (number) 0 -Adding number conversion cast (unumber) $18+$f*8 in (byte) sprites_init::xpos#0 ← (number) $18+(number) $f*(number) 8 Adding number conversion cast (unumber) 2 in (number~) sprites_init::$0 ← (byte) sprites_init::s#2 * (number) 2 Adding number conversion cast (unumber) sprites_init::$0 in (number~) sprites_init::$0 ← (byte) sprites_init::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $18 in (number~) sprites_init::$1 ← (byte) sprites_init::xpos#2 + (number) $18 Adding number conversion cast (unumber) sprites_init::$1 in (number~) sprites_init::$1 ← (byte) sprites_init::xpos#2 + (unumber)(number) $18 -Adding number conversion cast (unumber) SPRITES_FIRST_YPOS+$15 in (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(number) $15 -Adding number conversion cast (unumber) $15 in (byte) irq_sprite_ypos ← ((unumber)) (const byte) SPRITES_FIRST_YPOS+(number) $15 +Adding number conversion cast (unumber) $15 in (byte) irq_sprite_ypos ← (byte)(const byte) SPRITES_FIRST_YPOS+(number) $15 Adding number conversion cast (unumber) $40 in (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (number) $40 Adding number conversion cast (unumber) toSpritePtr1_$1 in (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) $1 ← (byte~) $0 + (number) 3 Adding number conversion cast (unumber) $1 in (number~) $1 ← (byte~) $0 + (unumber)(number) 3 -Adding number conversion cast (unumber) 0 in (byte) irq_cnt ← (number) 0 Adding number conversion cast (unumber) $7f in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (number) $7f Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_YPOS + (number) 0) ← (byte) sprites_irq::ypos#0 Adding number conversion cast (unumber) 2 in *((const byte*) SPRITES_YPOS + (number) 2) ← (byte) sprites_irq::ypos#0 @@ -719,7 +715,6 @@ Adding number conversion cast (unumber) 3 in (byte) irq_sprite_ptr ← (byte) ir Adding number conversion cast (unumber) $14 in (byte) irq_raster_next ← (byte) irq_raster_next + (number) $14 Adding number conversion cast (unumber) $15 in (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (number) $15 Adding number conversion cast (unumber) 3 in (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (number) 3 -Adding number conversion cast (unumber) 0 in (byte) sin_idx#0 ← (number) 0 Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (number) $40 Adding number conversion cast (unumber) main::vicSelectGfxBank1_toDd001_$2 in (number~) main::vicSelectGfxBank1_toDd001_$2 ← (byte~) main::vicSelectGfxBank1_toDd001_$1 / (unumber)(number) $40 @@ -736,8 +731,6 @@ Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (un Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) $ff in *((const byte*) SPRITES_ENABLE) ← (number) $ff -Adding number conversion cast (unumber) $18 in (byte) main::xpos#0 ← (number) $18 -Adding number conversion cast (unumber) $32 in (byte) main::ypos#0 ← (number) $32 Adding number conversion cast (unumber) 2 in (number~) main::$5 ← (byte) main::s#2 * (number) 2 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte) main::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) 3 in (number~) main::$6 ← (byte) main::s#2 - (number) 3 @@ -751,25 +744,18 @@ Adding number conversion cast (unumber) 2 in (number~) loop::$1 ← (byte) loop: Adding number conversion cast (unumber) loop::$1 in (number~) loop::$1 ← (byte) loop::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $a in (byte) loop::idx#1 ← (byte) loop::idx#2 + (number) $a Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) render_screen_showing ← (unumber)(number) 0 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $f Inlining cast *((const byte*) SPRITES_MC) ← (unumber)(number) 0 -Inlining cast (byte) sprites_init::xpos#0 ← (unumber)(number) $18+(number) $f*(number) 8 -Inlining cast (byte) irq_sprite_ypos ← (unumber)(const byte) SPRITES_FIRST_YPOS+(unumber)(number) $15 Inlining cast (word~) toSpritePtr1_$0 ← (word)(byte*) toSpritePtr1_sprite#1 Inlining cast (byte~) toSpritePtr1_$2 ← (byte)(unumber~) toSpritePtr1_$1 -Inlining cast (byte) irq_cnt ← (unumber)(number) 0 Inlining cast (word~) sprites_irq::toSpritePtr2_$0 ← (word)(byte*) sprites_irq::toSpritePtr2_sprite#1 Inlining cast (byte~) sprites_irq::toSpritePtr2_$2 ← (byte)(unumber~) sprites_irq::toSpritePtr2_$1 Inlining cast (byte) irq_cnt ← (unumber)(number) 0 -Inlining cast (byte) sin_idx#0 ← (unumber)(number) 0 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (word~) main::vicSelectGfxBank1_toDd001_$0 ← (word)(byte*) main::vicSelectGfxBank1_toDd001_gfx#1 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff -Inlining cast (byte) main::xpos#0 ← (unumber)(number) $18 -Inlining cast (byte) main::ypos#0 ← (unumber)(number) $32 Inlining cast (word~) main::toSpritePtr2_$0 ← (word)(byte*) main::toSpritePtr2_sprite#1 Inlining cast (byte~) main::toSpritePtr2_$2 ← (byte)(unumber~) main::toSpritePtr2_$1 Successful SSA optimization Pass2InlineCast @@ -797,16 +783,13 @@ Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $13 Simplifying constant pointer cast (byte*) 10240 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $18 -Simplifying constant integer cast (const byte) SPRITES_FIRST_YPOS+(unumber)(number) $15 Simplifying constant integer cast $15 Simplifying constant integer cast $40 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant integer cast $7f Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -832,7 +815,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast $14 Simplifying constant integer cast $15 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast $40 Simplifying constant integer cast 3 @@ -841,8 +823,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $ff -Simplifying constant integer cast $18 -Simplifying constant integer cast $32 Simplifying constant integer cast 2 Simplifying constant integer cast 3 Simplifying constant integer cast $40 @@ -853,7 +833,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -861,7 +840,6 @@ Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -887,7 +865,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $14 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 3 @@ -896,8 +873,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) $18 -Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 @@ -974,9 +949,7 @@ Simple Condition (bool~) main::$8 [166] if((byte) main::s#1!=rangelast(4,7)) got Simple Condition (bool~) loop::$0 [181] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@4 Simple Condition (bool~) loop::$2 [191] if((byte) loop::s#1!=rangelast(4,7)) goto loop::@6 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [6] (byte) sprites_init::xpos#0 ← (unumber)(number) $18+(number) $f*(number) 8 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) sprites_init::xpos#0 = (unumber)$18+$f*8 +Constant (const byte) sprites_init::xpos#0 = (byte)$18+$f*8 Constant (const byte) sprites_init::s#0 = 0 Constant (const byte*) toSpritePtr1_sprite#0 = PLAYFIELD_SPRITES Constant (const byte*) sprites_irq::toSpritePtr2_sprite#0 = PLAYFIELD_SPRITES @@ -1015,7 +988,9 @@ Adding number conversion cast (unumber) 4 in if((byte) sprites_init::s#1!=(numbe Adding number conversion cast (unumber) 8 in if((byte) main::s#1!=(number) 8) goto main::@1 Adding number conversion cast (unumber) 8 in if((byte) loop::s#1!=(number) 8) goto loop::@6 Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast (const byte) SPRITES_FIRST_YPOS+(byte) $13 Simplifying constant integer cast 4 +Simplifying constant integer cast (const byte) SPRITES_FIRST_YPOS+(byte) $15 Simplifying constant integer cast 8 Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification @@ -3197,15 +3172,15 @@ FINAL SYMBOL TABLE (label) @5 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte) IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS+(byte) $13 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PLAYFIELD_CHARSET = (byte*) 10240 @@ -3216,8 +3191,8 @@ FINAL SYMBOL TABLE (const byte*) PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) SPRITE_PTRS (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SIN[(number) $100] = kickasm {{ .var AMPL = 200-21 .for(var i=0; i<256; i++) { @@ -3229,11 +3204,11 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 (const byte*) SPRITES_EXPAND_Y = (byte*) 53271 -(const byte) SPRITES_FIRST_YPOS = (number) $31 +(const byte) SPRITES_FIRST_YPOS = (byte) $31 (const byte*) SPRITES_MC = (byte*) 53276 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*) 53265 (byte) irq_cnt loadstore zp[1]:8 6.0 (byte) irq_raster_next loadstore zp[1]:5 1.0 diff --git a/src/test/ref/complex/tetris/test-sprites.sym b/src/test/ref/complex/tetris/test-sprites.sym index ae9d08d27..df3507ad6 100644 --- a/src/test/ref/complex/tetris/test-sprites.sym +++ b/src/test/ref/complex/tetris/test-sprites.sym @@ -5,15 +5,15 @@ (label) @5 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D018 = (byte*) 53272 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte) IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS+(byte) $13 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PLAYFIELD_CHARSET = (byte*) 10240 @@ -24,8 +24,8 @@ (const byte*) PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) SPRITE_PTRS (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SIN[(number) $100] = kickasm {{ .var AMPL = 200-21 .for(var i=0; i<256; i++) { @@ -37,11 +37,11 @@ (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 (const byte*) SPRITES_EXPAND_Y = (byte*) 53271 -(const byte) SPRITES_FIRST_YPOS = (number) $31 +(const byte) SPRITES_FIRST_YPOS = (byte) $31 (const byte*) SPRITES_MC = (byte*) 53276 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*) 53265 (byte) irq_cnt loadstore zp[1]:8 6.0 (byte) irq_raster_next loadstore zp[1]:5 1.0 diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index 68608cdb2..ff2dbdb07 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -174,7 +174,9 @@ __b1: // Current score in BCD-format sta.z score_bcd sta.z score_bcd+1 + lda #<0>>$10 sta.z score_bcd+2 + lda #>0>>$10 sta.z score_bcd+3 // Original Color Data // The raster line of the next IRQ @@ -1676,16 +1678,6 @@ sprites_irq: { // The playfield. 0 is empty non-zero is color. // The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth, playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0 - // The color #1 to use for the pieces for each level - PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED - // The color #2 to use for the pieces for each level - PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE - // Pointers to the screen address for rendering each playfield line - // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. - .align $80 - screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 - .align $40 - screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // The T-piece .align $40 PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 @@ -1716,6 +1708,16 @@ sprites_irq: { // The initial X/Y for each piece PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4 PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1 + // The color #1 to use for the pieces for each level + PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED + // The color #2 to use for the pieces for each level + PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE + // Pointers to the screen address for rendering each playfield line + // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. + .align $80 + screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 + .align $40 + screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // Pointers to the playfield address for each playfield line playfield_lines: .fill 2*PLAYFIELD_LINES, 0 // Indixes into the playfield for each playfield line diff --git a/src/test/ref/complex/tetris/tetris.cfg b/src/test/ref/complex/tetris/tetris.cfg index 222df3051..91dd9fb1b 100644 --- a/src/test/ref/complex/tetris/tetris.cfg +++ b/src/test/ref/complex/tetris/tetris.cfg @@ -3,7 +3,7 @@ to:@1 @1: scope:[] from @begin [1] (byte) render_screen_showing ← (byte) 0 - [2] (dword) score_bcd#0 ← (byte) 0 + [2] (dword) score_bcd#0 ← (dword) 0 kickasm(location (const byte*) PLAYFIELD_CHARSET) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }} @@ -106,7 +106,7 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [40] (byte) level_bcd#11 ← phi( main::@6/(byte) level_bcd#17 main::@17/(byte) 0 main::@25/(byte) level_bcd#17 ) [40] (byte) level#10 ← phi( main::@6/(byte) level#17 main::@17/(byte) 0 main::@25/(byte) level#17 ) [40] (dword) score_bcd#17 ← phi( main::@6/(dword) score_bcd#13 main::@17/(dword) score_bcd#0 main::@25/(dword) score_bcd#13 ) - [40] (word) lines_bcd#19 ← phi( main::@6/(word) lines_bcd#15 main::@17/(byte) 0 main::@25/(word) lines_bcd#15 ) + [40] (word) lines_bcd#19 ← phi( main::@6/(word) lines_bcd#15 main::@17/(word) 0 main::@25/(word) lines_bcd#15 ) [40] (byte) current_movedown_counter#16 ← phi( main::@6/(byte) current_movedown_counter#14 main::@17/(byte) 0 main::@25/(byte) current_movedown_counter#14 ) [40] (byte) keyboard_events_size#19 ← phi( main::@6/(byte) keyboard_events_size#16 main::@17/(byte) 0 main::@25/(byte) keyboard_events_size#16 ) [40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#2 main::@25/(byte) next_piece_idx#16 ) diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index eb2570195..4191ad199 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -1,6 +1,4 @@ -Resolved forward reference PIECES to (const word*) PIECES Resolved forward reference next_piece_idx to (byte) next_piece_idx -Resolved forward reference PIECES_NEXT_CHARS to (const byte*) PIECES_NEXT_CHARS Resolved forward reference next_piece_idx to (byte) next_piece_idx Resolved forward reference sprites_irq to interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() Resolved forward reference COLLISION_NONE to (const byte) COLLISION_NONE @@ -176,14 +174,14 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri return to:@return @8: scope:[] from @begin - (byte) keyboard_events_size#0 ← (number) 0 - (byte) keyboard_modifiers#0 ← (number) 0 + (byte) keyboard_events_size#0 ← (byte) 0 + (byte) keyboard_modifiers#0 ← (byte) 0 to:@13 (void()) keyboard_event_scan() keyboard_event_scan: scope:[keyboard_event_scan] from main::@35 (byte) keyboard_events_size#53 ← phi( main::@35/(byte) keyboard_events_size#26 ) - (byte) keyboard_event_scan::keycode#0 ← (number) 0 + (byte) keyboard_event_scan::keycode#0 ← (byte) 0 (byte) keyboard_event_scan::row#0 ← (byte) 0 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@10 @@ -445,14 +443,14 @@ sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init (byte) current_piece_char#0 ← (byte) 0 (byte) current_xpos#0 ← (byte) 0 (byte) current_ypos#0 ← (byte) 0 - (byte) render_screen_render#0 ← (number) $20 - (byte) render_screen_show#0 ← (number) 0 - (byte) render_screen_showing ← (number) 0 - (dword) score_bcd#0 ← (number) 0 - (word) lines_bcd#0 ← (number) 0 - (byte) level_bcd#0 ← (number) 0 - (byte) level#0 ← (number) 0 - (byte) game_over#0 ← (number) 0 + (byte) render_screen_render#0 ← (byte) $20 + (byte) render_screen_show#0 ← (byte) 0 + (byte) render_screen_showing ← (byte) 0 + (dword) score_bcd#0 ← (dword) 0 + (word) lines_bcd#0 ← (word) 0 + (byte) level_bcd#0 ← (byte) 0 + (byte) level#0 ← (byte) 0 + (byte) game_over#0 ← (byte) 0 kickasm(location (const byte*) PLAYFIELD_CHARSET) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }} @@ -544,7 +542,7 @@ render_init::@return: scope:[render_init] from render_init::@2 render_show: scope:[render_show] from main::@6 (byte) level#84 ← phi( main::@6/(byte) level#90 ) (byte) render_screen_show#10 ← phi( main::@6/(byte) render_screen_show#18 ) - (byte) render_show::d018val#0 ← (number) 0 + (byte) render_show::d018val#0 ← (byte) 0 (bool~) render_show::$0 ← (byte) render_screen_show#10 == (number) 0 if((bool~) render_show::$0) goto render_show::@1 to:render_show::@3 @@ -781,7 +779,7 @@ render_screen_original::@1: scope:[render_screen_original] from render_screen_o (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(byte*) render_screen_original::oscr#0 render_screen_original::@7/(byte*) render_screen_original::oscr#5 ) (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(byte*) render_screen_original::cols#0 render_screen_original::@7/(byte*) render_screen_original::cols#8 ) (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@7/(byte*) render_screen_original::screen#10 ) - (byte) render_screen_original::x#0 ← (number) 0 + (byte) render_screen_original::x#0 ← (byte) 0 to:render_screen_original::@2 render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2 (byte) render_screen_original::y#5 ← phi( render_screen_original::@1/(byte) render_screen_original::y#6 render_screen_original::@2/(byte) render_screen_original::y#5 ) @@ -847,7 +845,7 @@ render_screen_original::@return: scope:[render_screen_original] from render_scr (void()) render_playfield() render_playfield: scope:[render_playfield] from main::@23 main::@31 (byte) render_screen_render#22 ← phi( main::@23/(byte) render_screen_render#30 main::@31/(byte) render_screen_render#31 ) - (byte) render_playfield::i#0 ← (const byte) PLAYFIELD_COLS*(number) 2 + (byte) render_playfield::i#0 ← (byte)(const byte) PLAYFIELD_COLS*(number) 2 (byte) render_playfield::l#0 ← (byte) 2 to:render_playfield::@1 render_playfield::@1: scope:[render_playfield] from render_playfield render_playfield::@3 @@ -891,7 +889,7 @@ render_moving: scope:[render_moving] from main::@32 main::@39 (byte) current_xpos#59 ← phi( main::@32/(byte) current_xpos#76 main::@39/(byte) current_xpos#77 ) (byte) render_screen_render#33 ← phi( main::@32/(byte) render_screen_render#36 main::@39/(byte) render_screen_render#39 ) (byte) current_ypos#13 ← phi( main::@32/(byte) current_ypos#30 main::@39/(byte) current_ypos#31 ) - (byte) render_moving::i#0 ← (number) 0 + (byte) render_moving::i#0 ← (byte) 0 (byte) render_moving::ypos#0 ← (byte) current_ypos#13 (byte) render_moving::l#0 ← (byte) 0 to:render_moving::@1 @@ -1114,7 +1112,7 @@ sprites_init: scope:[sprites_init] from main::@26 *((const byte*) SPRITES_MC) ← (number) 0 *((const byte*) SPRITES_EXPAND_Y) ← *((const byte*) SPRITES_MC) *((const byte*) SPRITES_EXPAND_X) ← *((const byte*) SPRITES_EXPAND_Y) - (byte) sprites_init::xpos#0 ← (number) $18+(number) $f*(number) 8 + (byte) sprites_init::xpos#0 ← (byte)(number) $18+(number) $f*(number) 8 (byte) sprites_init::s#0 ← (byte) 0 to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 @@ -1148,7 +1146,7 @@ sprites_init::@return: scope:[sprites_init] from sprites_init::@1 (byte) render_screen_render#57 ← phi( @22/(byte) render_screen_render#60 ) (byte) render_screen_show#52 ← phi( @22/(byte) render_screen_show#55 ) (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST - (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(number) $15 + (byte) irq_sprite_ypos ← (byte)(const byte) SPRITES_FIRST_YPOS+(number) $15 (byte*) toSpritePtr1_sprite#0 ← (const byte*) PLAYFIELD_SPRITES to:toSpritePtr1 toSpritePtr1: scope:[] from @23 @@ -1206,7 +1204,7 @@ toSpritePtr1_@return: scope:[] from toSpritePtr1 (byte~) $0 ← (byte) toSpritePtr1_return#3 (number~) $1 ← (byte~) $0 + (number) 3 (byte) irq_sprite_ptr ← (number~) $1 - (byte) irq_cnt ← (number) 0 + (byte) irq_cnt ← (byte) 0 to:@25 (void()) sprites_irq_init() @@ -1327,17 +1325,17 @@ sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6 (byte) current_piece_char#51 ← phi( @38/(byte) current_piece_char#53 ) (byte) render_screen_render#40 ← phi( @38/(byte) render_screen_render#43 ) (byte) render_screen_show#32 ← phi( @38/(byte) render_screen_show#35 ) - (byte) next_piece_idx#0 ← (number) 0 + (byte) next_piece_idx#0 ← (byte) 0 (byte*) current_piece#0 ← (byte*)(number) 0 - (byte) current_orientation#0 ← (number) 0 - (byte) current_movedown_slow#0 ← (number) $30 - (byte) current_movedown_counter#0 ← (number) 0 + (byte) current_orientation#0 ← (byte) 0 + (byte) current_movedown_slow#0 ← (byte) $30 + (byte) current_movedown_counter#0 ← (byte) 0 to:@37 (void()) play_init() play_init: scope:[play_init] from main::@28 (byte) level#44 ← phi( main::@28/(byte) level#59 ) - (byte) play_init::idx#0 ← (number) 0 + (byte) play_init::idx#0 ← (byte) 0 (byte*) play_init::pli#0 ← (const byte*) playfield (byte) play_init::j#0 ← (byte) 0 to:play_init::@1 @@ -1393,7 +1391,7 @@ play_movement: scope:[play_movement] from main::@11 (byte) current_ypos#32 ← phi( main::@11/(byte) current_ypos#47 ) (byte) current_movedown_counter#18 ← phi( main::@11/(byte) current_movedown_counter#24 ) (byte) play_movement::key_event#1 ← phi( main::@11/(byte) play_movement::key_event#0 ) - (byte) play_movement::render#0 ← (number) 0 + (byte) play_movement::render#0 ← (byte) 0 (byte) play_move_down::key_event#0 ← (byte) play_movement::key_event#1 call play_move_down (byte) play_move_down::return#0 ← (byte) play_move_down::return#3 @@ -1575,7 +1573,7 @@ play_move_down: scope:[play_move_down] from play_movement (byte) play_move_down::key_event#1 ← phi( play_movement/(byte) play_move_down::key_event#0 ) (byte) current_movedown_counter#11 ← phi( play_movement/(byte) current_movedown_counter#18 ) (byte) current_movedown_counter#3 ← ++ (byte) current_movedown_counter#11 - (byte) play_move_down::movedown#0 ← (number) 0 + (byte) play_move_down::movedown#0 ← (byte) 0 (bool~) play_move_down::$0 ← (byte) play_move_down::key_event#1 == (const byte) KEY_SPACE (bool~) play_move_down::$1 ← ! (bool~) play_move_down::$0 if((bool~) play_move_down::$1) goto play_move_down::@1 @@ -2047,7 +2045,7 @@ play_move_rotate: scope:[play_move_rotate] from play_movement::@6 (byte) current_xpos#65 ← phi( play_movement::@6/(byte) current_xpos#2 ) (byte) current_orientation#41 ← phi( play_movement::@6/(byte) current_orientation#33 ) (byte) play_move_rotate::key_event#1 ← phi( play_movement::@6/(byte) play_move_rotate::key_event#0 ) - (byte) play_move_rotate::orientation#0 ← (number) $80 + (byte) play_move_rotate::orientation#0 ← (byte) $80 (bool~) play_move_rotate::$0 ← (byte) play_move_rotate::key_event#1 == (const byte) KEY_Z if((bool~) play_move_rotate::$0) goto play_move_rotate::@1 to:play_move_rotate::@6 @@ -2141,7 +2139,7 @@ play_collision: scope:[play_collision] from play_move_down::@9 play_move_leftri (byte*) current_piece#17 ← phi( play_move_down::@9/(byte*) current_piece#31 play_move_leftright::@1/(byte*) current_piece#32 play_move_leftright::@5/(byte*) current_piece#33 play_move_rotate::@4/(byte*) current_piece#34 play_spawn_current/(byte*) current_piece#5 ) (byte*~) play_collision::$0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 (byte*) play_collision::piece_gfx#0 ← (byte*~) play_collision::$0 - (byte) play_collision::i#0 ← (number) 0 + (byte) play_collision::i#0 ← (byte) 0 (byte) play_collision::yp#0 ← (byte) play_collision::ypos#5 (byte) play_collision::l#0 ← (byte) 0 to:play_collision::@1 @@ -2275,7 +2273,7 @@ play_lock_current: scope:[play_lock_current] from play_move_down::@10 (byte*) current_piece_gfx#54 ← phi( play_move_down::@10/(byte*) current_piece_gfx#73 ) (byte) current_xpos#52 ← phi( play_move_down::@10/(byte) current_xpos#67 ) (byte) current_ypos#23 ← phi( play_move_down::@10/(byte) current_ypos#44 ) - (byte) play_lock_current::i#0 ← (number) 0 + (byte) play_lock_current::i#0 ← (byte) 0 (byte) play_lock_current::yp#0 ← (byte) current_ypos#23 (byte) play_lock_current::l#0 ← (byte) 0 to:play_lock_current::@1 @@ -2390,7 +2388,7 @@ play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@10 (byte) current_orientation#68 ← phi( play_spawn_current::@10/(byte) current_orientation#77 play_spawn_current::@2/(byte) current_orientation#78 ) (byte) current_piece_char#61 ← phi( play_spawn_current::@10/(byte) current_piece_char#76 play_spawn_current::@2/(byte) current_piece_char#77 ) (byte*) current_piece#61 ← phi( play_spawn_current::@10/(byte*) current_piece#72 play_spawn_current::@2/(byte*) current_piece#73 ) - (byte) play_spawn_current::piece_idx#0 ← (number) 7 + (byte) play_spawn_current::piece_idx#0 ← (byte) 7 to:play_spawn_current::@3 play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@10 (byte) current_ypos#80 ← phi( play_spawn_current::@10/(byte) current_ypos#79 ) @@ -2480,9 +2478,9 @@ play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current (byte()) play_remove_lines() play_remove_lines: scope:[play_remove_lines] from play_move_down::@19 - (byte) play_remove_lines::r#0 ← (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 - (byte) play_remove_lines::w#0 ← (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 - (byte) play_remove_lines::removed#0 ← (number) 0 + (byte) play_remove_lines::r#0 ← (byte)(const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 + (byte) play_remove_lines::w#0 ← (byte)(const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 + (byte) play_remove_lines::removed#0 ← (byte) 0 (byte) play_remove_lines::y#0 ← (byte) 0 to:play_remove_lines::@1 play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@7 @@ -2490,7 +2488,7 @@ play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_re (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) play_remove_lines::y#0 play_remove_lines::@7/(byte) play_remove_lines::y#1 ) (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(byte) play_remove_lines::w#0 play_remove_lines::@7/(byte) play_remove_lines::w#11 ) (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(byte) play_remove_lines::r#0 play_remove_lines::@7/(byte) play_remove_lines::r#5 ) - (byte) play_remove_lines::full#0 ← (number) 1 + (byte) play_remove_lines::full#0 ← (byte) 1 (byte) play_remove_lines::x#0 ← (byte) 0 to:play_remove_lines::@2 play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3 @@ -3097,7 +3095,7 @@ main::@37: scope:[main] from main::@36 (byte~) main::$13 ← (byte) keyboard_event_get::return#5 (byte) keyboard_events_size#7 ← (byte) keyboard_events_size#18 (byte) main::key_event#0 ← (byte~) main::$13 - (byte) main::render#0 ← (number) 0 + (byte) main::render#0 ← (byte) 0 (bool~) main::$14 ← (byte) game_over#19 == (number) 0 if((bool~) main::$14) goto main::@11 to:main::@12 @@ -3474,68 +3472,68 @@ SYMBOL TABLE SSA (const byte*) BGCOL2 = (byte*)(number) $d022 (const byte*) BGCOL3 = (byte*)(number) $d023 (const byte*) BGCOL4 = (byte*)(number) $d024 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d (const byte*) CIA1_PORT_A = (byte*)(number) $dc00 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f -(const byte) COLLISION_BOTTOM = (number) 2 -(const byte) COLLISION_LEFT = (number) 4 -(const byte) COLLISION_NONE = (number) 0 -(const byte) COLLISION_PLAYFIELD = (number) 1 -(const byte) COLLISION_RIGHT = (number) 8 +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const byte) COLLISION_BOTTOM = (byte) 2 +(const byte) COLLISION_LEFT = (byte) 4 +(const byte) COLLISION_NONE = (byte) 0 +(const byte) COLLISION_PLAYFIELD = (byte) 1 +(const byte) COLLISION_RIGHT = (byte) 8 (const byte*) COLS = (byte*)(number) $d800 -(const byte) CYAN = (number) 3 +(const byte) CYAN = (byte) 3 (const byte*) D011 = (byte*)(number) $d011 (const byte*) D018 = (byte*)(number) $d018 -(const byte) DARK_GREY = (number) $b -(const byte) GREEN = (number) 5 -(const byte) GREY = (number) $c +(const byte) DARK_GREY = (byte) $b +(const byte) GREEN = (byte) 5 +(const byte) GREY = (byte) $c (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 -(const byte) IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS+(number) $13 +(const byte) IRQ_RASTER = (byte) 1 +(const byte) IRQ_RASTER_FIRST = (byte)(const byte) SPRITES_FIRST_YPOS+(number) $13 (const byte*) IRQ_STATUS = (byte*)(number) $d019 -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_COMMODORE = (number) $3d -(const byte) KEY_CTRL = (number) $3a -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_MODIFIER_COMMODORE = (number) 8 -(const byte) KEY_MODIFIER_CTRL = (number) 4 -(const byte) KEY_MODIFIER_LSHIFT = (number) 1 -(const byte) KEY_MODIFIER_RSHIFT = (number) 2 -(const byte) KEY_RSHIFT = (number) $34 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_X = (number) $17 -(const byte) KEY_Z = (number) $c -(const byte) LIGHT_BLUE = (number) $e -(const byte) LIGHT_GREEN = (number) $d -(const byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte)(number) $30, (byte)(number) $2b, (byte)(number) $26, (byte)(number) $21, (byte)(number) $1c, (byte)(number) $17, (byte)(number) $12, (byte)(number) $d, (byte)(number) 8, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 4, (byte)(number) 4, (byte)(number) 4, (byte)(number) 3, (byte)(number) 3, (byte)(number) 3, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 1 } -(const byte) ORANGE = (number) 8 +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_COMMODORE = (byte) $3d +(const byte) KEY_CTRL = (byte) $3a +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_MODIFIER_COMMODORE = (byte) 8 +(const byte) KEY_MODIFIER_CTRL = (byte) 4 +(const byte) KEY_MODIFIER_LSHIFT = (byte) 1 +(const byte) KEY_MODIFIER_RSHIFT = (byte) 2 +(const byte) KEY_RSHIFT = (byte) $34 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Z = (byte) $c +(const byte) LIGHT_BLUE = (byte) $e +(const byte) LIGHT_GREEN = (byte) $d +(const byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } +(const byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } -(const byte*) PIECES_CHARS[] = { (byte)(number) $65, (byte)(number) $66, (byte)(number) $a6, (byte)(number) $66, (byte)(number) $65, (byte)(number) $65, (byte)(number) $a6 } +(const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } (const byte*) PIECES_COLORS_1[] = { (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED, (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED, (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED } (const byte*) PIECES_COLORS_2[] = { (const byte) CYAN, (const byte) LIGHT_GREEN, (const byte) PINK, (const byte) LIGHT_GREEN, (const byte) LIGHT_GREEN, (const byte) LIGHT_BLUE, (const byte) DARK_GREY, (const byte) PURPLE, (const byte) RED, (const byte) ORANGE, (const byte) CYAN, (const byte) LIGHT_GREEN, (const byte) PINK, (const byte) LIGHT_GREEN, (const byte) LIGHT_GREEN, (const byte) LIGHT_BLUE, (const byte) DARK_GREY, (const byte) PURPLE, (const byte) RED, (const byte) ORANGE, (const byte) CYAN, (const byte) LIGHT_GREEN, (const byte) PINK, (const byte) LIGHT_GREEN, (const byte) LIGHT_GREEN, (const byte) LIGHT_BLUE, (const byte) DARK_GREY, (const byte) PURPLE, (const byte) RED, (const byte) ORANGE } -(const byte*) PIECES_NEXT_CHARS[] = { (byte)(number) $63, (byte)(number) $64, (byte)(number) $a4, (byte)(number) $64, (byte)(number) $63, (byte)(number) $63, (byte)(number) $a4 } -(const byte*) PIECES_START_X[] = { (byte)(number) 4, (byte)(number) 4, (byte)(number) 4, (byte)(number) 4, (byte)(number) 4, (byte)(number) 4, (byte)(number) 4 } -(const byte*) PIECES_START_Y[] = { (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1 } -(const byte*) PIECE_I[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0 } -(const byte*) PIECE_J[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) PIECE_L[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) PIECE_O[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) PIECE_S[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) PIECE_T[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) PIECE_Z[(number) 4*(number) 4*(number) 4] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte) PINK = (number) $a +(const byte*) PIECES_NEXT_CHARS[] = { (byte) $63, (byte) $64, (byte) $a4, (byte) $64, (byte) $63, (byte) $63, (byte) $a4 } +(const byte*) PIECES_START_X[] = { (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4 } +(const byte*) PIECES_START_Y[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1 } +(const byte*) PIECE_I[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0 } +(const byte*) PIECE_J[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_L[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_O[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_S[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_T[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_Z[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte) PINK = (byte) $a (const byte*) PLAYFIELD_CHARSET = (byte*)(number) $2800 (const byte*) PLAYFIELD_COLORS_ORIGINAL = (byte*)(number) $1c00 -(const byte) PLAYFIELD_COLS = (number) $a -(const byte) PLAYFIELD_LINES = (number) $16 +(const byte) PLAYFIELD_COLS = (byte) $a +(const byte) PLAYFIELD_LINES = (byte) $16 (const byte*) PLAYFIELD_SCREEN_1 = (byte*)(number) $400 (const byte*) PLAYFIELD_SCREEN_2 = (byte*)(number) $2c00 (const byte*) PLAYFIELD_SCREEN_ORIGINAL = (byte*)(number) $1800 @@ -3544,13 +3542,13 @@ SYMBOL TABLE SSA (const byte*) PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) SPRITE_PTRS (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 -(const byte) PURPLE = (number) 4 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 +(const byte) PURPLE = (byte) 4 (const byte*) RASTER = (byte*)(number) $d012 -(const byte) RED = (number) 2 -(const dword*) SCORE_BASE_BCD[] = { (dword)(number) 0, (dword)(number) $40, (dword)(number) $100, (dword)(number) $300, (dword)(number) $1200 } -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) RED = (byte) 2 +(const dword*) SCORE_BASE_BCD[] = { (dword) 0, (dword) $40, (dword) $100, (dword) $300, (dword) $1200 } +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 (const word*) SID_VOICE3_FREQ = (word*)(number) $d40e (const byte*) SID_VOICE3_OSC = (byte*)(number) $d41b @@ -3561,15 +3559,15 @@ SYMBOL TABLE SSA (const byte*) SPRITES_ENABLE = (byte*)(number) $d015 (const byte*) SPRITES_EXPAND_X = (byte*)(number) $d01d (const byte*) SPRITES_EXPAND_Y = (byte*)(number) $d017 -(const byte) SPRITES_FIRST_YPOS = (number) $31 +(const byte) SPRITES_FIRST_YPOS = (byte) $31 (const byte*) SPRITES_MC = (byte*)(number) $d01c (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_RSEL = (byte) 8 (byte) current_movedown_counter (byte) current_movedown_counter#0 (byte) current_movedown_counter#1 @@ -3629,7 +3627,7 @@ SYMBOL TABLE SSA (byte) current_movedown_counter#7 (byte) current_movedown_counter#8 (byte) current_movedown_counter#9 -(const byte) current_movedown_fast = (number) $a +(const byte) current_movedown_fast = (byte) $a (byte) current_movedown_slow (byte) current_movedown_slow#0 (byte) current_movedown_slow#1 @@ -4653,7 +4651,7 @@ SYMBOL TABLE SSA (byte) keyboard_events_size#77 (byte) keyboard_events_size#8 (byte) keyboard_events_size#9 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -4668,7 +4666,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (byte) keyboard_modifiers (byte) keyboard_modifiers#0 (byte) keyboard_modifiers#1 @@ -5712,7 +5710,7 @@ SYMBOL TABLE SSA (label) render_bcd::@1 (label) render_bcd::@2 (label) render_bcd::@return -(const byte) render_bcd::ZERO_CHAR = (number) $35 +(const byte) render_bcd::ZERO_CHAR = (byte) $35 (byte) render_bcd::bcd (byte) render_bcd::bcd#0 (byte) render_bcd::bcd#1 @@ -6402,9 +6400,6 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() Adding number conversion cast (unumber) $13 in Adding number conversion cast (unumber) 1 in -Adding number conversion cast (unumber) 0 in (byte) keyboard_events_size#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_modifiers#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::keycode#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (number) 8 Adding number conversion cast (unumber) keyboard_event_scan::$14 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (number) 0 @@ -6423,14 +6418,6 @@ Adding number conversion cast (unumber) keyboard_event_pressed::$1 in (number~) Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_get::$0 ← (byte) keyboard_events_size#14 == (number) 0 Adding number conversion cast (unumber) $ff in (byte) keyboard_event_get::return#0 ← (number) $ff Adding number conversion cast (unumber) $ffff in *((const word*) SID_VOICE3_FREQ) ← (number) $ffff -Adding number conversion cast (unumber) $20 in (byte) render_screen_render#0 ← (number) $20 -Adding number conversion cast (unumber) 0 in (byte) render_screen_show#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) render_screen_showing ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) score_bcd#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) lines_bcd#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) level_bcd#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) level#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) game_over#0 ← (number) 0 Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) render_init::vicSelectGfxBank1_toDd001_$2 ← (byte~) render_init::vicSelectGfxBank1_toDd001_$1 / (number) $40 Adding number conversion cast (unumber) render_init::vicSelectGfxBank1_toDd001_$2 in (number~) render_init::vicSelectGfxBank1_toDd001_$2 ← (byte~) render_init::vicSelectGfxBank1_toDd001_$1 / (unumber)(number) $40 @@ -6449,7 +6436,6 @@ Adding number conversion cast (unumber) $28 in (byte*) render_init::li_2#1 ← ( Adding number conversion cast (unumber) 1 in (byte) render_init::i#1 ← (byte) render_init::i#2 + rangenext(0,PLAYFIELD_LINES-1) Adding number conversion cast (unumber) 0 in (byte) render_screen_show#1 ← (number) 0 Adding number conversion cast (unumber) $20 in (byte) render_screen_render#1 ← (number) $20 -Adding number conversion cast (unumber) 0 in (byte) render_show::d018val#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) render_show::$0 ← (byte) render_screen_show#10 == (number) 0 Adding number conversion cast (unumber) $3fff in (number~) render_show::toD0181_$1 ← (word~) render_show::toD0181_$0 & (number) $3fff Adding number conversion cast (unumber) render_show::toD0181_$1 in (number~) render_show::toD0181_$1 ← (word~) render_show::toD0181_$0 & (unumber)(number) $3fff @@ -6496,15 +6482,12 @@ Adding number conversion cast (unumber) render_bcd::$4 in (number~) render_bcd:: Adding number conversion cast (unumber) 4 in (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#7 >> (number) 4 Adding number conversion cast (unumber) $20*2 in (byte*) render_screen_original::oscr#0 ← (const byte*) PLAYFIELD_SCREEN_ORIGINAL+(number) $20*(number) 2 Adding number conversion cast (unumber) $20*2 in (byte*) render_screen_original::ocols#0 ← (const byte*) PLAYFIELD_COLORS_ORIGINAL+(number) $20*(number) 2 -Adding number conversion cast (unumber) 0 in (byte) render_screen_original::x#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (bool~) render_screen_original::$0 ← (byte) render_screen_original::x#1 != (number) 4 Adding number conversion cast (unumber) $24 in (bool~) render_screen_original::$1 ← (byte) render_screen_original::x#2 != (number) $24 Adding number conversion cast (unumber) $28 in (bool~) render_screen_original::$2 ← (byte) render_screen_original::x#3 != (number) $28 -Adding number conversion cast (unumber) PLAYFIELD_COLS*2 in (byte) render_playfield::i#0 ← (const byte) PLAYFIELD_COLS*(number) 2 -Adding number conversion cast (unumber) 2 in (byte) render_playfield::i#0 ← ((unumber)) (const byte) PLAYFIELD_COLS*(number) 2 +Adding number conversion cast (unumber) 2 in (byte) render_playfield::i#0 ← (byte)(const byte) PLAYFIELD_COLS*(number) 2 Adding number conversion cast (unumber) 1 in (byte) render_playfield::c#1 ← (byte) render_playfield::c#2 + rangenext(0,PLAYFIELD_COLS-1) Adding number conversion cast (unumber) 1 in (byte) render_playfield::l#1 ← (byte) render_playfield::l#3 + rangenext(2,PLAYFIELD_LINES-1) -Adding number conversion cast (unumber) 0 in (byte) render_moving::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (bool~) render_moving::$0 ← (byte) render_moving::ypos#2 > (number) 1 Adding number conversion cast (unumber) 4 in (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (number) 4 Adding number conversion cast (unumber) 0 in (bool~) render_moving::$2 ← (byte) render_moving::current_cell#0 != (number) 0 @@ -6514,18 +6497,15 @@ Adding number conversion cast (unumber) 0 in *((byte*) render_next::screen_next_ Adding number conversion cast (unumber) $24 in (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#8 + (number) $24 Adding number conversion cast (unumber) $f in *((const byte*) SPRITES_ENABLE) ← (number) $f Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_MC) ← (number) 0 -Adding number conversion cast (unumber) $18+$f*8 in (byte) sprites_init::xpos#0 ← (number) $18+(number) $f*(number) 8 Adding number conversion cast (unumber) 2 in (number~) sprites_init::$0 ← (byte) sprites_init::s#2 * (number) 2 Adding number conversion cast (unumber) sprites_init::$0 in (number~) sprites_init::$0 ← (byte) sprites_init::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $18 in (number~) sprites_init::$1 ← (byte) sprites_init::xpos#2 + (number) $18 Adding number conversion cast (unumber) sprites_init::$1 in (number~) sprites_init::$1 ← (byte) sprites_init::xpos#2 + (unumber)(number) $18 -Adding number conversion cast (unumber) SPRITES_FIRST_YPOS+$15 in (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(number) $15 -Adding number conversion cast (unumber) $15 in (byte) irq_sprite_ypos ← ((unumber)) (const byte) SPRITES_FIRST_YPOS+(number) $15 +Adding number conversion cast (unumber) $15 in (byte) irq_sprite_ypos ← (byte)(const byte) SPRITES_FIRST_YPOS+(number) $15 Adding number conversion cast (unumber) $40 in (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (number) $40 Adding number conversion cast (unumber) toSpritePtr1_$1 in (number~) toSpritePtr1_$1 ← (word~) toSpritePtr1_$0 / (unumber)(number) $40 Adding number conversion cast (unumber) 3 in (number~) $1 ← (byte~) $0 + (number) 3 Adding number conversion cast (unumber) $1 in (number~) $1 ← (byte~) $0 + (unumber)(number) 3 -Adding number conversion cast (unumber) 0 in (byte) irq_cnt ← (number) 0 Adding number conversion cast (unumber) $7f in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (number) $7f Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_YPOS + (number) 0) ← (byte) sprites_irq::ypos#0 Adding number conversion cast (unumber) 2 in *((const byte*) SPRITES_YPOS + (number) 2) ← (byte) sprites_irq::ypos#0 @@ -6553,15 +6533,8 @@ Adding number conversion cast (unumber) 3 in (byte) irq_sprite_ptr ← (byte) ir Adding number conversion cast (unumber) $14 in (byte) irq_raster_next ← (byte) irq_raster_next + (number) $14 Adding number conversion cast (unumber) $15 in (byte) irq_sprite_ypos ← (byte) irq_sprite_ypos + (number) $15 Adding number conversion cast (unumber) 3 in (byte) irq_sprite_ptr ← (byte) irq_sprite_ptr + (number) 3 -Adding number conversion cast (unumber) 0 in (byte) next_piece_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) current_orientation#0 ← (number) 0 -Adding number conversion cast (unumber) $30 in (byte) current_movedown_slow#0 ← (number) $30 -Adding number conversion cast (unumber) 0 in (byte) current_movedown_counter#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_init::idx#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) play_init::j#1 ← (byte) play_init::j#2 + rangenext(0,PLAYFIELD_LINES-1) -Adding number conversion cast (unumber) 0 in (byte) play_movement::render#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_movement::$1 ← (byte) game_over#1 != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_move_down::movedown#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_move_down::$3 ← (byte~) play_move_down::$2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_move_down::$7 ← (byte) play_move_down::movedown#6 != (number) 0 Adding number conversion cast (unumber) 0 in (byte) play_move_down::return#1 ← (number) 0 @@ -6576,7 +6549,6 @@ Adding number conversion cast (unumber) play_move_leftright::$3 in (number~) pla Adding number conversion cast (unumber) 1 in (byte) play_move_leftright::return#1 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) play_move_leftright::return#3 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) play_move_leftright::return#4 ← (number) 1 -Adding number conversion cast (unumber) $80 in (byte) play_move_rotate::orientation#0 ← (number) $80 Adding number conversion cast (unumber) $10 in (number~) play_move_rotate::$7 ← (byte) current_orientation#23 - (number) $10 Adding number conversion cast (unumber) play_move_rotate::$7 in (number~) play_move_rotate::$7 ← (byte) current_orientation#23 - (unumber)(number) $10 Adding number conversion cast (unumber) $3f in (number~) play_move_rotate::$8 ← (unumber~) play_move_rotate::$7 & (number) $3f @@ -6588,26 +6560,19 @@ Adding number conversion cast (unumber) play_move_rotate::$6 in (number~) play_m Adding number conversion cast (unumber) 0 in (byte) play_move_rotate::return#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) play_move_rotate::return#3 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) play_move_rotate::return#4 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) play_collision::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_collision::$1 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) != (number) 0 Adding number conversion cast (unumber) $80 in (number~) play_collision::$5 ← (byte) play_collision::xp#3 & (number) $80 Adding number conversion cast (unumber) play_collision::$5 in (number~) play_collision::$5 ← (byte) play_collision::xp#3 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) play_collision::$6 ← (unumber~) play_collision::$5 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_collision::$10 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::xp#5) != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_lock_current::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_lock_current::$0 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) != (number) 0 Adding number conversion cast (unumber) 0 in (byte) current_orientation#8 ← (number) 0 -Adding number conversion cast (unumber) 7 in (byte) play_spawn_current::piece_idx#0 ← (number) 7 Adding number conversion cast (unumber) 1 in (byte) game_over#5 ← (number) 1 Adding number conversion cast (unumber) 7 in (bool~) play_spawn_current::$4 ← (byte) play_spawn_current::piece_idx#2 == (number) 7 Adding number conversion cast (unumber) 7 in (number~) play_spawn_current::$6 ← (byte~) play_spawn_current::$5 & (number) 7 Adding number conversion cast (unumber) play_spawn_current::$6 in (number~) play_spawn_current::$6 ← (byte~) play_spawn_current::$5 & (unumber)(number) 7 -Adding number conversion cast (unumber) PLAYFIELD_LINES*PLAYFIELD_COLS-1 in (byte) play_remove_lines::r#0 ← (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 -Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::r#0 ← ((unumber)) (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 -Adding number conversion cast (unumber) PLAYFIELD_LINES*PLAYFIELD_COLS-1 in (byte) play_remove_lines::w#0 ← (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 -Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::w#0 ← ((unumber)) (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 -Adding number conversion cast (unumber) 0 in (byte) play_remove_lines::removed#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::full#0 ← (number) 1 +Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::r#0 ← (byte)(const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 +Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::w#0 ← (byte)(const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(number) 1 Adding number conversion cast (unumber) 0 in (bool~) play_remove_lines::$0 ← (byte) play_remove_lines::c#0 == (number) 0 Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::x#1 ← (byte) play_remove_lines::x#2 + rangenext(0,PLAYFIELD_COLS-1) Adding number conversion cast (unumber) 0 in (byte) play_remove_lines::full#1 ← (number) 0 @@ -6627,30 +6592,17 @@ Adding number conversion cast (unumber) play_increase_level::$1 in (number~) pla Adding number conversion cast (unumber) $a in (bool~) play_increase_level::$2 ← (unumber~) play_increase_level::$1 == (number) $a Adding number conversion cast (unumber) 6 in (byte) level_bcd#8 ← (byte) level_bcd#21 + (number) 6 Adding number conversion cast (unumber) $ff in (bool~) main::$10 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) main::render#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← (byte) game_over#19 == (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$17 ← (byte) main::render#2 != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) keyboard_events_size#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_modifiers#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_event_scan::keycode#0 ← (unumber)(number) 0 Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff Inlining cast *((const word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff -Inlining cast (byte) render_screen_render#0 ← (unumber)(number) $20 -Inlining cast (byte) render_screen_show#0 ← (unumber)(number) 0 -Inlining cast (byte) render_screen_showing ← (unumber)(number) 0 -Inlining cast (dword) score_bcd#0 ← (unumber)(number) 0 -Inlining cast (word) lines_bcd#0 ← (unumber)(number) 0 -Inlining cast (byte) level_bcd#0 ← (unumber)(number) 0 -Inlining cast (byte) level#0 ← (unumber)(number) 0 -Inlining cast (byte) game_over#0 ← (unumber)(number) 0 Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast (word~) render_init::vicSelectGfxBank1_toDd001_$0 ← (word)(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#1 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_ECM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (byte) render_screen_show#1 ← (unumber)(number) 0 Inlining cast (byte) render_screen_render#1 ← (unumber)(number) $20 -Inlining cast (byte) render_show::d018val#0 ← (unumber)(number) 0 Inlining cast (word~) render_show::toD0181_$0 ← (word)(byte*) render_show::toD0181_screen#1 Inlining cast (word~) render_show::toD0181_$4 ← (word)(byte*) render_show::toD0181_gfx#1 Inlining cast (word~) render_show::toD0182_$0 ← (word)(byte*) render_show::toD0182_screen#1 @@ -6661,52 +6613,30 @@ Inlining cast (byte) render_bcd::only_low#2 ← (unumber)(number) 0 Inlining cast (byte) render_bcd::only_low#3 ← (unumber)(number) 1 Inlining cast (byte) render_bcd::only_low#4 ← (unumber)(number) 0 Inlining cast (byte) render_bcd::only_low#5 ← (unumber)(number) 0 -Inlining cast (byte) render_screen_original::x#0 ← (unumber)(number) 0 -Inlining cast (byte) render_playfield::i#0 ← (unumber)(const byte) PLAYFIELD_COLS*(unumber)(number) 2 -Inlining cast (byte) render_moving::i#0 ← (unumber)(number) 0 Inlining cast (byte*) render_next::next_piece_gfx#0 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) Inlining cast *((byte*) render_next::screen_next_area#6) ← (unumber)(number) 0 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $f Inlining cast *((const byte*) SPRITES_MC) ← (unumber)(number) 0 -Inlining cast (byte) sprites_init::xpos#0 ← (unumber)(number) $18+(number) $f*(number) 8 -Inlining cast (byte) irq_sprite_ypos ← (unumber)(const byte) SPRITES_FIRST_YPOS+(unumber)(number) $15 Inlining cast (word~) toSpritePtr1_$0 ← (word)(byte*) toSpritePtr1_sprite#1 Inlining cast (byte~) toSpritePtr1_$2 ← (byte)(unumber~) toSpritePtr1_$1 -Inlining cast (byte) irq_cnt ← (unumber)(number) 0 Inlining cast (word~) sprites_irq::toSpritePtr2_$0 ← (word)(byte*) sprites_irq::toSpritePtr2_sprite#1 Inlining cast (byte~) sprites_irq::toSpritePtr2_$2 ← (byte)(unumber~) sprites_irq::toSpritePtr2_$1 Inlining cast (byte) irq_cnt ← (unumber)(number) 0 -Inlining cast (byte) next_piece_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) current_orientation#0 ← (unumber)(number) 0 -Inlining cast (byte) current_movedown_slow#0 ← (unumber)(number) $30 -Inlining cast (byte) current_movedown_counter#0 ← (unumber)(number) 0 -Inlining cast (byte) play_init::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) play_movement::render#0 ← (unumber)(number) 0 -Inlining cast (byte) play_move_down::movedown#0 ← (unumber)(number) 0 Inlining cast (byte) play_move_down::return#1 ← (unumber)(number) 0 Inlining cast (byte) current_movedown_counter#4 ← (unumber)(number) 0 Inlining cast (byte) play_move_down::return#2 ← (unumber)(number) 1 Inlining cast (byte) play_move_leftright::return#1 ← (unumber)(number) 1 Inlining cast (byte) play_move_leftright::return#3 ← (unumber)(number) 0 Inlining cast (byte) play_move_leftright::return#4 ← (unumber)(number) 1 -Inlining cast (byte) play_move_rotate::orientation#0 ← (unumber)(number) $80 Inlining cast (byte) play_move_rotate::return#1 ← (unumber)(number) 0 Inlining cast (byte) play_move_rotate::return#3 ← (unumber)(number) 0 Inlining cast (byte) play_move_rotate::return#4 ← (unumber)(number) 1 -Inlining cast (byte) play_collision::i#0 ← (unumber)(number) 0 -Inlining cast (byte) play_lock_current::i#0 ← (unumber)(number) 0 Inlining cast (byte*) current_piece#5 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) Inlining cast (byte) current_orientation#8 ← (unumber)(number) 0 -Inlining cast (byte) play_spawn_current::piece_idx#0 ← (unumber)(number) 7 Inlining cast (byte) game_over#5 ← (unumber)(number) 1 -Inlining cast (byte) play_remove_lines::r#0 ← (unumber)(const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(unumber)(number) 1 -Inlining cast (byte) play_remove_lines::w#0 ← (unumber)(const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(unumber)(number) 1 -Inlining cast (byte) play_remove_lines::removed#0 ← (unumber)(number) 0 -Inlining cast (byte) play_remove_lines::full#0 ← (unumber)(number) 1 Inlining cast (byte) play_remove_lines::full#1 ← (unumber)(number) 0 Inlining cast *((const byte*) playfield + (byte) play_remove_lines::w#7) ← (unumber)(number) 0 Inlining cast (byte) current_movedown_slow#9 ← (unumber)(number) 1 -Inlining cast (byte) main::render#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 Simplifying constant pointer cast (byte*) 1 @@ -6735,22 +6665,6 @@ Simplifying constant pointer cast (byte*) 56333 Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 Simplifying constant pointer cast (void()**) 65534 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (word*) 54286 Simplifying constant pointer cast (byte*) 54290 Simplifying constant pointer cast (byte*) 54299 @@ -6761,521 +6675,7 @@ Simplifying constant pointer cast (byte*) 7168 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $13 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $65 -Simplifying constant integer cast $66 -Simplifying constant integer cast $a6 -Simplifying constant integer cast $66 -Simplifying constant integer cast $65 -Simplifying constant integer cast $65 -Simplifying constant integer cast $a6 -Simplifying constant integer cast $63 -Simplifying constant integer cast $64 -Simplifying constant integer cast $a4 -Simplifying constant integer cast $64 -Simplifying constant integer cast $63 -Simplifying constant integer cast $63 -Simplifying constant integer cast $a4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast $30 -Simplifying constant integer cast $2b -Simplifying constant integer cast $26 -Simplifying constant integer cast $21 -Simplifying constant integer cast $1c -Simplifying constant integer cast $17 -Simplifying constant integer cast $12 -Simplifying constant integer cast $d -Simplifying constant integer cast 8 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 -Simplifying constant integer cast 3 -Simplifying constant integer cast 3 -Simplifying constant integer cast 3 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $40 -Simplifying constant integer cast $100 -Simplifying constant integer cast $300 -Simplifying constant integer cast $1200 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -7291,14 +6691,6 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast $ffff -Simplifying constant integer cast $20 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast $40 Simplifying constant integer cast 3 @@ -7314,7 +6706,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $20 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 @@ -7341,15 +6732,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast 4 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $24 Simplifying constant integer cast $28 -Simplifying constant integer cast (const byte) PLAYFIELD_COLS*(unumber)(number) 2 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 4 Simplifying constant integer cast 0 @@ -7361,11 +6749,9 @@ Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $18 -Simplifying constant integer cast (const byte) SPRITES_FIRST_YPOS+(unumber)(number) $15 Simplifying constant integer cast $15 Simplifying constant integer cast $40 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant integer cast $7f Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -7391,19 +6777,12 @@ Simplifying constant integer cast 3 Simplifying constant integer cast $14 Simplifying constant integer cast $15 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $30 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -7412,7 +6791,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast $80 Simplifying constant integer cast $10 Simplifying constant integer cast $3f Simplifying constant integer cast $10 @@ -7421,22 +6799,15 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 7 Simplifying constant integer cast 1 Simplifying constant integer cast 7 Simplifying constant integer cast 7 -Simplifying constant integer cast (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(unumber)(number) 1 Simplifying constant integer cast 1 -Simplifying constant integer cast (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(unumber)(number) 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -7456,13 +6827,9 @@ Simplifying constant integer cast 6 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -7478,14 +6845,6 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $ffff -Finalized unsigned number type (byte) $20 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 3 @@ -7500,7 +6859,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 @@ -7527,14 +6885,12 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $24 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 @@ -7549,7 +6905,6 @@ Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -7575,18 +6930,11 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $14 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $30 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -7595,7 +6943,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) $10 @@ -7604,14 +6951,11 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 @@ -7621,8 +6965,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 @@ -7637,7 +6979,6 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (byte) 8 Inferred type updated to byte in (unumber~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#5 | (byte) $40 @@ -8705,7 +8046,6 @@ Constant right-side identified [274] (word) render_bcd::offset#2 ← (const word Constant right-side identified [288] (word) render_bcd::offset#4 ← (const word) render_score::lines_offset + (byte) 1 Constant right-side identified [416] (byte*) render_next::screen_next_area#1 ← (const byte*) PLAYFIELD_SCREEN_1 + (const word) render_next::next_area_offset Constant right-side identified [419] (byte*) render_next::screen_next_area#2 ← (const byte*) PLAYFIELD_SCREEN_2 + (const word) render_next::next_area_offset -Constant right-side identified [454] (byte) sprites_init::xpos#0 ← (unumber)(number) $18+(number) $f*(number) 8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) keyboard_events_size#0 = 0 Constant (const byte) keyboard_modifiers#0 = 0 @@ -8761,7 +8101,7 @@ Constant (const byte*) render_screen_original::ocols#0 = PLAYFIELD_COLORS_ORIGIN Constant (const byte*) render_screen_original::cols#0 = COLS Constant (const byte) render_screen_original::y#0 = 0 Constant (const byte) render_screen_original::x#0 = 0 -Constant (const byte) render_playfield::i#0 = PLAYFIELD_COLS*2 +Constant (const byte) render_playfield::i#0 = (byte)PLAYFIELD_COLS*2 Constant (const byte) render_playfield::l#0 = 2 Constant (const byte) render_playfield::c#0 = 0 Constant (const byte) render_moving::i#0 = 0 @@ -8772,7 +8112,7 @@ Constant (const byte*) render_next::screen_next_area#1 = PLAYFIELD_SCREEN_1+rend Constant (const byte*) render_next::screen_next_area#2 = PLAYFIELD_SCREEN_2+render_next::next_area_offset Constant (const byte) render_next::l#0 = 0 Constant (const byte) render_next::c#0 = 0 -Constant (const byte) sprites_init::xpos#0 = (unumber)$18+$f*8 +Constant (const byte) sprites_init::xpos#0 = (byte)$18+$f*8 Constant (const byte) sprites_init::s#0 = 0 Constant (const byte*) toSpritePtr1_sprite#0 = PLAYFIELD_SPRITES Constant (const byte*) sprites_irq::toSpritePtr2_sprite#0 = PLAYFIELD_SPRITES @@ -8812,8 +8152,8 @@ Constant (const byte) play_lock_current::c#0 = 0 Constant (const byte) current_orientation#68 = 0 Constant (const byte) play_spawn_current::piece_idx#0 = 7 Constant (const byte) game_over#5 = 1 -Constant (const byte) play_remove_lines::r#0 = PLAYFIELD_LINES*PLAYFIELD_COLS-1 -Constant (const byte) play_remove_lines::w#0 = PLAYFIELD_LINES*PLAYFIELD_COLS-1 +Constant (const byte) play_remove_lines::r#0 = (byte)PLAYFIELD_LINES*PLAYFIELD_COLS-1 +Constant (const byte) play_remove_lines::w#0 = (byte)PLAYFIELD_LINES*PLAYFIELD_COLS-1 Constant (const byte) play_remove_lines::removed#0 = 0 Constant (const byte) play_remove_lines::y#0 = 0 Constant (const byte) play_remove_lines::full#0 = 1 @@ -8977,6 +8317,10 @@ Adding number conversion cast (unumber) $1d+1 in if((byte) level#21>=(byte) $1d+ Adding number conversion cast (unumber) 1 in if((byte) level#21>=(unumber)(byte) $1d+(number) 1) goto play_increase_level::@1 Adding number conversion cast (unumber) 5 in if((byte) play_increase_level::b#1!=(number) 5) goto play_increase_level::@7 Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast (const byte) PLAYFIELD_COLS*(byte) 2 +Simplifying constant integer cast (const byte) SPRITES_FIRST_YPOS+(byte) $13 +Simplifying constant integer cast (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(byte) 1 +Simplifying constant integer cast (const byte) PLAYFIELD_LINES*(const byte) PLAYFIELD_COLS-(byte) 1 Simplifying constant integer cast 8 Simplifying constant integer cast 8 Simplifying constant integer cast (const byte) PLAYFIELD_LINES-(byte) 1+(unumber)(number) 1 @@ -8993,6 +8337,7 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast 4 +Simplifying constant integer cast (const byte) SPRITES_FIRST_YPOS+(byte) $15 Simplifying constant integer cast (const byte) PLAYFIELD_LINES-(byte) 1+(unumber)(number) 1 Simplifying constant integer cast 1 Simplifying constant integer cast 5 @@ -9276,7 +8621,7 @@ Constant inlined play_remove_lines::y#0 = (byte) 0 Constant inlined render_next::screen_next_area#1 = (const byte*) PLAYFIELD_SCREEN_1+(const word) render_next::next_area_offset Constant inlined render_next::screen_next_area#2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) render_next::next_area_offset Constant inlined keyboard_event_scan::col#0 = (byte) 0 -Constant inlined lines_bcd#0 = (byte) 0 +Constant inlined lines_bcd#0 = (word) 0 Constant inlined sprites_irq::$5 = (const byte) sprites_irq::toSpritePtr2_return#0 Constant inlined render_show::toD0181_screen#0 = (const byte*) PLAYFIELD_SCREEN_1 Constant inlined render_playfield::l#0 = (byte) 2 @@ -10054,7 +9399,7 @@ FINAL CONTROL FLOW GRAPH to:@1 @1: scope:[] from @begin [1] (byte) render_screen_showing ← (byte) 0 - [2] (dword) score_bcd#0 ← (byte) 0 + [2] (dword) score_bcd#0 ← (dword) 0 kickasm(location (const byte*) PLAYFIELD_CHARSET) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }} @@ -10157,7 +9502,7 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [40] (byte) level_bcd#11 ← phi( main::@6/(byte) level_bcd#17 main::@17/(byte) 0 main::@25/(byte) level_bcd#17 ) [40] (byte) level#10 ← phi( main::@6/(byte) level#17 main::@17/(byte) 0 main::@25/(byte) level#17 ) [40] (dword) score_bcd#17 ← phi( main::@6/(dword) score_bcd#13 main::@17/(dword) score_bcd#0 main::@25/(dword) score_bcd#13 ) - [40] (word) lines_bcd#19 ← phi( main::@6/(word) lines_bcd#15 main::@17/(byte) 0 main::@25/(word) lines_bcd#15 ) + [40] (word) lines_bcd#19 ← phi( main::@6/(word) lines_bcd#15 main::@17/(word) 0 main::@25/(word) lines_bcd#15 ) [40] (byte) current_movedown_counter#16 ← phi( main::@6/(byte) current_movedown_counter#14 main::@17/(byte) 0 main::@25/(byte) current_movedown_counter#14 ) [40] (byte) keyboard_events_size#19 ← phi( main::@6/(byte) keyboard_events_size#16 main::@17/(byte) 0 main::@25/(byte) keyboard_events_size#16 ) [40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#2 main::@25/(byte) next_piece_idx#16 ) @@ -12681,13 +12026,15 @@ __b1: // The screen currently being showed to the user. 0x00 for screen 1 / 0x20 for screen 2. lda #0 sta.z render_screen_showing - // [2] (dword) score_bcd#0 ← (byte) 0 -- vduz1=vbuc1 + // [2] (dword) score_bcd#0 ← (dword) 0 -- vduz1=vduc1 // Current score in BCD-format - lda #0 + lda #<0 sta.z score_bcd - lda #0 + lda #>0 sta.z score_bcd+1 + lda #<0>>$10 sta.z score_bcd+2 + lda #>0>>$10 sta.z score_bcd+3 // kickasm(location (const byte*) PLAYFIELD_CHARSET) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }} // kickasm(location (const byte*) PLAYFIELD_SCREEN_ORIGINAL) {{ // Load chars for the screen .var screen = LoadBinary("playfield-screen.iscr") // Load extended colors for the screen .var extended = LoadBinary("playfield-extended.col") // screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8 // extended.get(i)-1 because the extended colors are 1-based (1/2/3/4) // <<6 to move extended colors to the upper 2 bits .fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 ) }} @@ -12881,7 +12228,7 @@ main: { lda #0 sta.z level // [40] phi (dword) score_bcd#17 = (dword) score_bcd#0 [phi:main::@17->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (byte) 0 [phi:main::@17->main::@1#3] -- vwuz1=vbuc1 + // [40] phi (word) lines_bcd#19 = (word) 0 [phi:main::@17->main::@1#3] -- vwuz1=vwuc1 lda #<0 sta.z lines_bcd lda #>0 @@ -16386,16 +15733,6 @@ sprites_irq: { // The playfield. 0 is empty non-zero is color. // The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth, playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0 - // The color #1 to use for the pieces for each level - PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED - // The color #2 to use for the pieces for each level - PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE - // Pointers to the screen address for rendering each playfield line - // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. - .align $80 - screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 - .align $40 - screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // The T-piece .align $40 PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 @@ -16426,6 +15763,16 @@ sprites_irq: { // The initial X/Y for each piece PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4 PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1 + // The color #1 to use for the pieces for each level + PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED + // The color #2 to use for the pieces for each level + PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE + // Pointers to the screen address for rendering each playfield line + // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. + .align $80 + screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 + .align $40 + screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // Pointers to the playfield address for each playfield line playfield_lines: .fill 2*PLAYFIELD_LINES, 0 // Indixes into the playfield for each playfield line @@ -16475,7 +15822,7 @@ sprites_irq: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] (byte) render_screen_showing ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [2] (dword) score_bcd#0 ← (byte) 0 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a +Statement [2] (dword) score_bcd#0 ← (dword) 0 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a @@ -16747,7 +16094,7 @@ Statement [581] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ Statement [582] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [584] (byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [1] (byte) render_screen_showing ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [2] (dword) score_bcd#0 ← (byte) 0 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a +Statement [2] (dword) score_bcd#0 ← (dword) 0 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a @@ -16926,7 +16273,7 @@ Statement [581] (byte) irq_raster_next ← (byte) irq_raster_next + (byte) $15 [ Statement [582] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [584] (byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next ] ( [ irq_raster_next ] ) always clobbers reg byte a Statement [1] (byte) render_screen_showing ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a -Statement [2] (dword) score_bcd#0 ← (byte) 0 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a +Statement [2] (dword) score_bcd#0 ← (dword) 0 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [7] (byte) irq_raster_next ← (const byte) IRQ_RASTER_FIRST [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [8] (byte) irq_sprite_ypos ← (const byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a Statement [10] (byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd#0 ] ( [ score_bcd#0 ] ) always clobbers reg byte a @@ -17326,243 +16673,243 @@ Uplift Scope [sid_rnd_init] Uplift Scope [render_screen_swap] Uplift Scope [sprites_irq_init] -Uplifting [keyboard_event_scan] best 4708853 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp[1]:90 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:91 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp[1]:89 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:198 [ keyboard_event_scan::row_scan#0 ] zp[1]:200 [ keyboard_event_scan::$0 ] zp[1]:202 [ keyboard_event_scan::$3 ] zp[1]:204 [ keyboard_event_scan::$6 ] zp[1]:206 [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4708857 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp[1]:90 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:91 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp[1]:89 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:198 [ keyboard_event_scan::row_scan#0 ] zp[1]:200 [ keyboard_event_scan::$0 ] zp[1]:202 [ keyboard_event_scan::$3 ] zp[1]:204 [ keyboard_event_scan::$6 ] zp[1]:206 [ keyboard_event_scan::$9 ] Limited combination testing to 100 combinations of 524288 possible. -Uplifting [play_collision] best 4558853 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp[1]:155 [ play_collision::$14 ] zp[1]:158 [ play_collision::i#1 ] zp[1]:47 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] zp[2]:156 [ play_collision::playfield_line#0 ] zp[2]:153 [ play_collision::piece_gfx#0 ] zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp[1]:150 [ play_collision::return#14 ] zp[1]:160 [ play_collision::return#13 ] zp[1]:162 [ play_collision::return#1 ] zp[1]:166 [ play_collision::return#0 ] zp[1]:173 [ play_collision::return#10 ] zp[1]:52 [ play_collision::return#15 ] +Uplifting [play_collision] best 4558857 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp[1]:155 [ play_collision::$14 ] zp[1]:158 [ play_collision::i#1 ] zp[1]:47 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] zp[2]:156 [ play_collision::playfield_line#0 ] zp[2]:153 [ play_collision::piece_gfx#0 ] zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp[1]:150 [ play_collision::return#14 ] zp[1]:160 [ play_collision::return#13 ] zp[1]:162 [ play_collision::return#1 ] zp[1]:166 [ play_collision::return#0 ] zp[1]:173 [ play_collision::return#10 ] zp[1]:52 [ play_collision::return#15 ] Limited combination testing to 100 combinations of 429981696 possible. -Uplifting [play_lock_current] best 4464853 combination zp[1]:84 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp[1]:85 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp[1]:191 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp[1]:83 [ play_lock_current::l#6 play_lock_current::l#1 ] zp[2]:189 [ play_lock_current::playfield_line#0 ] zp[1]:82 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4464857 combination zp[1]:84 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp[1]:85 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp[1]:191 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp[1]:83 [ play_lock_current::l#6 play_lock_current::l#1 ] zp[2]:189 [ play_lock_current::playfield_line#0 ] zp[1]:82 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Limited combination testing to 100 combinations of 2916 possible. -Uplifting [play_remove_lines] best 4325853 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp[1]:79 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:80 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:187 [ play_remove_lines::c#0 ] zp[1]:77 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp[1]:76 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:168 [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4325857 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp[1]:79 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:80 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:187 [ play_remove_lines::c#0 ] zp[1]:77 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp[1]:76 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:168 [ play_remove_lines::return#0 ] Limited combination testing to 100 combinations of 20736 possible. -Uplifting [] best 4325611 combination zp[1]:92 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp[1]:73 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] zp[2]:69 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#123 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] zp[1]:67 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] zp[1]:71 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] reg byte x [ render_screen_render#22 render_screen_render#63 ] reg byte x [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] reg byte a [ render_screen_render#15 render_screen_render#65 ] reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] zp[1]:64 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp[1]:68 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp[1]:63 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp[2]:65 [ current_piece#28 current_piece#10 current_piece#15 current_piece#101 current_piece#92 ] zp[1]:74 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] zp[1]:118 [ irq_sprite_ypos ] zp[4]:58 [ score_bcd#23 score_bcd#17 score_bcd#13 score_bcd#0 score_bcd#15 score_bcd#26 ] zp[1]:62 [ level#33 level#10 level#17 level#19 level#21 ] zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] zp[1]:116 [ render_screen_showing ] +Uplifting [] best 4325615 combination zp[1]:92 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp[1]:73 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] zp[2]:69 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#123 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] zp[1]:67 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] zp[1]:71 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] reg byte x [ render_screen_render#22 render_screen_render#63 ] reg byte x [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] reg byte a [ render_screen_render#15 render_screen_render#65 ] reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] zp[1]:64 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp[1]:68 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp[1]:63 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] zp[2]:65 [ current_piece#28 current_piece#10 current_piece#15 current_piece#101 current_piece#92 ] zp[1]:74 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] zp[1]:118 [ irq_sprite_ypos ] zp[4]:58 [ score_bcd#23 score_bcd#17 score_bcd#13 score_bcd#0 score_bcd#15 score_bcd#26 ] zp[1]:62 [ level#33 level#10 level#17 level#19 level#21 ] zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] zp[1]:116 [ render_screen_showing ] Limited combination testing to 100 combinations of 1944 possible. -Uplifting [render_moving] best 4310611 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:133 [ render_moving::$1 ] zp[1]:134 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:135 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4310615 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:133 [ render_moving::$1 ] zp[1]:134 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:135 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Limited combination testing to 100 combinations of 15552 possible. -Uplifting [render_next] best 4295607 combination zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp[1]:17 [ render_next::l#7 render_next::l#1 ] zp[1]:131 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$6 ] +Uplifting [render_next] best 4295611 combination zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp[1]:17 [ render_next::l#7 render_next::l#1 ] zp[1]:131 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$6 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [play_increase_level] best 4281601 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] -Uplifting [render_playfield] best 4280601 combination zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$0 ] reg byte a [ render_playfield::$3 ] zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [play_increase_level] best 4281605 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] +Uplifting [render_playfield] best 4280605 combination zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$0 ] reg byte a [ render_playfield::$3 ] zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [keyboard_matrix_read] best 4268595 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] -Uplifting [render_screen_original] best 4266495 combination zp[2]:111 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp[2]:113 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp[2]:107 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp[2]:109 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp[1]:106 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [play_spawn_current] best 4260476 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp[1]:172 [ play_spawn_current::$7 ] -Uplifting [main] best 4259276 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] -Uplifting [play_movement] best 4258664 combination reg byte a [ play_movement::return#3 ] zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp[1]:123 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp[1]:145 [ play_movement::render#2 ] +Uplifting [keyboard_matrix_read] best 4268599 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] +Uplifting [render_screen_original] best 4266499 combination zp[2]:111 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp[2]:113 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp[2]:107 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp[2]:109 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp[1]:106 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [play_spawn_current] best 4260480 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp[1]:172 [ play_spawn_current::$7 ] +Uplifting [main] best 4259280 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] +Uplifting [play_movement] best 4258668 combination reg byte a [ play_movement::return#3 ] zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp[1]:123 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp[1]:145 [ play_movement::render#2 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [keyboard_event_get] best 4257758 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] -Uplifting [play_init] best 4257548 combination reg byte a [ play_init::$3 ] zp[1]:98 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp[1]:97 [ play_init::idx#2 play_init::idx#1 ] zp[2]:95 [ play_init::pli#2 play_init::pli#1 ] +Uplifting [keyboard_event_get] best 4257762 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] +Uplifting [play_init] best 4257552 combination reg byte a [ play_init::$3 ] zp[1]:98 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp[1]:97 [ play_init::idx#2 play_init::idx#1 ] zp[2]:95 [ play_init::pli#2 play_init::pli#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [render_bcd] best 4257518 combination zp[2]:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp[1]:129 [ render_bcd::$4 ] zp[2]:9 [ render_bcd::offset#6 ] zp[1]:11 [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4257522 combination zp[2]:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp[1]:129 [ render_bcd::$4 ] zp[2]:9 [ render_bcd::offset#6 ] zp[1]:11 [ render_bcd::only_low#6 ] Limited combination testing to 100 combinations of 1536 possible. -Uplifting [render_init] best 4257348 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$5 ] zp[2]:104 [ render_init::li_2#2 render_init::li_2#1 ] zp[2]:102 [ render_init::li_1#2 render_init::li_1#1 ] -Uplifting [sprites_init] best 4257178 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:100 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [play_move_down] best 4257145 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp[1]:169 [ play_move_down::removed#0 ] zp[1]:140 [ play_move_down::key_event#0 ] zp[1]:72 [ play_move_down::return#3 ] +Uplifting [render_init] best 4257352 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$5 ] zp[2]:104 [ render_init::li_2#2 render_init::li_2#1 ] zp[2]:102 [ render_init::li_1#2 render_init::li_1#1 ] +Uplifting [sprites_init] best 4257182 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:100 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [play_move_down] best 4257149 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp[1]:169 [ play_move_down::removed#0 ] zp[1]:140 [ play_move_down::key_event#0 ] zp[1]:72 [ play_move_down::return#3 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [keyboard_event_pressed] best 4257125 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp[1]:201 [ keyboard_event_pressed::return#1 ] zp[1]:203 [ keyboard_event_pressed::return#2 ] zp[1]:205 [ keyboard_event_pressed::return#10 ] zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] zp[1]:195 [ keyboard_event_pressed::return#11 ] zp[1]:87 [ keyboard_event_pressed::keycode#5 ] +Uplifting [keyboard_event_pressed] best 4257129 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp[1]:201 [ keyboard_event_pressed::return#1 ] zp[1]:203 [ keyboard_event_pressed::return#2 ] zp[1]:205 [ keyboard_event_pressed::return#10 ] zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] zp[1]:195 [ keyboard_event_pressed::return#11 ] zp[1]:87 [ keyboard_event_pressed::keycode#5 ] Limited combination testing to 100 combinations of 589824 possible. -Uplifting [sprites_irq] best 4257101 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:222 [ sprites_irq::ptr#1 ] zp[1]:216 [ sprites_irq::ypos#0 ] zp[1]:219 [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4257105 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:222 [ sprites_irq::ptr#1 ] zp[1]:216 [ sprites_irq::ypos#0 ] zp[1]:219 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_rotate] best 4257083 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp[1]:152 [ play_move_rotate::$7 ] zp[1]:146 [ play_move_rotate::key_event#0 ] zp[1]:41 [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4257087 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp[1]:152 [ play_move_rotate::$7 ] zp[1]:146 [ play_move_rotate::key_event#0 ] zp[1]:41 [ play_move_rotate::return#2 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_update_score] best 4257061 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp[4]:179 [ play_update_score::add_bcd#0 ] zp[1]:170 [ play_update_score::removed#0 ] zp[1]:177 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4257065 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp[4]:179 [ play_update_score::add_bcd#0 ] zp[1]:170 [ play_update_score::removed#0 ] zp[1]:177 [ play_update_score::lines_before#0 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [play_move_leftright] best 4257034 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp[1]:53 [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4257038 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp[1]:53 [ play_move_leftright::return#2 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [render_show] best 4257025 combination reg byte a [ render_show::d018val#3 ] -Uplifting [render_score] best 4257025 combination zp[2]:5 [ render_score::screen#3 ] -Uplifting [sid_rnd_init] best 4257025 combination -Uplifting [render_screen_swap] best 4257025 combination -Uplifting [sprites_irq_init] best 4257025 combination +Uplifting [render_show] best 4257029 combination reg byte a [ render_show::d018val#3 ] +Uplifting [render_score] best 4257029 combination zp[2]:5 [ render_score::screen#3 ] +Uplifting [sid_rnd_init] best 4257029 combination +Uplifting [render_screen_swap] best 4257029 combination +Uplifting [sprites_irq_init] best 4257029 combination Attempting to uplift remaining variables inzp[1]:92 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] -Uplifting [] best 4257025 combination zp[1]:92 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] +Uplifting [] best 4257029 combination zp[1]:92 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] Attempting to uplift remaining variables inzp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] -Uplifting [play_collision] best 4257025 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] +Uplifting [play_collision] best 4257029 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Attempting to uplift remaining variables inzp[1]:84 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] -Uplifting [play_lock_current] best 4257025 combination zp[1]:84 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] +Uplifting [play_lock_current] best 4257029 combination zp[1]:84 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Attempting to uplift remaining variables inzp[1]:90 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 4107025 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 4107029 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp[1]:79 [ play_remove_lines::x#2 play_remove_lines::x#1 ] -Uplifting [play_remove_lines] best 4107025 combination zp[1]:79 [ play_remove_lines::x#2 play_remove_lines::x#1 ] +Uplifting [play_remove_lines] best 4107029 combination zp[1]:79 [ play_remove_lines::x#2 play_remove_lines::x#1 ] Attempting to uplift remaining variables inzp[1]:85 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] -Uplifting [play_lock_current] best 4107025 combination zp[1]:85 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] +Uplifting [play_lock_current] best 4107029 combination zp[1]:85 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Attempting to uplift remaining variables inzp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] -Uplifting [play_collision] best 4107025 combination zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] +Uplifting [play_collision] best 4107029 combination zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Attempting to uplift remaining variables inzp[1]:91 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] -Uplifting [keyboard_event_scan] best 4107025 combination zp[1]:91 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] +Uplifting [keyboard_event_scan] best 4107029 combination zp[1]:91 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] Attempting to uplift remaining variables inzp[1]:80 [ play_remove_lines::full#4 play_remove_lines::full#2 ] -Uplifting [play_remove_lines] best 4107025 combination zp[1]:80 [ play_remove_lines::full#4 play_remove_lines::full#2 ] +Uplifting [play_remove_lines] best 4107029 combination zp[1]:80 [ play_remove_lines::full#4 play_remove_lines::full#2 ] Attempting to uplift remaining variables inzp[1]:187 [ play_remove_lines::c#0 ] -Uplifting [play_remove_lines] best 4107025 combination zp[1]:187 [ play_remove_lines::c#0 ] +Uplifting [play_remove_lines] best 4107029 combination zp[1]:187 [ play_remove_lines::c#0 ] Attempting to uplift remaining variables inzp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Uplifting [render_moving] best 4107025 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] +Uplifting [render_moving] best 4107029 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] Attempting to uplift remaining variables inzp[1]:77 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] -Uplifting [play_remove_lines] best 4107025 combination zp[1]:77 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] +Uplifting [play_remove_lines] best 4107029 combination zp[1]:77 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] Attempting to uplift remaining variables inzp[1]:191 [ play_lock_current::i#1 ] -Uplifting [play_lock_current] best 4107025 combination zp[1]:191 [ play_lock_current::i#1 ] +Uplifting [play_lock_current] best 4107029 combination zp[1]:191 [ play_lock_current::i#1 ] Attempting to uplift remaining variables inzp[1]:73 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] -Uplifting [] best 4107025 combination zp[1]:73 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] +Uplifting [] best 4107029 combination zp[1]:73 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] Attempting to uplift remaining variables inzp[1]:89 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 4107025 combination zp[1]:89 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 4107029 combination zp[1]:89 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] -Uplifting [render_playfield] best 4107025 combination zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] +Uplifting [render_playfield] best 4107029 combination zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] Attempting to uplift remaining variables inzp[1]:155 [ play_collision::$14 ] -Uplifting [play_collision] best 4103025 combination reg byte a [ play_collision::$14 ] +Uplifting [play_collision] best 4103029 combination reg byte a [ play_collision::$14 ] Attempting to uplift remaining variables inzp[1]:76 [ play_remove_lines::y#8 play_remove_lines::y#1 ] -Uplifting [play_remove_lines] best 4103025 combination zp[1]:76 [ play_remove_lines::y#8 play_remove_lines::y#1 ] +Uplifting [play_remove_lines] best 4103029 combination zp[1]:76 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Attempting to uplift remaining variables inzp[1]:158 [ play_collision::i#1 ] -Uplifting [play_collision] best 4103025 combination zp[1]:158 [ play_collision::i#1 ] +Uplifting [play_collision] best 4103029 combination zp[1]:158 [ play_collision::i#1 ] Attempting to uplift remaining variables inzp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Uplifting [render_playfield] best 4103025 combination zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] +Uplifting [render_playfield] best 4103029 combination zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] Attempting to uplift remaining variables inzp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] -Uplifting [render_moving] best 4103025 combination zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] +Uplifting [render_moving] best 4103029 combination zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Attempting to uplift remaining variables inzp[1]:47 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] -Uplifting [play_collision] best 4103025 combination zp[1]:47 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] +Uplifting [play_collision] best 4103029 combination zp[1]:47 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ] Attempting to uplift remaining variables inzp[1]:198 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 4103025 combination zp[1]:198 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 4103029 combination zp[1]:198 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp[1]:83 [ play_lock_current::l#6 play_lock_current::l#1 ] -Uplifting [play_lock_current] best 4103025 combination zp[1]:83 [ play_lock_current::l#6 play_lock_current::l#1 ] +Uplifting [play_lock_current] best 4103029 combination zp[1]:83 [ play_lock_current::l#6 play_lock_current::l#1 ] Attempting to uplift remaining variables inzp[1]:48 [ play_collision::l#6 play_collision::l#1 ] -Uplifting [play_collision] best 4103025 combination zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] +Uplifting [play_collision] best 4103029 combination zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] Attempting to uplift remaining variables inzp[1]:82 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] -Uplifting [play_lock_current] best 4103025 combination zp[1]:82 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4103029 combination zp[1]:82 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Attempting to uplift remaining variables inzp[1]:133 [ render_moving::$1 ] -Uplifting [render_moving] best 4102425 combination reg byte a [ render_moving::$1 ] +Uplifting [render_moving] best 4102429 combination reg byte a [ render_moving::$1 ] Attempting to uplift remaining variables inzp[1]:134 [ render_moving::$6 ] -Uplifting [render_moving] best 4102025 combination reg byte a [ render_moving::$6 ] +Uplifting [render_moving] best 4102029 combination reg byte a [ render_moving::$6 ] Attempting to uplift remaining variables inzp[1]:67 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] -Uplifting [] best 4102025 combination zp[1]:67 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] +Uplifting [] best 4102029 combination zp[1]:67 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] Attempting to uplift remaining variables inzp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] -Uplifting [render_playfield] best 4102025 combination zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4102029 combination zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] Attempting to uplift remaining variables inzp[1]:17 [ render_next::l#7 render_next::l#1 ] -Uplifting [render_next] best 4102025 combination zp[1]:17 [ render_next::l#7 render_next::l#1 ] +Uplifting [render_next] best 4102029 combination zp[1]:17 [ render_next::l#7 render_next::l#1 ] Attempting to uplift remaining variables inzp[1]:30 [ render_moving::l#4 render_moving::l#1 ] -Uplifting [render_moving] best 4102025 combination zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] +Uplifting [render_moving] best 4102029 combination zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] Attempting to uplift remaining variables inzp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] -Uplifting [render_moving] best 4102025 combination zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4102029 combination zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Attempting to uplift remaining variables inzp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] -Uplifting [] best 4102025 combination zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +Uplifting [] best 4102029 combination zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] Attempting to uplift remaining variables inzp[1]:131 [ render_next::next_piece_char#0 ] -Uplifting [render_next] best 4102025 combination zp[1]:131 [ render_next::next_piece_char#0 ] +Uplifting [render_next] best 4102029 combination zp[1]:131 [ render_next::next_piece_char#0 ] Attempting to uplift remaining variables inzp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] -Uplifting [play_collision] best 4102025 combination zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] +Uplifting [play_collision] best 4102029 combination zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Attempting to uplift remaining variables inzp[1]:71 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] -Uplifting [] best 4102025 combination zp[1]:71 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] +Uplifting [] best 4102029 combination zp[1]:71 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Attempting to uplift remaining variables inzp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Uplifting [play_movement] best 4102025 combination zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] +Uplifting [play_movement] best 4102029 combination zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] Attempting to uplift remaining variables inzp[1]:98 [ play_init::b#2 play_init::b#1 ] -Uplifting [play_init] best 4101925 combination reg byte x [ play_init::b#2 play_init::b#1 ] +Uplifting [play_init] best 4101929 combination reg byte x [ play_init::b#2 play_init::b#1 ] Attempting to uplift remaining variables inzp[1]:64 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Uplifting [] best 4101925 combination zp[1]:64 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] +Uplifting [] best 4101929 combination zp[1]:64 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Attempting to uplift remaining variables inzp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] -Uplifting [play_collision] best 4101909 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] +Uplifting [play_collision] best 4101913 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Attempting to uplift remaining variables inzp[1]:106 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [render_screen_original] best 4101909 combination zp[1]:106 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [render_screen_original] best 4101913 combination zp[1]:106 [ render_screen_original::y#6 render_screen_original::y#1 ] Attempting to uplift remaining variables inzp[1]:68 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Uplifting [] best 4101909 combination zp[1]:68 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] +Uplifting [] best 4101913 combination zp[1]:68 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] Attempting to uplift remaining variables inzp[1]:63 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] -Uplifting [] best 4101909 combination zp[1]:63 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] +Uplifting [] best 4101913 combination zp[1]:63 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Attempting to uplift remaining variables inzp[1]:100 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [sprites_init] best 4101909 combination zp[1]:100 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [sprites_init] best 4101913 combination zp[1]:100 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Attempting to uplift remaining variables inzp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] -Uplifting [] best 4101909 combination zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] +Uplifting [] best 4101913 combination zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 ] Attempting to uplift remaining variables inzp[1]:74 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] -Uplifting [] best 4101909 combination zp[1]:74 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] +Uplifting [] best 4101913 combination zp[1]:74 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] Attempting to uplift remaining variables inzp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -Uplifting [] best 4101909 combination zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] +Uplifting [] best 4101913 combination zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] Attempting to uplift remaining variables inzp[1]:118 [ irq_sprite_ypos ] -Uplifting [] best 4101909 combination zp[1]:118 [ irq_sprite_ypos ] +Uplifting [] best 4101913 combination zp[1]:118 [ irq_sprite_ypos ] Attempting to uplift remaining variables inzp[1]:97 [ play_init::idx#2 play_init::idx#1 ] -Uplifting [play_init] best 4101909 combination zp[1]:97 [ play_init::idx#2 play_init::idx#1 ] +Uplifting [play_init] best 4101913 combination zp[1]:97 [ play_init::idx#2 play_init::idx#1 ] Attempting to uplift remaining variables inzp[1]:62 [ level#33 level#10 level#17 level#19 level#21 ] -Uplifting [] best 4101909 combination zp[1]:62 [ level#33 level#10 level#17 level#19 level#21 ] +Uplifting [] best 4101913 combination zp[1]:62 [ level#33 level#10 level#17 level#19 level#21 ] Attempting to uplift remaining variables inzp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] -Uplifting [] best 4101909 combination zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] +Uplifting [] best 4101913 combination zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Attempting to uplift remaining variables inzp[1]:24 [ render_screen_render#33 render_screen_render#64 ] -Uplifting [] best 4101909 combination zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] +Uplifting [] best 4101913 combination zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] Attempting to uplift remaining variables inzp[1]:2 [ render_screen_show#16 render_screen_show#13 ] -Uplifting [] best 4101909 combination zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] +Uplifting [] best 4101913 combination zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Attempting to uplift remaining variables inzp[1]:123 [ play_movement::key_event#0 ] -Uplifting [play_movement] best 4101909 combination zp[1]:123 [ play_movement::key_event#0 ] +Uplifting [play_movement] best 4101913 combination zp[1]:123 [ play_movement::key_event#0 ] Attempting to uplift remaining variables inzp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Uplifting [play_move_rotate] best 4101909 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] +Uplifting [play_move_rotate] best 4101913 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Attempting to uplift remaining variables inzp[1]:3 [ render_screen_render#18 render_screen_render#11 ] -Uplifting [] best 4101909 combination zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] +Uplifting [] best 4101913 combination zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] Attempting to uplift remaining variables inzp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] -Uplifting [sprites_irq] best 4101909 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] +Uplifting [sprites_irq] best 4101913 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] Attempting to uplift remaining variables inzp[1]:120 [ irq_cnt ] -Uplifting [] best 4101909 combination zp[1]:120 [ irq_cnt ] +Uplifting [] best 4101913 combination zp[1]:120 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:129 [ render_bcd::$4 ] -Uplifting [render_bcd] best 4101903 combination reg byte a [ render_bcd::$4 ] +Uplifting [render_bcd] best 4101907 combination reg byte a [ render_bcd::$4 ] Attempting to uplift remaining variables inzp[1]:150 [ play_collision::return#14 ] -Uplifting [play_collision] best 4101897 combination reg byte a [ play_collision::return#14 ] +Uplifting [play_collision] best 4101901 combination reg byte a [ play_collision::return#14 ] Attempting to uplift remaining variables inzp[1]:152 [ play_move_rotate::$7 ] -Uplifting [play_move_rotate] best 4101891 combination reg byte x [ play_move_rotate::$7 ] +Uplifting [play_move_rotate] best 4101895 combination reg byte x [ play_move_rotate::$7 ] Attempting to uplift remaining variables inzp[1]:160 [ play_collision::return#13 ] -Uplifting [play_collision] best 4101885 combination reg byte a [ play_collision::return#13 ] +Uplifting [play_collision] best 4101889 combination reg byte a [ play_collision::return#13 ] Attempting to uplift remaining variables inzp[1]:162 [ play_collision::return#1 ] -Uplifting [play_collision] best 4101879 combination reg byte a [ play_collision::return#1 ] +Uplifting [play_collision] best 4101883 combination reg byte a [ play_collision::return#1 ] Attempting to uplift remaining variables inzp[1]:166 [ play_collision::return#0 ] -Uplifting [play_collision] best 4101873 combination reg byte a [ play_collision::return#0 ] +Uplifting [play_collision] best 4101877 combination reg byte a [ play_collision::return#0 ] Attempting to uplift remaining variables inzp[1]:168 [ play_remove_lines::return#0 ] -Uplifting [play_remove_lines] best 4101867 combination reg byte a [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4101871 combination reg byte a [ play_remove_lines::return#0 ] Attempting to uplift remaining variables inzp[1]:169 [ play_move_down::removed#0 ] -Uplifting [play_move_down] best 4101861 combination reg byte a [ play_move_down::removed#0 ] +Uplifting [play_move_down] best 4101865 combination reg byte a [ play_move_down::removed#0 ] Attempting to uplift remaining variables inzp[1]:173 [ play_collision::return#10 ] -Uplifting [play_collision] best 4101855 combination reg byte a [ play_collision::return#10 ] +Uplifting [play_collision] best 4101859 combination reg byte a [ play_collision::return#10 ] Attempting to uplift remaining variables inzp[1]:200 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 4101849 combination reg byte a [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 4101853 combination reg byte a [ keyboard_event_scan::$0 ] Attempting to uplift remaining variables inzp[1]:201 [ keyboard_event_pressed::return#1 ] -Uplifting [keyboard_event_pressed] best 4101843 combination reg byte a [ keyboard_event_pressed::return#1 ] +Uplifting [keyboard_event_pressed] best 4101847 combination reg byte a [ keyboard_event_pressed::return#1 ] Attempting to uplift remaining variables inzp[1]:202 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 4101837 combination reg byte a [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 4101841 combination reg byte a [ keyboard_event_scan::$3 ] Attempting to uplift remaining variables inzp[1]:203 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 4101831 combination reg byte a [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 4101835 combination reg byte a [ keyboard_event_pressed::return#2 ] Attempting to uplift remaining variables inzp[1]:204 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 4101825 combination reg byte a [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 4101829 combination reg byte a [ keyboard_event_scan::$6 ] Attempting to uplift remaining variables inzp[1]:205 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 4101819 combination reg byte a [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4101823 combination reg byte a [ keyboard_event_pressed::return#10 ] Attempting to uplift remaining variables inzp[1]:206 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 4101813 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4101817 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp[1]:146 [ play_move_rotate::key_event#0 ] -Uplifting [play_move_rotate] best 4101804 combination reg byte a [ play_move_rotate::key_event#0 ] +Uplifting [play_move_rotate] best 4101808 combination reg byte a [ play_move_rotate::key_event#0 ] Attempting to uplift remaining variables inzp[1]:222 [ sprites_irq::ptr#1 ] -Uplifting [sprites_irq] best 4101792 combination reg byte x [ sprites_irq::ptr#1 ] +Uplifting [sprites_irq] best 4101796 combination reg byte x [ sprites_irq::ptr#1 ] Attempting to uplift remaining variables inzp[1]:216 [ sprites_irq::ypos#0 ] -Uplifting [sprites_irq] best 4101777 combination reg byte a [ sprites_irq::ypos#0 ] +Uplifting [sprites_irq] best 4101781 combination reg byte a [ sprites_irq::ypos#0 ] Attempting to uplift remaining variables inzp[1]:219 [ sprites_irq::ptr#0 ] -Uplifting [sprites_irq] best 4101762 combination reg byte x [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4101766 combination reg byte x [ sprites_irq::ptr#0 ] Attempting to uplift remaining variables inzp[1]:140 [ play_move_down::key_event#0 ] -Uplifting [play_move_down] best 4101756 combination reg byte a [ play_move_down::key_event#0 ] +Uplifting [play_move_down] best 4101760 combination reg byte a [ play_move_down::key_event#0 ] Attempting to uplift remaining variables inzp[1]:193 [ keyboard_event_pressed::row_bits#0 ] -Uplifting [keyboard_event_pressed] best 4101756 combination zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] +Uplifting [keyboard_event_pressed] best 4101760 combination zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] Attempting to uplift remaining variables inzp[1]:195 [ keyboard_event_pressed::return#11 ] -Uplifting [keyboard_event_pressed] best 4101738 combination reg byte a [ keyboard_event_pressed::return#11 ] +Uplifting [keyboard_event_pressed] best 4101742 combination reg byte a [ keyboard_event_pressed::return#11 ] Attempting to uplift remaining variables inzp[1]:119 [ irq_sprite_ptr ] -Uplifting [] best 4101738 combination zp[1]:119 [ irq_sprite_ptr ] +Uplifting [] best 4101742 combination zp[1]:119 [ irq_sprite_ptr ] Attempting to uplift remaining variables inzp[1]:52 [ play_collision::return#15 ] -Uplifting [play_collision] best 4101708 combination reg byte a [ play_collision::return#15 ] +Uplifting [play_collision] best 4101712 combination reg byte a [ play_collision::return#15 ] Attempting to uplift remaining variables inzp[1]:87 [ keyboard_event_pressed::keycode#5 ] -Uplifting [keyboard_event_pressed] best 4101708 combination zp[1]:87 [ keyboard_event_pressed::keycode#5 ] +Uplifting [keyboard_event_pressed] best 4101712 combination zp[1]:87 [ keyboard_event_pressed::keycode#5 ] Attempting to uplift remaining variables inzp[1]:170 [ play_update_score::removed#0 ] -Uplifting [play_update_score] best 4101702 combination reg byte x [ play_update_score::removed#0 ] +Uplifting [play_update_score] best 4101706 combination reg byte x [ play_update_score::removed#0 ] Attempting to uplift remaining variables inzp[1]:11 [ render_bcd::only_low#6 ] -Uplifting [render_bcd] best 4101681 combination reg byte y [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4101685 combination reg byte y [ render_bcd::only_low#6 ] Attempting to uplift remaining variables inzp[1]:117 [ irq_raster_next ] -Uplifting [] best 4101681 combination zp[1]:117 [ irq_raster_next ] +Uplifting [] best 4101685 combination zp[1]:117 [ irq_raster_next ] Attempting to uplift remaining variables inzp[1]:145 [ play_movement::render#2 ] -Uplifting [play_movement] best 4101681 combination zp[1]:145 [ play_movement::render#2 ] +Uplifting [play_movement] best 4101685 combination zp[1]:145 [ play_movement::render#2 ] Attempting to uplift remaining variables inzp[1]:41 [ play_move_rotate::return#2 ] -Uplifting [play_move_rotate] best 4101672 combination reg byte a [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4101676 combination reg byte a [ play_move_rotate::return#2 ] Attempting to uplift remaining variables inzp[1]:53 [ play_move_leftright::return#2 ] -Uplifting [play_move_leftright] best 4101663 combination reg byte a [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4101667 combination reg byte a [ play_move_leftright::return#2 ] Attempting to uplift remaining variables inzp[1]:72 [ play_move_down::return#3 ] -Uplifting [play_move_down] best 4101656 combination reg byte x [ play_move_down::return#3 ] +Uplifting [play_move_down] best 4101660 combination reg byte x [ play_move_down::return#3 ] Attempting to uplift remaining variables inzp[1]:116 [ render_screen_showing ] -Uplifting [] best 4101656 combination zp[1]:116 [ render_screen_showing ] +Uplifting [] best 4101660 combination zp[1]:116 [ render_screen_showing ] Attempting to uplift remaining variables inzp[1]:177 [ play_update_score::lines_before#0 ] -Uplifting [play_update_score] best 4101656 combination zp[1]:177 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4101660 combination zp[1]:177 [ play_update_score::lines_before#0 ] Attempting to uplift remaining variables inzp[1]:172 [ play_spawn_current::$7 ] -Uplifting [play_spawn_current] best 4101656 combination zp[1]:172 [ play_spawn_current::$7 ] +Uplifting [play_spawn_current] best 4101660 combination zp[1]:172 [ play_spawn_current::$7 ] Coalescing zero page register [ zp[2]:5 [ render_score::screen#3 ] ] with [ zp[2]:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] ] - score: 6 Coalescing zero page register [ zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] ] with [ zp[1]:145 [ play_movement::render#2 ] ] - score: 2 Coalescing zero page register [ zp[2]:9 [ render_bcd::offset#6 ] ] with [ zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] - score: 1 @@ -17836,13 +17183,15 @@ __b1: // The screen currently being showed to the user. 0x00 for screen 1 / 0x20 for screen 2. lda #0 sta.z render_screen_showing - // [2] (dword) score_bcd#0 ← (byte) 0 -- vduz1=vbuc1 + // [2] (dword) score_bcd#0 ← (dword) 0 -- vduz1=vduc1 // Current score in BCD-format - lda #0 + lda #<0 sta.z score_bcd - lda #0 + lda #>0 sta.z score_bcd+1 + lda #<0>>$10 sta.z score_bcd+2 + lda #>0>>$10 sta.z score_bcd+3 // kickasm(location (const byte*) PLAYFIELD_CHARSET) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }} // kickasm(location (const byte*) PLAYFIELD_SCREEN_ORIGINAL) {{ // Load chars for the screen .var screen = LoadBinary("playfield-screen.iscr") // Load extended colors for the screen .var extended = LoadBinary("playfield-extended.col") // screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8 // extended.get(i)-1 because the extended colors are 1-based (1/2/3/4) // <<6 to move extended colors to the upper 2 bits .fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 ) }} @@ -18030,7 +17379,7 @@ main: { lda #0 sta.z level // [40] phi (dword) score_bcd#17 = (dword) score_bcd#0 [phi:main::@17->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (byte) 0 [phi:main::@17->main::@1#3] -- vwuz1=vbuc1 + // [40] phi (word) lines_bcd#19 = (word) 0 [phi:main::@17->main::@1#3] -- vwuz1=vwuc1 lda #<0 sta.z lines_bcd lda #>0 @@ -21134,16 +20483,6 @@ sprites_irq: { // The playfield. 0 is empty non-zero is color. // The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth, playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0 - // The color #1 to use for the pieces for each level - PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED - // The color #2 to use for the pieces for each level - PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE - // Pointers to the screen address for rendering each playfield line - // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. - .align $80 - screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 - .align $40 - screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // The T-piece .align $40 PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 @@ -21174,6 +20513,16 @@ sprites_irq: { // The initial X/Y for each piece PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4 PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1 + // The color #1 to use for the pieces for each level + PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED + // The color #2 to use for the pieces for each level + PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE + // Pointers to the screen address for rendering each playfield line + // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. + .align $80 + screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 + .align $40 + screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // Pointers to the playfield address for each playfield line playfield_lines: .fill 2*PLAYFIELD_LINES, 0 // Indixes into the playfield for each playfield line @@ -21416,8 +20765,8 @@ Removing instruction jmp __breturn Removing instruction jmp toSpritePtr2 Removing instruction jmp __b11 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #<0 +Removing instruction lda #>0 Removing instruction lda #0 Removing instruction ldy.z play_spawn_current.__7 Removing instruction lda #0 @@ -21870,45 +21219,45 @@ FINAL SYMBOL TABLE (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 (const byte*) BGCOL4 = (byte*) 53284 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f -(const byte) COLLISION_BOTTOM = (number) 2 -(const byte) COLLISION_LEFT = (number) 4 -(const byte) COLLISION_NONE = (number) 0 -(const byte) COLLISION_PLAYFIELD = (number) 1 -(const byte) COLLISION_RIGHT = (number) 8 +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const byte) COLLISION_BOTTOM = (byte) 2 +(const byte) COLLISION_LEFT = (byte) 4 +(const byte) COLLISION_NONE = (byte) 0 +(const byte) COLLISION_PLAYFIELD = (byte) 1 +(const byte) COLLISION_RIGHT = (byte) 8 (const byte*) COLS = (byte*) 55296 -(const byte) CYAN = (number) 3 +(const byte) CYAN = (byte) 3 (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 -(const byte) DARK_GREY = (number) $b -(const byte) GREEN = (number) 5 -(const byte) GREY = (number) $c +(const byte) DARK_GREY = (byte) $b +(const byte) GREEN = (byte) 5 +(const byte) GREY = (byte) $c (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte) IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS+(byte) $13 (const byte*) IRQ_STATUS = (byte*) 53273 -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_COMMODORE = (number) $3d -(const byte) KEY_CTRL = (number) $3a -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_RSHIFT = (number) $34 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_X = (number) $17 -(const byte) KEY_Z = (number) $c -(const byte) LIGHT_BLUE = (number) $e -(const byte) LIGHT_GREEN = (number) $d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_COMMODORE = (byte) $3d +(const byte) KEY_CTRL = (byte) $3a +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_RSHIFT = (byte) $34 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Z = (byte) $c +(const byte) LIGHT_BLUE = (byte) $e +(const byte) LIGHT_GREEN = (byte) $d (const byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } -(const byte) ORANGE = (number) 8 +(const byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } (const byte*) PIECES_COLORS_1[] = { (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED, (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED, (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED } @@ -21916,18 +21265,18 @@ FINAL SYMBOL TABLE (const byte*) PIECES_NEXT_CHARS[] = { (byte) $63, (byte) $64, (byte) $a4, (byte) $64, (byte) $63, (byte) $63, (byte) $a4 } (const byte*) PIECES_START_X[] = { (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4 } (const byte*) PIECES_START_Y[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1 } -(const byte*) PIECE_I[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0 } -(const byte*) PIECE_J[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_L[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_O[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_S[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_T[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_Z[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte) PINK = (number) $a +(const byte*) PIECE_I[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0 } +(const byte*) PIECE_J[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_L[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_O[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_S[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_T[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_Z[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte) PINK = (byte) $a (const byte*) PLAYFIELD_CHARSET = (byte*) 10240 (const byte*) PLAYFIELD_COLORS_ORIGINAL = (byte*) 7168 -(const byte) PLAYFIELD_COLS = (number) $a -(const byte) PLAYFIELD_LINES = (number) $16 +(const byte) PLAYFIELD_COLS = (byte) $a +(const byte) PLAYFIELD_LINES = (byte) $16 (const byte*) PLAYFIELD_SCREEN_1 = (byte*) 1024 (const byte*) PLAYFIELD_SCREEN_2 = (byte*) 11264 (const byte*) PLAYFIELD_SCREEN_ORIGINAL = (byte*) 6144 @@ -21936,13 +21285,13 @@ FINAL SYMBOL TABLE (const byte*) PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) SPRITE_PTRS (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 -(const byte) PURPLE = (number) 4 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 +(const byte) PURPLE = (byte) 4 (const byte*) RASTER = (byte*) 53266 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const dword*) SCORE_BASE_BCD[] = { (dword) 0, (dword) $40, (dword) $100, (dword) $300, (dword) $1200 } -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 @@ -21950,20 +21299,20 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 (const byte*) SPRITES_EXPAND_Y = (byte*) 53271 -(const byte) SPRITES_FIRST_YPOS = (number) $31 +(const byte) SPRITES_FIRST_YPOS = (byte) $31 (const byte*) SPRITES_MC = (byte*) 53276 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_RSEL = (byte) 8 (byte) current_movedown_counter (byte) current_movedown_counter#12 current_movedown_counter zp[1]:11 0.5333333333333333 (byte) current_movedown_counter#14 current_movedown_counter zp[1]:11 3.081081081081081 (byte) current_movedown_counter#16 current_movedown_counter zp[1]:11 8.769230769230768 -(const byte) current_movedown_fast = (number) $a +(const byte) current_movedown_fast = (byte) $a (byte) current_movedown_slow (byte) current_movedown_slow#1 current_movedown_slow zp[1]:7 0.17391304347826086 (byte) current_movedown_slow#10 current_movedown_slow zp[1]:7 4.0 @@ -22491,7 +21840,7 @@ FINAL SYMBOL TABLE (label) render_bcd::@1 (label) render_bcd::@2 (label) render_bcd::@return -(const byte) render_bcd::ZERO_CHAR = (number) $35 +(const byte) render_bcd::ZERO_CHAR = (byte) $35 (byte) render_bcd::bcd (byte) render_bcd::bcd#0 reg byte x 4.0 (byte) render_bcd::bcd#1 reg byte x 4.0 @@ -22917,7 +22266,7 @@ reg byte a [ sprites_irq::ptr#2 ] FINAL ASSEMBLER -Score: 3353851 +Score: 3353855 // File Comments // Tetris Game for the Commodore 64 @@ -23100,11 +22449,13 @@ __b1: lda #0 sta.z render_screen_showing // score_bcd = 0 - // [2] (dword) score_bcd#0 ← (byte) 0 -- vduz1=vbuc1 + // [2] (dword) score_bcd#0 ← (dword) 0 -- vduz1=vduc1 // Current score in BCD-format sta.z score_bcd sta.z score_bcd+1 + lda #<0>>$10 sta.z score_bcd+2 + lda #>0>>$10 sta.z score_bcd+3 // kickasm // kickasm(location (const byte*) PLAYFIELD_CHARSET) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }} @@ -23256,7 +22607,7 @@ main: { // [40] phi (byte) level#10 = (byte) 0 [phi:main::@17->main::@1#1] -- vbuz1=vbuc1 sta.z level // [40] phi (dword) score_bcd#17 = (dword) score_bcd#0 [phi:main::@17->main::@1#2] -- register_copy - // [40] phi (word) lines_bcd#19 = (byte) 0 [phi:main::@17->main::@1#3] -- vwuz1=vbuc1 + // [40] phi (word) lines_bcd#19 = (word) 0 [phi:main::@17->main::@1#3] -- vwuz1=vwuc1 sta.z lines_bcd sta.z lines_bcd+1 // [40] phi (byte) current_movedown_counter#16 = (byte) 0 [phi:main::@17->main::@1#4] -- vbuz1=vbuc1 @@ -26217,16 +25568,6 @@ sprites_irq: { // The playfield. 0 is empty non-zero is color. // The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth, playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0 - // The color #1 to use for the pieces for each level - PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED - // The color #2 to use for the pieces for each level - PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE - // Pointers to the screen address for rendering each playfield line - // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. - .align $80 - screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 - .align $40 - screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // The T-piece .align $40 PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 @@ -26257,6 +25598,16 @@ sprites_irq: { // The initial X/Y for each piece PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4 PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1 + // The color #1 to use for the pieces for each level + PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED + // The color #2 to use for the pieces for each level + PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE + // Pointers to the screen address for rendering each playfield line + // The lines for screen 1 is aligned with 0x80 and screen 2 with 0x40 - so XOR'ing with 0x40 gives screen 2 lines. + .align $80 + screen_lines_1: .fill 2*PLAYFIELD_LINES, 0 + .align $40 + screen_lines_2: .fill 2*PLAYFIELD_LINES, 0 // Pointers to the playfield address for each playfield line playfield_lines: .fill 2*PLAYFIELD_LINES, 0 // Indixes into the playfield for each playfield line diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index 224efb111..fb0fb4c17 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -9,45 +9,45 @@ (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 (const byte*) BGCOL4 = (byte*) 53284 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA2_PORT_A = (byte*) 56576 (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f -(const byte) COLLISION_BOTTOM = (number) 2 -(const byte) COLLISION_LEFT = (number) 4 -(const byte) COLLISION_NONE = (number) 0 -(const byte) COLLISION_PLAYFIELD = (number) 1 -(const byte) COLLISION_RIGHT = (number) 8 +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const byte) COLLISION_BOTTOM = (byte) 2 +(const byte) COLLISION_LEFT = (byte) 4 +(const byte) COLLISION_NONE = (byte) 0 +(const byte) COLLISION_PLAYFIELD = (byte) 1 +(const byte) COLLISION_RIGHT = (byte) 8 (const byte*) COLS = (byte*) 55296 -(const byte) CYAN = (number) 3 +(const byte) CYAN = (byte) 3 (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 -(const byte) DARK_GREY = (number) $b -(const byte) GREEN = (number) 5 -(const byte) GREY = (number) $c +(const byte) DARK_GREY = (byte) $b +(const byte) GREEN = (byte) 5 +(const byte) GREY = (byte) $c (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte) IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS+(byte) $13 (const byte*) IRQ_STATUS = (byte*) 53273 -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_COMMODORE = (number) $3d -(const byte) KEY_CTRL = (number) $3a -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_RSHIFT = (number) $34 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_X = (number) $17 -(const byte) KEY_Z = (number) $c -(const byte) LIGHT_BLUE = (number) $e -(const byte) LIGHT_GREEN = (number) $d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_COMMODORE = (byte) $3d +(const byte) KEY_CTRL = (byte) $3a +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_RSHIFT = (byte) $34 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Z = (byte) $c +(const byte) LIGHT_BLUE = (byte) $e +(const byte) LIGHT_GREEN = (byte) $d (const byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } -(const byte) ORANGE = (number) 8 +(const byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } (const byte*) PIECES_COLORS_1[] = { (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED, (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED, (const byte) BLUE, (const byte) GREEN, (const byte) PURPLE, (const byte) BLUE, (const byte) RED, (const byte) LIGHT_GREEN, (const byte) RED, (const byte) BLUE, (const byte) LIGHT_BLUE, (const byte) RED } @@ -55,18 +55,18 @@ (const byte*) PIECES_NEXT_CHARS[] = { (byte) $63, (byte) $64, (byte) $a4, (byte) $64, (byte) $63, (byte) $63, (byte) $a4 } (const byte*) PIECES_START_X[] = { (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4, (byte) 4 } (const byte*) PIECES_START_Y[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1 } -(const byte*) PIECE_I[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0 } -(const byte*) PIECE_J[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_L[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_O[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_S[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_T[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte*) PIECE_Z[(number) 4*(number) 4*(number) 4] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } -(const byte) PINK = (number) $a +(const byte*) PIECE_I[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0 } +(const byte*) PIECE_J[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_L[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_O[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_S[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_T[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) PIECE_Z[(number) $40] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte) PINK = (byte) $a (const byte*) PLAYFIELD_CHARSET = (byte*) 10240 (const byte*) PLAYFIELD_COLORS_ORIGINAL = (byte*) 7168 -(const byte) PLAYFIELD_COLS = (number) $a -(const byte) PLAYFIELD_LINES = (number) $16 +(const byte) PLAYFIELD_COLS = (byte) $a +(const byte) PLAYFIELD_LINES = (byte) $16 (const byte*) PLAYFIELD_SCREEN_1 = (byte*) 1024 (const byte*) PLAYFIELD_SCREEN_2 = (byte*) 11264 (const byte*) PLAYFIELD_SCREEN_ORIGINAL = (byte*) 6144 @@ -75,13 +75,13 @@ (const byte*) PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2+(const word) SPRITE_PTRS (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 -(const byte) PURPLE = (number) 4 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 +(const byte) PURPLE = (byte) 4 (const byte*) RASTER = (byte*) 53266 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const dword*) SCORE_BASE_BCD[] = { (dword) 0, (dword) $40, (dword) $100, (dword) $300, (dword) $1200 } -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 @@ -89,20 +89,20 @@ (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 (const byte*) SPRITES_EXPAND_Y = (byte*) 53271 -(const byte) SPRITES_FIRST_YPOS = (number) $31 +(const byte) SPRITES_FIRST_YPOS = (byte) $31 (const byte*) SPRITES_MC = (byte*) 53276 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_ECM = (number) $40 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_ECM = (byte) $40 +(const byte) VIC_RSEL = (byte) 8 (byte) current_movedown_counter (byte) current_movedown_counter#12 current_movedown_counter zp[1]:11 0.5333333333333333 (byte) current_movedown_counter#14 current_movedown_counter zp[1]:11 3.081081081081081 (byte) current_movedown_counter#16 current_movedown_counter zp[1]:11 8.769230769230768 -(const byte) current_movedown_fast = (number) $a +(const byte) current_movedown_fast = (byte) $a (byte) current_movedown_slow (byte) current_movedown_slow#1 current_movedown_slow zp[1]:7 0.17391304347826086 (byte) current_movedown_slow#10 current_movedown_slow zp[1]:7 4.0 @@ -630,7 +630,7 @@ (label) render_bcd::@1 (label) render_bcd::@2 (label) render_bcd::@return -(const byte) render_bcd::ZERO_CHAR = (number) $35 +(const byte) render_bcd::ZERO_CHAR = (byte) $35 (byte) render_bcd::bcd (byte) render_bcd::bcd#0 reg byte x 4.0 (byte) render_bcd::bcd#1 reg byte x 4.0 diff --git a/src/test/ref/complex/xmega65/xmega65.log b/src/test/ref/complex/xmega65/xmega65.log index 1ccb3cd9a..96b47489d 100644 --- a/src/test/ref/complex/xmega65/xmega65.log +++ b/src/test/ref/complex/xmega65/xmega65.log @@ -153,11 +153,11 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) COLS = (byte*)(number) $d800 -(const byte) JMP = (number) $4c +(const byte) JMP = (byte) $4c (const byte*) MESSAGE[] = (string) "hello world!" -(const byte) NOP = (number) $ea +(const byte) NOP = (byte) $ea (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $400 (const struct SysCall*) SYSCALLS[] = { { xjmp: (const byte) JMP, syscall: &(void()) syscall1(), xnop: (const byte) NOP }, { xjmp: (const byte) JMP, syscall: &(void()) syscall2(), xnop: (const byte) NOP } } @@ -166,7 +166,7 @@ SYMBOL TABLE SSA (byte) SysCall::xjmp (byte) SysCall::xnop (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) main() (bool~) main::$2 (bool~) main::$3 @@ -1131,11 +1131,11 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) COLS = (byte*) 55296 -(const byte) JMP = (number) $4c +(const byte) JMP = (byte) $4c (const byte*) MESSAGE[] = (string) "hello world!" -(const byte) NOP = (number) $ea +(const byte) NOP = (byte) $ea (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const struct SysCall*) SYSCALLS[] = { { xjmp: (const byte) JMP, syscall: &(void()) syscall1(), xnop: (const byte) NOP }, { xjmp: (const byte) JMP, syscall: &(void()) syscall2(), xnop: (const byte) NOP } } @@ -1144,7 +1144,7 @@ FINAL SYMBOL TABLE (byte) SysCall::xjmp (byte) SysCall::xnop (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/complex/xmega65/xmega65.sym b/src/test/ref/complex/xmega65/xmega65.sym index 01d9bf1b4..907ae40d9 100644 --- a/src/test/ref/complex/xmega65/xmega65.sym +++ b/src/test/ref/complex/xmega65/xmega65.sym @@ -2,11 +2,11 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) COLS = (byte*) 55296 -(const byte) JMP = (number) $4c +(const byte) JMP = (byte) $4c (const byte*) MESSAGE[] = (string) "hello world!" -(const byte) NOP = (number) $ea +(const byte) NOP = (byte) $ea (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const struct SysCall*) SYSCALLS[] = { { xjmp: (const byte) JMP, syscall: &(void()) syscall1(), xnop: (const byte) NOP }, { xjmp: (const byte) JMP, syscall: &(void()) syscall2(), xnop: (const byte) NOP } } @@ -15,7 +15,7 @@ (byte) SysCall::xjmp (byte) SysCall::xnop (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/condition-integer-0.log b/src/test/ref/condition-integer-0.log index 9a3365e8f..9966f0bad 100644 --- a/src/test/ref/condition-integer-0.log +++ b/src/test/ref/condition-integer-0.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (bool~) main::$0 ← ! (number) 0!=(number) 0 if((bool~) main::$0) goto main::@1 to:main::@3 @@ -150,20 +150,15 @@ SYMBOL TABLE SSA (byte) main::idx#8 (byte) main::idx#9 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$6 ← (number) 0 != (byte) main::i#2 Adding number conversion cast (unumber) 0 in (bool~) main::$7 ← (number) 0 != (word) main::i1#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [18] (bool~) main::$2 ← (byte) 0 == (byte) main::i#2 from [17] (bool~) main::$6 ← (byte) 0 != (byte) main::i#2 Inversing boolean not [33] (bool~) main::$4 ← (byte) 0 == (word) main::i1#2 from [32] (bool~) main::$7 ← (byte) 0 != (word) main::i1#2 diff --git a/src/test/ref/condition-integer-1.log b/src/test/ref/condition-integer-1.log index 3517dc568..6f815d705 100644 --- a/src/test/ref/condition-integer-1.log +++ b/src/test/ref/condition-integer-1.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (bool~) main::$0 ← ! !(number) 0!=(number) 0 if((bool~) main::$0) goto main::@1 to:main::@3 @@ -154,20 +154,15 @@ SYMBOL TABLE SSA (byte) main::idx#8 (byte) main::idx#9 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$8 ← (number) 0 != (byte) main::i#2 Adding number conversion cast (unumber) 0 in (bool~) main::$9 ← (number) 0 != (word) main::i1#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [18] (bool~) main::$2 ← (byte) 0 == (byte) main::i#2 from [17] (bool~) main::$8 ← (byte) 0 != (byte) main::i#2 Inversing boolean not [19] (bool~) main::$3 ← (byte) 0 != (byte) main::i#2 from [18] (bool~) main::$2 ← (byte) 0 == (byte) main::i#2 diff --git a/src/test/ref/condition-integer-2.log b/src/test/ref/condition-integer-2.log index 616e65551..e543273ec 100644 --- a/src/test/ref/condition-integer-2.log +++ b/src/test/ref/condition-integer-2.log @@ -11,13 +11,13 @@ Culled Empty Block (label) main::@14 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) idx#0 ← (number) 0 + (byte) idx#0 ← (byte) 0 to:@1 (void()) main() main: scope:[main] from @1 (byte) idx#18 ← phi( @1/(byte) idx#17 ) - (byte) main::i#0 ← (number) 2 + (byte) main::i#0 ← (byte) 2 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) idx#15 ← phi( main/(byte) idx#18 main::@2/(byte) idx#1 ) @@ -36,7 +36,7 @@ main::@3: scope:[main] from main::@1 (byte) idx#9 ← phi( main::@1/(byte) idx#15 ) *((const byte*) SCREEN + (byte) idx#9) ← (byte) ' ' (byte) idx#2 ← ++ (byte) idx#9 - (byte) main::j#0 ← (number) 3 + (byte) main::j#0 ← (byte) 3 to:main::@7 main::@7: scope:[main] from main::@3 main::@8 (byte) idx#16 ← phi( main::@3/(byte) idx#2 main::@8/(byte) idx#3 ) @@ -55,7 +55,7 @@ main::@9: scope:[main] from main::@7 (byte) idx#11 ← phi( main::@7/(byte) idx#16 ) *((const byte*) SCREEN + (byte) idx#11) ← (byte) ' ' (byte) idx#4 ← ++ (byte) idx#11 - (byte) main::k#0 ← (number) 2 + (byte) main::k#0 ← (byte) 2 to:main::@13 main::@13: scope:[main] from main::@13 main::@9 (byte) idx#12 ← phi( main::@13/(byte) idx#5 main::@9/(byte) idx#4 ) @@ -134,34 +134,17 @@ SYMBOL TABLE SSA (byte) main::k#1 (byte) main::k#2 -Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 -Adding number conversion cast (unumber) 2 in (byte) main::i#0 ← (number) 2 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (number) 0 != (byte) main::i#2 -Adding number conversion cast (unumber) 3 in (byte) main::j#0 ← (number) 3 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (number) 0 != (byte) main::j#1 -Adding number conversion cast (unumber) 2 in (byte) main::k#0 ← (number) 2 Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (number) 0 != (byte) main::k#1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 2 -Inlining cast (byte) main::j#0 ← (unumber)(number) 3 -Inlining cast (byte) main::k#0 ← (unumber)(number) 2 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 2 Simplifying constant integer cast 0 -Simplifying constant integer cast 3 -Simplifying constant integer cast 0 -Simplifying constant integer cast 2 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/condition-integer-3.log b/src/test/ref/condition-integer-3.log index 785d94ad2..aa2fa6510 100644 --- a/src/test/ref/condition-integer-3.log +++ b/src/test/ref/condition-integer-3.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (signed byte) main::i#0 ← (signed byte) -2 to:main::@1 main::@1: scope:[main] from main main::@4 @@ -83,16 +83,11 @@ SYMBOL TABLE SSA (byte) main::j (byte) main::j#0 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (number) 0 != (signed byte) main::i#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::idx#3 = (byte) main::idx#5 (byte) main::idx#4 diff --git a/src/test/ref/condition-integer-4.log b/src/test/ref/condition-integer-4.log index d1b684983..9e40fe973 100644 --- a/src/test/ref/condition-integer-4.log +++ b/src/test/ref/condition-integer-4.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 @@ -140,7 +140,6 @@ SYMBOL TABLE SSA (byte) main::idx#8 (byte) main::idx#9 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) main::$13 ← (number) 0 != (unumber~) main::$0 @@ -160,10 +159,7 @@ Adding number conversion cast (unumber) main::$9 in (number~) main::$9 ← (byte Adding number conversion cast (unumber) $28*2 in *((const byte*) SCREEN+(number) $28*(number) 2 + (byte) main::idx#4) ← (byte) '+' Adding number conversion cast (unumber) $28*3 in *((const byte*) SCREEN+(number) $28*(number) 3 + (byte) main::idx#6) ← (byte) '+' Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -173,7 +169,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/const-declaration.log b/src/test/ref/const-declaration.log index e82f3fdb7..aafc0fadb 100644 --- a/src/test/ref/const-declaration.log +++ b/src/test/ref/const-declaration.log @@ -25,10 +25,10 @@ SYMBOL TABLE SSA (label) @end (const byte*) BODY1 = (const byte*) SCREEN+(const byte) MARGIN_TOP*(const byte) LINE_LEN+(const byte) MARGIN_LEFT (const byte*) BODY2 = (const byte*) SCREEN+(const word) OFFSET -(const byte) LINE_LEN = (number) $28 -(const byte) MARGIN_LEFT = (number) 4 -(const byte) MARGIN_TOP = (number) 4 -(const word) OFFSET = (number) $28*(number) 5+(number) 5 +(const byte) LINE_LEN = (byte) $28 +(const byte) MARGIN_LEFT = (byte) 4 +(const byte) MARGIN_TOP = (byte) 4 +(const word) OFFSET = (word)(number) $28*(number) 5+(number) 5 (const byte*) SCREEN = (byte*)(number) $400 (void()) main() (label) main::@return @@ -205,10 +205,10 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BODY1 = (const byte*) SCREEN+(const byte) MARGIN_TOP*(const byte) LINE_LEN+(const byte) MARGIN_LEFT (const byte*) BODY2 = (const byte*) SCREEN+(const word) OFFSET -(const byte) LINE_LEN = (number) $28 -(const byte) MARGIN_LEFT = (number) 4 -(const byte) MARGIN_TOP = (number) 4 -(const word) OFFSET = (number) $28*(number) 5+(number) 5 +(const byte) LINE_LEN = (byte) $28 +(const byte) MARGIN_LEFT = (byte) 4 +(const byte) MARGIN_TOP = (byte) 4 +(const word) OFFSET = (word)(number) $28*(number) 5+(number) 5 (const byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@return diff --git a/src/test/ref/const-declaration.sym b/src/test/ref/const-declaration.sym index 0c213b748..248d8a04e 100644 --- a/src/test/ref/const-declaration.sym +++ b/src/test/ref/const-declaration.sym @@ -3,10 +3,10 @@ (label) @end (const byte*) BODY1 = (const byte*) SCREEN+(const byte) MARGIN_TOP*(const byte) LINE_LEN+(const byte) MARGIN_LEFT (const byte*) BODY2 = (const byte*) SCREEN+(const word) OFFSET -(const byte) LINE_LEN = (number) $28 -(const byte) MARGIN_LEFT = (number) 4 -(const byte) MARGIN_TOP = (number) 4 -(const word) OFFSET = (number) $28*(number) 5+(number) 5 +(const byte) LINE_LEN = (byte) $28 +(const byte) MARGIN_LEFT = (byte) 4 +(const byte) MARGIN_TOP = (byte) 4 +(const word) OFFSET = (word)(number) $28*(number) 5+(number) 5 (const byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@return diff --git a/src/test/ref/const-param.log b/src/test/ref/const-param.log index a3ff83df4..a6de6b28a 100644 --- a/src/test/ref/const-param.log +++ b/src/test/ref/const-param.log @@ -72,7 +72,7 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@3 (label) main::@return -(const byte) main::reverse = (number) $80 +(const byte) main::reverse = (byte) $80 (const byte*) main::screen = (byte*)(number) $400 (byte()) sum((byte) sum::a , (byte) sum::b) (byte~) sum::$0 @@ -517,7 +517,7 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@3 (label) main::@return -(const byte) main::reverse = (number) $80 +(const byte) main::reverse = (byte) $80 (const byte*) main::screen = (byte*) 1024 (byte()) sum((byte) sum::a , (byte) sum::b) (label) sum::@return diff --git a/src/test/ref/const-param.sym b/src/test/ref/const-param.sym index 2e6d169c3..2b8a3a5cb 100644 --- a/src/test/ref/const-param.sym +++ b/src/test/ref/const-param.sym @@ -9,7 +9,7 @@ (label) main::@2 (label) main::@3 (label) main::@return -(const byte) main::reverse = (number) $80 +(const byte) main::reverse = (byte) $80 (const byte*) main::screen = (byte*) 1024 (byte()) sum((byte) sum::a , (byte) sum::b) (label) sum::@return diff --git a/src/test/ref/const-word-pointer.log b/src/test/ref/const-word-pointer.log index 72052a4dc..72b6a415f 100644 --- a/src/test/ref/const-word-pointer.log +++ b/src/test/ref/const-word-pointer.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (word) main::w#0 ← (number) $d03 + (word) main::w#0 ← (word) $d03 (byte~) main::$0 ← < *((const word*) main::wp) *((const byte*) main::screen + (number) 0) ← (byte~) main::$0 (byte~) main::$1 ← > *((const word*) main::wp) @@ -45,25 +45,21 @@ SYMBOL TABLE SSA (word) main::w#0 (const word*) main::wp = &(word) main::w -Adding number conversion cast (unumber) $d03 in (word) main::w#0 ← (number) $d03 Adding number conversion cast (unumber) 0 in *((const byte*) main::screen + (number) 0) ← (byte~) main::$0 Adding number conversion cast (unumber) 1 in *((const byte*) main::screen + (number) 1) ← (byte~) main::$1 Adding number conversion cast (unumber) $210c in *((const word*) main::wp) ← (number) $210c Adding number conversion cast (unumber) 2 in *((const byte*) main::screen + (number) 2) ← (byte~) main::$2 Adding number conversion cast (unumber) 3 in *((const byte*) main::screen + (number) 3) ← (byte~) main::$3 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) main::w#0 ← (unumber)(number) $d03 Inlining cast *((const word*) main::wp) ← (unumber)(number) $210c Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $d03 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $210c Simplifying constant integer cast 2 Simplifying constant integer cast 3 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (word) $d03 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $210c diff --git a/src/test/ref/constant-string-concat-0.log b/src/test/ref/constant-string-concat-0.log index fa6f36466..2f9d84c28 100644 --- a/src/test/ref/constant-string-concat-0.log +++ b/src/test/ref/constant-string-concat-0.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -50,17 +50,12 @@ SYMBOL TABLE SSA (byte) main::i#3 (const byte*) main::msg[] = (string) "camelot" -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← *((const byte*) main::msg + (byte) main::i#2) != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/constantmin.log b/src/test/ref/constantmin.log index 7ef613055..9b0c852a6 100644 --- a/src/test/ref/constantmin.log +++ b/src/test/ref/constantmin.log @@ -47,7 +47,7 @@ SYMBOL TABLE SSA (byte*) BGCOL#2 (const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) STAR = (number) $51 +(const byte) STAR = (byte) $51 (const byte*) VIC = (byte*)(number) $d000 (void()) main() (bool~) main::$0 @@ -334,7 +334,7 @@ FINAL SYMBOL TABLE (byte*) BGCOL (const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 -(const byte) STAR = (number) $51 +(const byte) STAR = (byte) $51 (const byte*) VIC = (byte*) 53248 (void()) main() (label) main::@1 diff --git a/src/test/ref/constantmin.sym b/src/test/ref/constantmin.sym index 58c6726a3..1e2128300 100644 --- a/src/test/ref/constantmin.sym +++ b/src/test/ref/constantmin.sym @@ -4,7 +4,7 @@ (byte*) BGCOL (const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 -(const byte) STAR = (number) $51 +(const byte) STAR = (byte) $51 (const byte*) VIC = (byte*) 53248 (void()) main() (label) main::@1 diff --git a/src/test/ref/constants.log b/src/test/ref/constants.log index 7c8467974..c79d06c8c 100644 --- a/src/test/ref/constants.log +++ b/src/test/ref/constants.log @@ -507,12 +507,12 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c) (bool~) assert_byte::$2 (label) assert_byte::@1 @@ -2969,12 +2969,12 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c) (label) assert_byte::@1 (label) assert_byte::@2 diff --git a/src/test/ref/constants.sym b/src/test/ref/constants.sym index bcbc3b735..09beeae56 100644 --- a/src/test/ref/constants.sym +++ b/src/test/ref/constants.sym @@ -2,12 +2,12 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c) (label) assert_byte::@1 (label) assert_byte::@2 diff --git a/src/test/ref/cordic-atan2-16-ref.cfg b/src/test/ref/cordic-atan2-16-ref.cfg index 940272812..b9372184a 100644 --- a/src/test/ref/cordic-atan2-16-ref.cfg +++ b/src/test/ref/cordic-atan2-16-ref.cfg @@ -21,7 +21,7 @@ main::@6: scope:[main] from main::toD0181 to:main::@1 main::@1: scope:[main] from main::@3 main::@6 [8] (byte*) main::screen#5 ← phi( main::@6/(const byte*) SCREEN main::@3/(byte*) main::screen#1 ) - [8] (word) main::diff_sum#7 ← phi( main::@6/(byte) 0 main::@3/(word) main::diff_sum#1 ) + [8] (word) main::diff_sum#7 ← phi( main::@6/(word) 0 main::@3/(word) main::diff_sum#1 ) [8] (byte*) main::screen_ref#5 ← phi( main::@6/(const byte*) SCREEN_REF main::@3/(byte*) main::screen_ref#1 ) [8] (signed byte) main::y#4 ← phi( main::@6/(signed byte) -$c main::@3/(signed byte) main::y#1 ) to:main::@2 @@ -144,7 +144,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [63] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [64] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [64] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [64] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [64] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [64] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index ff43fae69..178456e39 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -108,7 +108,7 @@ init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex:: (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) (byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - (byte) init_font_hex::idx#0 ← (number) 0 + (byte) init_font_hex::idx#0 ← (byte) 0 *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 (byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0 (byte) init_font_hex::i#0 ← (byte) 0 @@ -205,7 +205,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 ) (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 - (word) atan2_16::angle#0 ← (number) 0 + (word) atan2_16::angle#0 ← (word) 0 (byte) atan2_16::i#0 ← (byte) 0 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6 @@ -479,7 +479,7 @@ main::@11: scope:[main] from main::toD0181_@return *((const byte*) D018) ← (byte~) main::$1 (byte*) main::screen#0 ← (const byte*) SCREEN (byte*) main::screen_ref#0 ← (const byte*) SCREEN_REF - (word) main::diff_sum#0 ← (number) 0 + (word) main::diff_sum#0 ← (word) 0 (signed byte) main::y#0 ← (signed byte) -$c to:main::@1 main::@1: scope:[main] from main::@11 main::@3 @@ -630,9 +630,9 @@ SYMBOL TABLE SSA (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -1138,111 +1136,26 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) 0 in (word) main::diff_sum#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) main::$10 ← (word) main::angle_w#0 + (number) $80 Adding number conversion cast (unumber) main::$10 in (number~) main::$10 ← (word) main::angle_w#0 + (unumber)(number) $80 Adding number conversion cast (unumber) main::$11 in (number~) main::$11 ← > (unumber~) main::$10 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (word) main::diff_sum#0 ← (unumber)(number) 0 Inlining cast (byte~) main::$3 ← (byte)(signed byte) main::x#2 Inlining cast (signed word~) main::$5 ← (signed word)(word~) main::$4 Inlining cast (byte~) main::$6 ← (byte)(signed byte) main::y#2 Inlining cast (signed word~) main::$8 ← (signed word)(word~) main::$7 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $13 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -1253,7 +1166,6 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -1274,7 +1186,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 Simplifying constant integer cast (byte~) main::$3 Simplifying constant integer cast 0 Simplifying constant integer cast (byte~) main::$6 @@ -1283,7 +1194,6 @@ Simplifying constant integer cast $80 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -1293,7 +1203,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 5 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -1314,7 +1223,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9 @@ -1599,9 +1507,9 @@ Inlining constant with var siblings (const byte*) print_char_cursor#0 Constant inlined main::screen#0 = (const byte*) SCREEN Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET -Constant inlined main::diff_sum#0 = (byte) 0 +Constant inlined main::diff_sum#0 = (word) 0 Constant inlined init_font_hex::proto_hi#0 = (const byte*) FONT_HEX_PROTO -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET Constant inlined init_font_hex::c1#0 = (byte) 0 Constant inlined main::toD0181_$7 = >(word)(const byte*) CHARSET/(byte) 4&(byte) $f @@ -1789,7 +1697,7 @@ main::@6: scope:[main] from main::toD0181 to:main::@1 main::@1: scope:[main] from main::@3 main::@6 [8] (byte*) main::screen#5 ← phi( main::@6/(const byte*) SCREEN main::@3/(byte*) main::screen#1 ) - [8] (word) main::diff_sum#7 ← phi( main::@6/(byte) 0 main::@3/(word) main::diff_sum#1 ) + [8] (word) main::diff_sum#7 ← phi( main::@6/(word) 0 main::@3/(word) main::diff_sum#1 ) [8] (byte*) main::screen_ref#5 ← phi( main::@6/(const byte*) SCREEN_REF main::@3/(byte*) main::screen_ref#1 ) [8] (signed byte) main::y#4 ← phi( main::@6/(signed byte) -$c main::@3/(signed byte) main::y#1 ) to:main::@2 @@ -1912,7 +1820,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [63] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [64] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [64] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [64] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [64] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [64] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -2399,7 +2307,7 @@ main: { sta.z screen lda #>SCREEN sta.z screen+1 - // [8] phi (word) main::diff_sum#7 = (byte) 0 [phi:main::@6->main::@1#1] -- vwuz1=vbuc1 + // [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z diff_sum lda #>0 @@ -2777,7 +2685,7 @@ atan2_16: { __b6: // [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [64] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [64] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -3538,7 +3446,7 @@ main: { sta.z screen lda #>SCREEN sta.z screen+1 - // [8] phi (word) main::diff_sum#7 = (byte) 0 [phi:main::@6->main::@1#1] -- vwuz1=vbuc1 + // [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z diff_sum lda #>0 @@ -3863,7 +3771,7 @@ atan2_16: { __b6: // [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [64] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [64] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -4453,7 +4361,7 @@ FINAL SYMBOL TABLE (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iSCREEN sta.z screen+1 - // [8] phi (word) main::diff_sum#7 = (byte) 0 [phi:main::@6->main::@1#1] -- vwuz1=vbuc1 + // [8] phi (word) main::diff_sum#7 = (word) 0 [phi:main::@6->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z diff_sum sta.z diff_sum+1 @@ -5061,7 +4969,7 @@ atan2_16: { // atan2_16::@6 __b6: // [64] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [64] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [64] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 diff --git a/src/test/ref/cordic-atan2-16-ref.sym b/src/test/ref/cordic-atan2-16-ref.sym index 8fd872761..d0785990d 100644 --- a/src/test/ref/cordic-atan2-16-ref.sym +++ b/src/test/ref/cordic-atan2-16-ref.sym @@ -6,7 +6,7 @@ (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -800,11 +798,9 @@ Adding number conversion cast (unumber) $80 in (number~) main::$9 ← (word) mai Adding number conversion cast (unumber) main::$9 in (number~) main::$9 ← (word) main::angle_w#0 + (unumber)(number) $80 Adding number conversion cast (unumber) main::$10 in (number~) main::$10 ← > (unumber~) main::$9 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (byte~) main::$2 ← (byte)(signed byte) main::x#2 @@ -812,93 +808,12 @@ Inlining cast (signed word~) main::$4 ← (signed word)(word~) main::$3 Inlining cast (byte~) main::$5 ← (byte)(signed byte) main::y#2 Inlining cast (signed word~) main::$7 ← (signed word)(word~) main::$6 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $13 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -909,7 +824,6 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -935,7 +849,6 @@ Simplifying constant integer cast $80 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -945,7 +858,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 5 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -1211,7 +1123,7 @@ Constant inlined main::x#0 = (signed byte) -$13 Constant inlined main::y#0 = (signed byte) -$c Constant inlined main::toD0181_$6 = >(word)(const byte*) CHARSET/(byte) 4 Constant inlined init_font_hex::i#0 = (byte) 0 -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined main::toD0181_$5 = >(word)(const byte*) CHARSET Constant inlined main::toD0181_$4 = (word)(const byte*) CHARSET Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4 @@ -1409,7 +1321,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [31] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [32] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [32] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [32] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [32] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [32] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -1976,7 +1888,7 @@ atan2_16: { __b6: // [32] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [32] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [32] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -2814,7 +2726,7 @@ atan2_16: { __b6: // [32] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [32] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [32] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -3367,7 +3279,7 @@ FINAL SYMBOL TABLE (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iatan2_16::@10] - // [32] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [32] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 diff --git a/src/test/ref/cordic-atan2-16.sym b/src/test/ref/cordic-atan2-16.sym index 69e96116d..7b4363833 100644 --- a/src/test/ref/cordic-atan2-16.sym +++ b/src/test/ref/cordic-atan2-16.sym @@ -6,7 +6,7 @@ (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -898,8 +896,6 @@ Adding number conversion cast (unumber) $800 in (bool~) main::$4 ← (byte*) mai Adding number conversion cast (unumber) 0 in *((byte*) main::clear_char#3) ← (number) 0 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c -Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2 @@ -917,105 +913,20 @@ Adding number conversion cast (unumber) init_angle_screen::$14 in (number~) init Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28 Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast *((byte*) main::clear_char#3) ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -1026,7 +937,6 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -1047,8 +957,6 @@ Simplifying constant integer cast $f Simplifying constant integer cast $ff Simplifying constant integer cast $800 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -1062,7 +970,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -1072,7 +979,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 5 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -1094,8 +1000,6 @@ Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $800 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -1371,7 +1275,7 @@ Constant inlined main::clear_char#0 = (const byte*) CHARSET Constant inlined init_font_hex::proto_hi#0 = (const byte*) FONT_HEX_PROTO Constant inlined init_angle_screen::y#0 = (byte) 0 Constant inlined init_angle_screen::x#0 = (byte) 0 -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined init_angle_screen::screen_bottomline#0 = (const byte*) SCREEN+(word)(number) $28*(number) $c Constant inlined init_font_hex::charset#1 = (const byte*) CHARSET Constant inlined init_angle_screen::screen#0 = (const byte*) SCREEN @@ -1620,7 +1524,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [49] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [50] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [50] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [50] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [50] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [50] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -2356,7 +2260,7 @@ atan2_16: { __b6: // [50] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [50] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [50] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -3364,7 +3268,7 @@ atan2_16: { __b6: // [50] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [50] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [50] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -3934,7 +3838,7 @@ FINAL SYMBOL TABLE (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iatan2_16::@10] - // [50] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [50] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 diff --git a/src/test/ref/cordic-atan2-clear.sym b/src/test/ref/cordic-atan2-clear.sym index 7bb975d42..7a31e6ff8 100644 --- a/src/test/ref/cordic-atan2-clear.sym +++ b/src/test/ref/cordic-atan2-clear.sym @@ -5,7 +5,7 @@ (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$5 ← (signed byte) atan2_8::x#1 > (number) 0 -Adding number conversion cast (unumber) 0 in (byte) atan2_8::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$17 ← (signed byte) atan2_8::yi#3 == (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_8::$21 ← (signed byte) atan2_8::yi#4 > (number) 0 Adding number conversion cast (unumber) 2 in (number~) atan2_8::$10 ← (byte) atan2_8::angle#6 / (number) 2 @@ -638,101 +636,18 @@ Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (un Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 -Inlining cast (byte) atan2_8::angle#0 ← (unumber)(number) 0 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $13 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -744,7 +659,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -757,7 +671,6 @@ Simplifying constant integer cast $f Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -767,7 +680,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 5 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 @@ -2777,7 +2689,7 @@ FINAL SYMBOL TABLE (const byte*) COLS = (byte*) 55296 (const byte*) CORDIC_ATAN2_ANGLES_8[(const byte) CORDIC_ITERATIONS_8] = kickasm {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 }} -(const byte) CORDIC_ITERATIONS_8 = (number) 8 +(const byte) CORDIC_ITERATIONS_8 = (byte) 8 (const byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) SCREEN = (byte*) 10240 diff --git a/src/test/ref/cordic-atan2.sym b/src/test/ref/cordic-atan2.sym index e42b5152e..477824ffa 100644 --- a/src/test/ref/cordic-atan2.sym +++ b/src/test/ref/cordic-atan2.sym @@ -5,7 +5,7 @@ (const byte*) COLS = (byte*) 55296 (const byte*) CORDIC_ATAN2_ANGLES_8[(const byte) CORDIC_ITERATIONS_8] = kickasm {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2 }} -(const byte) CORDIC_ITERATIONS_8 = (number) 8 +(const byte) CORDIC_ITERATIONS_8 = (byte) 8 (const byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) SCREEN = (byte*) 10240 diff --git a/src/test/ref/cpu-6502.log b/src/test/ref/cpu-6502.log index bf3623b1a..ccfd4b36a 100644 --- a/src/test/ref/cpu-6502.log +++ b/src/test/ref/cpu-6502.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::c#0 ← (number) 0 + (byte) main::c#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::c#3 ← phi( main/(byte) main::c#0 main::@4/(byte) main::c#1 ) @@ -67,23 +67,18 @@ SYMBOL TABLE SSA (byte) main::c#6 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::c#0 ← (number) 0 Adding number conversion cast (unumber) $64 in (bool~) main::$0 ← (byte) main::c#3 < (number) $64 Adding number conversion cast (unumber) 4 in (number~) main::$1 ← (byte) main::c#4 & (number) 4 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::c#4 & (unumber)(number) 4 Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (unumber~) main::$1 == (number) 0 Adding number conversion cast (unumber) 5 in (byte) main::c#2 ← (byte) main::c#6 + (number) 5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::c#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $64 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/declared-memory-var-3.log b/src/test/ref/declared-memory-var-3.log index b972543e0..622e51035 100644 --- a/src/test/ref/declared-memory-var-3.log +++ b/src/test/ref/declared-memory-var-3.log @@ -15,7 +15,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 (byte*~) main::$0 ← (byte*)(const struct foo*) main::barp + (const byte) OFFSET_STRUCT_FOO_THING1 *((const byte*) main::SCREEN + (byte) main::i#0) ← *((byte*~) main::$0) (byte) main::i#1 ← ++ (byte) main::i#0 @@ -54,15 +54,8 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Removing C-classic struct-unwound assignment [2] (struct foo) bar ← struct-unwound {*((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING1), *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING2)} Constant right-side identified [4] (byte*~) main::$0 ← (byte*)(const struct foo*) main::barp + (const byte) OFFSET_STRUCT_FOO_THING1 Constant right-side identified [7] (byte*~) main::$1 ← (byte*)(const struct foo*) main::barp + (const byte) OFFSET_STRUCT_FOO_THING2 diff --git a/src/test/ref/declared-memory-var-5.log b/src/test/ref/declared-memory-var-5.log index 8736e4d01..ebd4432f1 100644 --- a/src/test/ref/declared-memory-var-5.log +++ b/src/test/ref/declared-memory-var-5.log @@ -13,7 +13,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 *((const byte*) main::SCREEN + (byte) main::i#0) ← *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING1) (byte) main::i#1 ← ++ (byte) main::i#0 *((const byte*) main::SCREEN + (byte) main::i#1) ← *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING2) @@ -47,15 +47,8 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Removing C-classic struct-unwound assignment [2] (struct foo) bar ← struct-unwound {*((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING1), *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING2)} Constant (const byte) main::i#0 = 0 Successful SSA optimization Pass2ConstantIdentification diff --git a/src/test/ref/declared-memory-var-6.log b/src/test/ref/declared-memory-var-6.log index dc6b08224..f32431b7e 100644 --- a/src/test/ref/declared-memory-var-6.log +++ b/src/test/ref/declared-memory-var-6.log @@ -12,7 +12,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i#0 ← (number) 0 + (byte) i#0 ← (byte) 0 to:@2 (void()) main() @@ -182,15 +182,8 @@ SYMBOL TABLE SSA (byte) out::c#8 (byte) out::c#9 -Adding number conversion cast (unumber) 0 in (byte) i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) i#1 = (byte) i#15 Alias (byte) i#16 = (byte) i#2 Alias (byte) i#17 = (byte) i#3 diff --git a/src/test/ref/default-font.log b/src/test/ref/default-font.log index 090b01533..823d37a7c 100644 --- a/src/test/ref/default-font.log +++ b/src/test/ref/default-font.log @@ -73,7 +73,7 @@ main::@5: scope:[main] from main (byte*~) main::$1 ← (const byte*) SCREEN + (number) $28 (byte*~) main::$2 ← (byte*~) main::$1 + (number) 1 (byte*) main::screen#0 ← (byte*~) main::$2 - (byte) main::ch#0 ← (number) 0 + (byte) main::ch#0 ← (byte) 0 (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@3 main::@5 @@ -199,26 +199,22 @@ Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memse Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (unumber) $28 in (byte*~) main::$1 ← (const byte*) SCREEN + (number) $28 Adding number conversion cast (unumber) 1 in (byte*~) main::$2 ← (byte*~) main::$1 + (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::ch#0 ← (number) 0 Adding number conversion cast (unumber) $28-$10 in (byte*) main::screen#2 ← (byte*) main::screen#4 + (number) $28-(number) $10 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) main::ch#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Simplifying constant integer cast $28 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification diff --git a/src/test/ref/deref-to-derefidx-2.log b/src/test/ref/deref-to-derefidx-2.log index 9fa4f58de..ecf83980d 100644 --- a/src/test/ref/deref-to-derefidx-2.log +++ b/src/test/ref/deref-to-derefidx-2.log @@ -26,7 +26,7 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte) screen_idx#3 ← (number) 0 + (byte) screen_idx#3 ← (byte) 0 to:@2 (void()) print((byte*) print::m) @@ -94,17 +94,13 @@ SYMBOL TABLE SSA (byte) screen_idx#8 (byte) screen_idx#9 -Adding number conversion cast (unumber) 0 in (byte) screen_idx#3 ← (number) 0 Adding number conversion cast (unumber) 2 in (byte*~) print::$0 ← (byte*) print::m#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) screen_idx#3 ← (unumber)(number) 0 Inlining cast (word*~) print::$1 ← (word*)(byte*~) print::$0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) screen_idx#0 = (byte) screen_idx#7 diff --git a/src/test/ref/deref-to-derefidx.log b/src/test/ref/deref-to-derefidx.log index 3d70c322b..ce58db309 100644 --- a/src/test/ref/deref-to-derefidx.log +++ b/src/test/ref/deref-to-derefidx.log @@ -25,7 +25,7 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte) idx#3 ← (number) 0 + (byte) idx#3 ← (byte) 0 to:@2 (void()) print((byte*) print::m) @@ -88,16 +88,11 @@ SYMBOL TABLE SSA (byte*) print::m#1 (byte*) print::m#2 -Adding number conversion cast (unumber) 0 in (byte) idx#3 ← (number) 0 Adding number conversion cast (unumber) 2 in (byte*~) print::$0 ← (byte*) print::m#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#3 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#0 = (byte) idx#7 diff --git a/src/test/ref/derefidx-word-0.cfg b/src/test/ref/derefidx-word-0.cfg index 3e6b164cc..a47b0b8b4 100644 --- a/src/test/ref/derefidx-word-0.cfg +++ b/src/test/ref/derefidx-word-0.cfg @@ -13,7 +13,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 - [5] (word) main::i#2 ← phi( main/(byte) 0 main::@2/(word) main::i#1 ) + [5] (word) main::i#2 ← phi( main/(word) 0 main::@2/(word) main::i#1 ) [6] if((word) main::i#2<(word) $3e8) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 diff --git a/src/test/ref/derefidx-word-0.log b/src/test/ref/derefidx-word-0.log index f53ef6f5a..a7e794532 100644 --- a/src/test/ref/derefidx-word-0.log +++ b/src/test/ref/derefidx-word-0.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (word) main::i#0 ← (number) 0 + (word) main::i#0 ← (word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (word) main::i#2 ← phi( main/(word) main::i#0 main::@2/(word) main::i#1 ) @@ -48,18 +48,13 @@ SYMBOL TABLE SSA (word) main::i#3 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (word) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (bool~) main::$0 ← (word) main::i#2 < (number) $3e8 Adding number conversion cast (unumber) $28 in (word) main::i#1 ← (word) main::i#3 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions @@ -72,7 +67,7 @@ Successful SSA optimization Pass2ConstantIdentification De-inlining pointer[w] to *(pointer+w) [5] *((const byte*) main::screen + (word) main::i#2) ← (byte) 'a' Successful SSA optimization Pass2DeInlineWordDerefIdx Inlining constant with var siblings (const word) main::i#0 -Constant inlined main::i#0 = (byte) 0 +Constant inlined main::i#0 = (word) 0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 @@ -107,7 +102,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 - [5] (word) main::i#2 ← phi( main/(byte) 0 main::@2/(word) main::i#1 ) + [5] (word) main::i#2 ← phi( main/(word) 0 main::@2/(word) main::i#1 ) [6] if((word) main::i#2<(word) $3e8) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 @@ -168,7 +163,7 @@ main: { .label __1 = 4 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (word) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi (word) main::i#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -265,7 +260,7 @@ main: { .label __1 = 4 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (word) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi (word) main::i#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -382,7 +377,7 @@ main: { .label i = 2 .label __1 = 4 // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (word) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi (word) main::i#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 diff --git a/src/test/ref/double-import.log b/src/test/ref/double-import.log index 4b2bd3a7b..3889acd22 100644 --- a/src/test/ref/double-import.log +++ b/src/test/ref/double-import.log @@ -23,7 +23,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) main() (label) main::@return @@ -176,7 +176,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) main() (label) main::@return diff --git a/src/test/ref/double-import.sym b/src/test/ref/double-import.sym index 84f152c4e..77be2ea0c 100644 --- a/src/test/ref/double-import.sym +++ b/src/test/ref/double-import.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) main() (label) main::@return diff --git a/src/test/ref/encoding-literal-char.log b/src/test/ref/encoding-literal-char.log index 5620f5679..09ef7c211 100644 --- a/src/test/ref/encoding-literal-char.log +++ b/src/test/ref/encoding-literal-char.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 *((const byte*) screen + (byte) main::idx#0) ← (const byte) cpm (byte) main::idx#1 ← ++ (byte) main::idx#0 *((const byte*) screen + (byte) main::idx#1) ← (const byte) ccpu @@ -62,25 +62,21 @@ SYMBOL TABLE SSA (const byte*) ssm[] = (string) "A" (const byte*) ssu[] = (string) "A"su -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte) main::idx#5 ← (number) $28 Adding number conversion cast (unumber) 0 in *((const byte*) screen + (byte) main::idx#5) ← *((const byte*) spm + (number) 0) Adding number conversion cast (unumber) 0 in *((const byte*) screen + (byte) main::idx#6) ← *((const byte*) spu + (number) 0) Adding number conversion cast (unumber) 0 in *((const byte*) screen + (byte) main::idx#7) ← *((const byte*) ssm + (number) 0) Adding number conversion cast (unumber) 0 in *((const byte*) screen + (byte) main::idx#8) ← *((const byte*) ssu + (number) 0) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 Inlining cast (byte) main::idx#5 ← (unumber)(number) $28 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/enum-7.log b/src/test/ref/enum-7.log index 1065dd60b..8fa047784 100644 --- a/src/test/ref/enum-7.log +++ b/src/test/ref/enum-7.log @@ -2,7 +2,7 @@ Created struct value member variable (byte) main::button_color Created struct value member variable (byte) main::button_size Converted struct value to member variables (struct Button) main::button Adding struct value member variable copy (byte) main::button_color ← (const byte) RED -Adding struct value member variable copy (byte) main::button_size ← (byte)(number) $18 +Adding struct value member variable copy (byte) main::button_size ← (byte) $18 Replacing struct member reference (struct Button) main::button.color with member unwinding reference (byte) main::button_color Replacing struct member reference (struct Button) main::button.size with member unwinding reference (byte) main::button_size Identified constant variable (byte) main::button_color @@ -41,13 +41,12 @@ SYMBOL TABLE SSA (label) main::@return (const byte*) main::SCREEN = (byte*)(number) $400 (const byte) main::button_color = (const byte) RED -(const byte) main::button_size = (byte)(number) $18 +(const byte) main::button_size = (byte) $18 Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (const byte) main::button_color Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (const byte) main::button_size Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $18 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/enum-8.log b/src/test/ref/enum-8.log index 88ae416da..91d692b2a 100644 --- a/src/test/ref/enum-8.log +++ b/src/test/ref/enum-8.log @@ -2,7 +2,7 @@ Created struct value member variable (byte) main::button_color Created struct value member variable (byte) main::button_size Converted struct value to member variables (struct Button) main::button Adding struct value member variable copy (byte) main::button_color ← (const byte) RED -Adding struct value member variable copy (byte) main::button_size ← (byte)(number) $18 +Adding struct value member variable copy (byte) main::button_size ← (byte) $18 Replacing struct member reference (struct Button) main::button.color with member unwinding reference (byte) main::button_color Replacing struct member reference (struct Button) main::button.size with member unwinding reference (byte) main::button_size Identified constant variable (byte) main::button_color @@ -41,13 +41,12 @@ SYMBOL TABLE SSA (label) main::@return (const byte*) main::SCREEN = (byte*)(number) $400 (const byte) main::button_color = (const byte) RED -(const byte) main::button_size = (byte)(number) $18 +(const byte) main::button_size = (byte) $18 Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (const byte) main::button_color Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (const byte) main::button_size Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $18 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/euclid-problem-2.log b/src/test/ref/euclid-problem-2.log index 560943f60..a3e04c606 100644 --- a/src/test/ref/euclid-problem-2.log +++ b/src/test/ref/euclid-problem-2.log @@ -8,7 +8,7 @@ Culled Empty Block (label) euclid::@11 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) idx#0 ← (number) 0 + (byte) idx#0 ← (byte) 0 to:@2 (void()) main() @@ -192,7 +192,6 @@ SYMBOL TABLE SSA (label) main::@4 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (byte) euclid::a#0 ← (number) $80 Adding number conversion cast (unumber) 2 in (byte) euclid::b#0 ← (number) 2 Adding number conversion cast (unumber) $a9 in (byte) euclid::a#1 ← (number) $a9 @@ -202,7 +201,6 @@ Adding number conversion cast (unumber) $9b in (byte) euclid::b#2 ← (number) $ Adding number conversion cast (unumber) $63 in (byte) euclid::a#3 ← (number) $63 Adding number conversion cast (unumber) 3 in (byte) euclid::b#3 ← (number) 3 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast (byte) euclid::a#0 ← (unumber)(number) $80 Inlining cast (byte) euclid::b#0 ← (unumber)(number) 2 Inlining cast (byte) euclid::a#1 ← (unumber)(number) $a9 @@ -213,7 +211,6 @@ Inlining cast (byte) euclid::a#3 ← (unumber)(number) $63 Inlining cast (byte) euclid::b#3 ← (unumber)(number) 3 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 2 Simplifying constant integer cast $a9 @@ -223,7 +220,6 @@ Simplifying constant integer cast $9b Simplifying constant integer cast $63 Simplifying constant integer cast 3 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a9 diff --git a/src/test/ref/euclid-problem.log b/src/test/ref/euclid-problem.log index 088917647..e9ab973f5 100644 --- a/src/test/ref/euclid-problem.log +++ b/src/test/ref/euclid-problem.log @@ -11,8 +11,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::a#0 ← (number) $80 - (byte) main::b#0 ← (number) 2 + (byte) main::a#0 ← (byte) $80 + (byte) main::b#0 ← (byte) 2 to:main::@1 main::@1: scope:[main] from main main::@4 main::@8 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@4/(byte) main::b#4 main::@8/(byte) main::b#1 ) @@ -85,19 +85,8 @@ SYMBOL TABLE SSA (byte) main::b#4 (byte) main::b#5 -Adding number conversion cast (unumber) $80 in (byte) main::a#0 ← (number) $80 -Adding number conversion cast (unumber) 2 in (byte) main::b#0 ← (number) 2 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::a#0 ← (unumber)(number) $80 -Inlining cast (byte) main::b#0 ← (unumber)(number) 2 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $80 -Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 2 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::a#2 = (byte) main::a#3 (byte) main::a#4 (byte) main::a#5 (byte) main::a#6 Alias (byte) main::b#2 = (byte) main::b#3 (byte) main::b#4 (byte) main::b#5 Alias (byte) main::a#1 = (byte~) main::$3 diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index be9a9b52d..3408503b3 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -434,8 +434,8 @@ main::@return: scope:[main] from main::@3 to:@return @42: scope:[] from @17 (byte*) print_screen#45 ← phi( @17/(byte*) print_screen#0 ) - (signed byte) sx#2 ← (number) 0 - (signed byte) sy#2 ← (number) 0 + (signed byte) sx#2 ← (signed byte) 0 + (signed byte) sy#2 ← (signed byte) 0 to:@51 (void()) anim() @@ -633,7 +633,7 @@ debug_print_init::@16: scope:[debug_print_init] from debug_print_init::@15 debug_print_init::@17: scope:[debug_print_init] from debug_print_init::@16 (byte*~) debug_print_init::$28 ← (const byte*) SCREEN + (number) $10*(number) $28 (byte*) debug_print_init::at_line#0 ← (byte*~) debug_print_init::$28 - (byte) debug_print_init::c#0 ← (number) 4 + (byte) debug_print_init::c#0 ← (byte) 4 (byte*~) debug_print_init::$29 ← (const byte*) debug_print_init::COLS + (number) $10*(number) $28 (byte*) debug_print_init::at_cols#0 ← (byte*~) debug_print_init::$29 (byte) debug_print_init::i#0 ← (byte) 0 @@ -1000,7 +1000,7 @@ debug_print::@26: scope:[debug_print] from debug_print::print_sbyte_pos12 debug_print::@14: scope:[debug_print] from debug_print::@26 (byte*~) debug_print::$12 ← (const byte*) SCREEN + (number) $13*(number) $28 (byte*) debug_print::at_line#0 ← (byte*~) debug_print::$12 - (byte) debug_print::c#0 ← (number) 4 + (byte) debug_print::c#0 ← (byte) 4 (byte) debug_print::i#0 ← (byte) 0 to:debug_print::@1 debug_print::@1: scope:[debug_print] from debug_print::@14 debug_print::@32 @@ -1212,9 +1212,9 @@ SYMBOL TABLE SSA (const byte*) BORDERCOL = (byte*)(number) $d020 (const signed byte*) COSH = (const signed byte*) SINH+(number) $40 (const signed byte*) COSQ = (const signed byte*) SINQ+(number) $40 -(const byte) GREEN = (number) 5 -(const byte) LIGHT_BLUE = (number) $e -(const byte) LIGHT_GREY = (number) $f +(const byte) GREEN = (byte) 5 +(const byte) LIGHT_BLUE = (byte) $e +(const byte) LIGHT_GREY = (byte) $f (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 @@ -2068,15 +2068,15 @@ SYMBOL TABLE SSA (const signed byte*) xps[(number) 8] = { fill( 8, 0) } (const signed byte*) xr = (signed byte*)(number) $f0 (const signed byte*) xrs[(number) 8] = { fill( 8, 0) } -(const signed byte*) xs[(number) 8] = { (signed byte)(number) -$34, (signed byte)(number) -$34, (signed byte)(number) -$34, (signed byte)(number) 0, (signed byte)(number) 0, (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34 } +(const signed byte*) xs[(number) 8] = { (signed byte) -$34, (signed byte) -$34, (signed byte) -$34, (signed byte) 0, (signed byte) 0, (signed byte) $34, (signed byte) $34, (signed byte) $34 } (const signed byte*) yp = (signed byte*)(number) $f5 (const signed byte*) yps[(number) 8] = { fill( 8, 0) } (const signed byte*) yr = (signed byte*)(number) $f1 (const signed byte*) yrs[(number) 8] = { fill( 8, 0) } -(const signed byte*) ys[(number) 8] = { (signed byte)(number) -$34, (signed byte)(number) 0, (signed byte)(number) $34, (signed byte)(number) -$34, (signed byte)(number) $34, (signed byte)(number) -$34, (signed byte)(number) 0, (signed byte)(number) $34 } +(const signed byte*) ys[(number) 8] = { (signed byte) -$34, (signed byte) 0, (signed byte) $34, (signed byte) -$34, (signed byte) $34, (signed byte) -$34, (signed byte) 0, (signed byte) $34 } (const signed byte*) zr = (signed byte*)(number) $f2 (const signed byte*) zrs[(number) 8] = { fill( 8, 0) } -(const signed byte*) zs[(number) 8] = { (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34, (signed byte)(number) $34 } +(const signed byte*) zs[(number) 8] = { (signed byte) $34, (signed byte) $34, (signed byte) $34, (signed byte) $34, (signed byte) $34, (signed byte) $34, (signed byte) $34, (signed byte) $34 } Adding number conversion cast (unumber) $40 in Adding number conversion cast (unumber) $40 in @@ -2089,8 +2089,6 @@ Adding number conversion cast (unumber) $f in (number~) print_byte_at::$2 ← (b Adding number conversion cast (unumber) print_byte_at::$2 in (number~) print_byte_at::$2 ← (byte) print_byte_at::b#2 & (unumber)(number) $f Adding number conversion cast (unumber) 1 in (byte*~) print_byte_at::$3 ← (byte*) print_byte_at::at#2 + (number) 1 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (snumber) 0 in (signed byte) sx#2 ← (number) 0 -Adding number conversion cast (snumber) 0 in (signed byte) sy#2 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) anim::$0 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) $fe in (bool~) anim::$1 ← *((const byte*) RASTER) != (number) $fe Adding number conversion cast (unumber) $fd in (bool~) anim::$2 ← *((const byte*) RASTER) != (number) $fd @@ -2118,7 +2116,6 @@ Adding number conversion cast (unumber) $28*$16 in (byte*~) debug_print_init::$2 Adding number conversion cast (unumber) $28*$17 in (byte*~) debug_print_init::$24 ← (const byte*) SCREEN + (number) $28*(number) $17 Adding number conversion cast (unumber) $28*$18 in (byte*~) debug_print_init::$26 ← (const byte*) SCREEN + (number) $28*(number) $18 Adding number conversion cast (unumber) $10*$28 in (byte*~) debug_print_init::$28 ← (const byte*) SCREEN + (number) $10*(number) $28 -Adding number conversion cast (unumber) 4 in (byte) debug_print_init::c#0 ← (number) 4 Adding number conversion cast (unumber) $10*$28 in (byte*~) debug_print_init::$29 ← (const byte*) debug_print_init::COLS + (number) $10*(number) $28 Adding number conversion cast (unumber) $28*0 in (byte*~) debug_print_init::$30 ← (byte*) debug_print_init::at_line#1 + (number) $28*(number) 0 Adding number conversion cast (unumber) $28*1 in (byte*~) debug_print_init::$33 ← (byte*) debug_print_init::at_line#2 + (number) $28*(number) 1 @@ -2193,7 +2190,6 @@ Adding number conversion cast (unumber) $25 in (byte) debug_print::print_sbyte_p Adding number conversion cast (unumber) $28 in (number~) debug_print::print_sbyte_pos12_$0 ← (byte) debug_print::print_sbyte_pos12_row#1 * (number) $28 Adding number conversion cast (unumber) debug_print::print_sbyte_pos12_$0 in (number~) debug_print::print_sbyte_pos12_$0 ← (byte) debug_print::print_sbyte_pos12_row#1 * (unumber)(number) $28 Adding number conversion cast (unumber) $13*$28 in (byte*~) debug_print::$12 ← (const byte*) SCREEN + (number) $13*(number) $28 -Adding number conversion cast (unumber) 4 in (byte) debug_print::c#0 ← (number) 4 Adding number conversion cast (unumber) $28*0 in (byte*~) debug_print::$13 ← (byte*) debug_print::at_line#1 + (number) $28*(number) 0 Adding number conversion cast (unumber) $28*1 in (byte*~) debug_print::$16 ← (byte*) debug_print::at_line#2 + (number) $28*(number) 1 Adding number conversion cast (unumber) $28*2 in (byte*~) debug_print::$19 ← (byte*) debug_print::at_line#3 + (number) $28*(number) 2 @@ -2220,11 +2216,8 @@ Inlining cast (byte~) print_sbyte_at::$1 ← (byte)(signed byte) print_sbyte_at: Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast (word~) main::$1 ← (word)(const byte*) mulf_sqr1 Inlining cast (word~) main::$2 ← (word)(const byte*) mulf_sqr2 -Inlining cast (signed byte) sx#2 ← (snumber)(number) 0 -Inlining cast (signed byte) sy#2 ← (snumber)(number) 0 Inlining cast (byte~) anim::$9 ← (byte)*((const signed byte*) xp) Inlining cast (byte~) anim::$11 ← (byte)*((const signed byte*) yp) -Inlining cast (byte) debug_print_init::c#0 ← (unumber)(number) 4 Inlining cast (byte) debug_print::print_sbyte_pos1_row#0 ← (unumber)(number) 0 Inlining cast (byte) debug_print::print_sbyte_pos1_col#0 ← (unumber)(number) $25 Inlining cast (byte) debug_print::print_sbyte_pos2_row#0 ← (unumber)(number) 1 @@ -2249,7 +2242,6 @@ Inlining cast (byte) debug_print::print_sbyte_pos11_row#0 ← (unumber)(number) Inlining cast (byte) debug_print::print_sbyte_pos11_col#0 ← (unumber)(number) $21 Inlining cast (byte) debug_print::print_sbyte_pos12_row#0 ← (unumber)(number) 6 Inlining cast (byte) debug_print::print_sbyte_pos12_col#0 ← (unumber)(number) $25 -Inlining cast (byte) debug_print::c#0 ← (unumber)(number) 4 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff Inlining cast (byte~) sprites_init::$2 ← (byte)(byte*~) sprites_init::$1 Successful SSA optimization Pass2InlineCast @@ -2259,30 +2251,6 @@ Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53269 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53287 -Simplifying constant integer cast -$34 -Simplifying constant integer cast -$34 -Simplifying constant integer cast -$34 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast -$34 -Simplifying constant integer cast 0 -Simplifying constant integer cast $34 -Simplifying constant integer cast -$34 -Simplifying constant integer cast $34 -Simplifying constant integer cast -$34 -Simplifying constant integer cast 0 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 -Simplifying constant integer cast $34 Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (signed byte*) 240 @@ -2306,8 +2274,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 1 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast $fe Simplifying constant integer cast $fd @@ -2319,7 +2285,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast $22 Simplifying constant integer cast $22 Simplifying constant integer cast $22 -Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 4 Simplifying constant integer cast 0 @@ -2368,7 +2333,6 @@ Simplifying constant integer cast 6 Simplifying constant integer cast $25 Simplifying constant integer cast $28 Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant integer cast $ff Simplifying constant integer cast $3f8 Simplifying constant integer cast $40 @@ -2392,8 +2356,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3e8 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $fd @@ -2405,7 +2367,6 @@ Finalized signed number type (signed byte) 3 Finalized unsigned number type (byte) $22 Finalized unsigned number type (byte) $22 Finalized unsigned number type (byte) $22 -Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 @@ -2454,7 +2415,6 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $25 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) $40 @@ -9134,9 +9094,9 @@ FINAL SYMBOL TABLE (const byte*) BORDERCOL = (byte*) 53280 (const signed byte*) COSH = (const signed byte*) SINH+(byte) $40 (const signed byte*) COSQ = (const signed byte*) SINQ+(byte) $40 -(const byte) GREEN = (number) 5 -(const byte) LIGHT_BLUE = (number) $e -(const byte) LIGHT_GREY = (number) $f +(const byte) GREEN = (byte) 5 +(const byte) LIGHT_BLUE = (byte) $e +(const byte) LIGHT_GREY = (byte) $f (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 diff --git a/src/test/ref/examples/3d/3d.sym b/src/test/ref/examples/3d/3d.sym index 529672c5d..ca98ae263 100644 --- a/src/test/ref/examples/3d/3d.sym +++ b/src/test/ref/examples/3d/3d.sym @@ -4,9 +4,9 @@ (const byte*) BORDERCOL = (byte*) 53280 (const signed byte*) COSH = (const signed byte*) SINH+(byte) $40 (const signed byte*) COSQ = (const signed byte*) SINQ+(byte) $40 -(const byte) GREEN = (number) 5 -(const byte) LIGHT_BLUE = (number) $e -(const byte) LIGHT_GREY = (number) $f +(const byte) GREEN = (byte) 5 +(const byte) LIGHT_BLUE = (byte) $e +(const byte) LIGHT_GREY = (byte) $f (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 diff --git a/src/test/ref/examples/3d/perspective.cfg b/src/test/ref/examples/3d/perspective.cfg index 6e4a26e6e..000363a24 100644 --- a/src/test/ref/examples/3d/perspective.cfg +++ b/src/test/ref/examples/3d/perspective.cfg @@ -209,9 +209,9 @@ mulf_init: scope:[mulf_init] from main [88] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@1 - [89] (signed word) mulf_init::add#2 ← phi( mulf_init/(signed byte) 1 mulf_init::@1/(signed word) mulf_init::add#1 ) + [89] (signed word) mulf_init::add#2 ← phi( mulf_init/(signed word) 1 mulf_init::@1/(signed word) mulf_init::add#1 ) [89] (byte) mulf_init::i#2 ← phi( mulf_init/(byte) 0 mulf_init::@1/(byte) mulf_init::i#1 ) - [89] (signed word) mulf_init::sqr#2 ← phi( mulf_init/(signed byte) 0 mulf_init::@1/(signed word) mulf_init::sqr#1 ) + [89] (signed word) mulf_init::sqr#2 ← phi( mulf_init/(signed word) 0 mulf_init::@1/(signed word) mulf_init::sqr#1 ) [90] (byte) mulf_init::val#0 ← > (signed word) mulf_init::sqr#2 [91] *((const byte*) mulf_sqr1 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 [92] *((const byte*) mulf_sqr1+(word) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index df6bbb671..571880ff3 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -475,8 +475,8 @@ perspective::@return: scope:[perspective] from perspective (void()) mulf_init() mulf_init: scope:[mulf_init] from main - (signed word) mulf_init::sqr#0 ← (number) 0 - (signed word) mulf_init::add#0 ← (number) 1 + (signed word) mulf_init::sqr#0 ← (signed word) 0 + (signed word) mulf_init::add#0 ← (signed word) 1 (byte) mulf_init::i#0 ← (byte) 0 to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@1 @@ -893,8 +893,6 @@ Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number Adding number conversion cast (snumber) $39 in (signed byte) do_perspective::x#0 ← (number) $39 Adding number conversion cast (snumber) -$47 in (signed byte) do_perspective::y#0 ← (number) -$47 Adding number conversion cast (snumber) $36 in (signed byte) do_perspective::z#0 ← (number) $36 -Adding number conversion cast (snumber) 0 in (signed word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (snumber) 1 in (signed word) mulf_init::add#0 ← (number) 1 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr1+(number) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr1+(number) $100 + (byte~) mulf_init::$2) ← (byte) mulf_init::val#0 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$3 ← (byte) mulf_init::i#2 + (number) 1 @@ -920,8 +918,6 @@ Inlining cast (signed byte) do_perspective::y#0 ← (snumber)(number) -$47 Inlining cast (signed byte) do_perspective::z#0 ← (snumber)(number) $36 Inlining cast (byte~) do_perspective::$8 ← (byte)*((const signed byte*) xr) Inlining cast (byte~) do_perspective::$11 ← (byte)*((const signed byte*) yr) -Inlining cast (signed word) mulf_init::sqr#0 ← (snumber)(number) 0 -Inlining cast (signed word) mulf_init::add#0 ← (snumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (signed byte*) 240 Simplifying constant pointer cast (signed byte*) 241 @@ -939,8 +935,6 @@ Simplifying constant integer cast $3e8 Simplifying constant integer cast $39 Simplifying constant integer cast -$47 Simplifying constant integer cast $36 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant integer cast $100 Simplifying constant integer cast $100 Simplifying constant integer cast 1 @@ -961,8 +955,6 @@ Finalized unsigned number type (word) $3e8 Finalized signed number type (signed byte) $39 Finalized signed number type (signed byte) -$47 Finalized signed number type (signed byte) $36 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 1 Finalized unsigned number type (word) $100 Finalized unsigned number type (word) $100 Finalized unsigned number type (byte) 1 @@ -1167,7 +1159,7 @@ Inlining constant with var siblings (const signed word) mulf_init::sqr#0 Inlining constant with var siblings (const signed word) mulf_init::add#0 Inlining constant with var siblings (const byte) mulf_init::i#0 Inlining constant with var siblings (const byte*) print_line_cursor#0 -Constant inlined mulf_init::sqr#0 = (signed byte) 0 +Constant inlined mulf_init::sqr#0 = (signed word) 0 Constant inlined print_line_cursor#0 = (byte*) 1024 Constant inlined print_sbyte::b#1 = (const signed byte) do_perspective::x#0 Constant inlined print_sbyte::b#2 = (const signed byte) do_perspective::y#0 @@ -1176,7 +1168,7 @@ Constant inlined print_sbyte::b#3 = (const signed byte) do_perspective::z#0 Constant inlined do_perspective::str2 = (const string) do_perspective::str1 Constant inlined mulf_init::i#0 = (byte) 0 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined mulf_init::add#0 = (signed byte) 1 +Constant inlined mulf_init::add#0 = (signed word) 1 Constant inlined perspective::z#0 = (const signed byte) do_perspective::z#0 Constant inlined main::$1 = (word)(const byte*) mulf_sqr1 Constant inlined perspective::y#0 = (const signed byte) do_perspective::y#0 @@ -1510,9 +1502,9 @@ mulf_init: scope:[mulf_init] from main [88] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@1 - [89] (signed word) mulf_init::add#2 ← phi( mulf_init/(signed byte) 1 mulf_init::@1/(signed word) mulf_init::add#1 ) + [89] (signed word) mulf_init::add#2 ← phi( mulf_init/(signed word) 1 mulf_init::@1/(signed word) mulf_init::add#1 ) [89] (byte) mulf_init::i#2 ← phi( mulf_init/(byte) 0 mulf_init::@1/(byte) mulf_init::i#1 ) - [89] (signed word) mulf_init::sqr#2 ← phi( mulf_init/(signed byte) 0 mulf_init::@1/(signed word) mulf_init::sqr#1 ) + [89] (signed word) mulf_init::sqr#2 ← phi( mulf_init/(signed word) 0 mulf_init::@1/(signed word) mulf_init::sqr#1 ) [90] (byte) mulf_init::val#0 ← > (signed word) mulf_init::sqr#2 [91] *((const byte*) mulf_sqr1 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 [92] *((const byte*) mulf_sqr1+(word) $100 + (byte) mulf_init::i#2) ← (byte) mulf_init::val#0 @@ -2241,7 +2233,7 @@ mulf_init: { .label i = $f // [89] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [89] phi (signed word) mulf_init::add#2 = (signed byte) 1 [phi:mulf_init->mulf_init::@1#0] -- vwsz1=vbsc1 + // [89] phi (signed word) mulf_init::add#2 = (signed word) 1 [phi:mulf_init->mulf_init::@1#0] -- vwsz1=vwsc1 lda #<1 sta.z add lda #>1 @@ -2249,7 +2241,7 @@ mulf_init: { // [89] phi (byte) mulf_init::i#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [89] phi (signed word) mulf_init::sqr#2 = (signed byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwsz1=vbsc1 + // [89] phi (signed word) mulf_init::sqr#2 = (signed word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z sqr lda #>0 @@ -3055,14 +3047,14 @@ mulf_init: { .label add = 4 // [89] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [89] phi (signed word) mulf_init::add#2 = (signed byte) 1 [phi:mulf_init->mulf_init::@1#0] -- vwsz1=vbsc1 + // [89] phi (signed word) mulf_init::add#2 = (signed word) 1 [phi:mulf_init->mulf_init::@1#0] -- vwsz1=vwsc1 lda #<1 sta.z add lda #>1 sta.z add+1 // [89] phi (byte) mulf_init::i#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#1] -- vbuyy=vbuc1 ldy #0 - // [89] phi (signed word) mulf_init::sqr#2 = (signed byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwsz1=vbsc1 + // [89] phi (signed word) mulf_init::sqr#2 = (signed word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z sqr lda #>0 @@ -3981,14 +3973,14 @@ mulf_init: { .label sqr = 2 .label add = 4 // [89] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] - // [89] phi (signed word) mulf_init::add#2 = (signed byte) 1 [phi:mulf_init->mulf_init::@1#0] -- vwsz1=vbsc1 + // [89] phi (signed word) mulf_init::add#2 = (signed word) 1 [phi:mulf_init->mulf_init::@1#0] -- vwsz1=vwsc1 lda #<1 sta.z add lda #>1 sta.z add+1 // [89] phi (byte) mulf_init::i#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#1] -- vbuyy=vbuc1 tay - // [89] phi (signed word) mulf_init::sqr#2 = (signed byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwsz1=vbsc1 + // [89] phi (signed word) mulf_init::sqr#2 = (signed word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwsz1=vwsc1 sta.z sqr sta.z sqr+1 // [89] phi from mulf_init::@1 to mulf_init::@1 [phi:mulf_init::@1->mulf_init::@1] diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index 8fb0ad942..08745b104 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -51,7 +51,7 @@ CONTROL FLOW GRAPH SSA (void()) bitmap_init((byte*) bitmap_init::bitmap) bitmap_init: scope:[bitmap_init] from main (byte*) bitmap_init::bitmap#2 ← phi( main/(byte*) bitmap_init::bitmap#0 ) - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -153,8 +153,8 @@ bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3 bitmap_plot: scope:[bitmap_plot] from bitmap_line_xdyd::@1 bitmap_line_xdyi::@1 bitmap_line_ydxd::@1 bitmap_line_ydxi::@1 (byte) bitmap_plot::y#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::y#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::y#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::y#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::y#2 ) (byte) bitmap_plot::x#4 ← phi( bitmap_line_xdyd::@1/(byte) bitmap_plot::x#1 bitmap_line_xdyi::@1/(byte) bitmap_plot::x#0 bitmap_line_ydxd::@1/(byte) bitmap_plot::x#3 bitmap_line_ydxi::@1/(byte) bitmap_plot::x#2 ) - (word) bitmap_plot::plotter_x#0 ← ((word)) { *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } - (word) bitmap_plot::plotter_y#0 ← ((word)) { *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } + (word) bitmap_plot::plotter_x#0 ← (word){ *((const byte*) bitmap_plot_xhi + (byte) bitmap_plot::x#4), *((const byte*) bitmap_plot_xlo + (byte) bitmap_plot::x#4) } + (word) bitmap_plot::plotter_y#0 ← (word){ *((const byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4), *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4) } (word~) bitmap_plot::$0 ← (word) bitmap_plot::plotter_x#0 + (word) bitmap_plot::plotter_y#0 (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0 (byte~) bitmap_plot::$1 ← *((byte*) bitmap_plot::plotter#0) | *((const byte*) bitmap_plot_bit + (byte) bitmap_plot::x#4) @@ -637,7 +637,7 @@ main::@return: scope:[main] from main::@6 (void()) lines() lines: scope:[lines] from main::@1 - (byte) lines::l#0 ← (number) 0 + (byte) lines::l#0 ← (byte) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@7 (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@7/(byte) lines::l#1 ) @@ -696,10 +696,10 @@ SYMBOL TABLE SSA (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D011 = (byte*)(number) $d011 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (byte*~) bitmap_clear::$0 (bool~) bitmap_clear::$1 @@ -1210,8 +1210,8 @@ SYMBOL TABLE SSA (byte) lines::l#3 (byte) lines::l#4 (const byte) lines_cnt = (byte) 8 -(const byte*) lines_x[] = { (byte)(number) $3c, (byte)(number) $50, (byte)(number) $6e, (byte)(number) $50, (byte)(number) $3c, (byte)(number) $28, (byte)(number) $a, (byte)(number) $28, (byte)(number) $3c } -(const byte*) lines_y[] = { (byte)(number) $a, (byte)(number) $28, (byte)(number) $3c, (byte)(number) $50, (byte)(number) $6e, (byte)(number) $50, (byte)(number) $3c, (byte)(number) $28, (byte)(number) $a } +(const byte*) lines_x[] = { (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a, (byte) $28, (byte) $3c } +(const byte*) lines_y[] = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a } (void()) main() (label) main::@1 (label) main::@3 @@ -1224,7 +1224,6 @@ Fixing inline constructor with bitmap_clear::$3 ← (byte)*(bitmap_plot_xhi + 0) Fixing inline constructor with bitmap_plot::$2 ← (byte)*(bitmap_plot_xhi + bitmap_plot::x#4) w= (byte)*(bitmap_plot_xlo + bitmap_plot::x#4) Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#4) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#4) Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 @@ -1258,7 +1257,6 @@ Adding number conversion cast (unumber) VIC_BMM|VIC_DEN|VIC_RSEL|3 in *((const b Adding number conversion cast (unumber) 3 in *((const byte*) D011) ← ((unumber)) (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(number) $3fff/(number) $400 Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(number) $3fff/(number) $400 -Adding number conversion cast (unumber) 0 in (byte) lines::l#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) lines::$1 ← (byte) lines::l#3 + (number) 1 Adding number conversion cast (unumber) lines::$1 in (number~) lines::$1 ← (byte) lines::l#3 + (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (number~) lines::$2 ← (byte) lines::l#3 + (number) 1 @@ -1269,14 +1267,12 @@ Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (unumber) $40 in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(number) $40|(word)(const byte*) BITMAP&(unumber)(number) $3fff/(number) $400 Adding number conversion cast (unumber) $400 in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) SCREEN&(unumber)(number) $3fff/(unumber)(number) $40|(word)(const byte*) BITMAP&(unumber)(number) $3fff/(number) $400 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast (byte) lines::l#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_screen::c#3) ← (unumber)(number) $14 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 @@ -1285,25 +1281,6 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast $3c -Simplifying constant integer cast $50 -Simplifying constant integer cast $6e -Simplifying constant integer cast $50 -Simplifying constant integer cast $3c -Simplifying constant integer cast $28 -Simplifying constant integer cast $a -Simplifying constant integer cast $28 -Simplifying constant integer cast $3c -Simplifying constant integer cast $a -Simplifying constant integer cast $28 -Simplifying constant integer cast $3c -Simplifying constant integer cast $50 -Simplifying constant integer cast $6e -Simplifying constant integer cast $50 -Simplifying constant integer cast $3c -Simplifying constant integer cast $28 -Simplifying constant integer cast $a -Simplifying constant integer cast $80 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -1337,13 +1314,11 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $400 Simplifying constant integer cast $14 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -1369,7 +1344,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $400 @@ -5195,10 +5169,10 @@ FINAL SYMBOL TABLE (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.sym b/src/test/ref/examples/bresenham/bitmap-bresenham.sym index 20daca14e..7e56e3a8c 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.sym +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.sym @@ -6,10 +6,10 @@ (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 (const byte*) VIC_MEMORY = (byte*) 53272 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 diff --git a/src/test/ref/examples/chargen/chargen-analysis.cfg b/src/test/ref/examples/chargen/chargen-analysis.cfg index 7bd6c0890..ebbca0b22 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.cfg +++ b/src/test/ref/examples/chargen/chargen-analysis.cfg @@ -207,8 +207,8 @@ mul8u: scope:[mul8u] from plot_chargen::@1 [103] phi() to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [104] (word) mul8u::mb#2 ← phi( mul8u/(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [104] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [104] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) + [104] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [104] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index cca78f7a9..920373a7f 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -44,8 +44,8 @@ CONTROL FLOW GRAPH SSA mul8u: scope:[mul8u] from plot_chargen::@1 (byte) mul8u::a#5 ← phi( plot_chargen::@1/(byte) mul8u::a#1 ) (byte) mul8u::b#1 ← phi( plot_chargen::@1/(byte) mul8u::b#0 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#1 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#1 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -197,8 +197,8 @@ main::@33: scope:[main] from main::@7 if((bool~) main::$14) goto main::@7 to:main::@8 main::@8: scope:[main] from main::@33 - (byte) main::cur_pos#0 ← (number) 0 - (byte) main::shift#0 ← (number) 0 + (byte) main::cur_pos#0 ← (byte) 0 + (byte) main::shift#0 ← (byte) 0 to:main::@9 main::@9: scope:[main] from main::@21 main::@8 (byte) main::cur_pos#25 ← phi( main::@21/(byte) main::cur_pos#26 main::@8/(byte) main::cur_pos#0 ) @@ -298,7 +298,7 @@ main::@16: scope:[main] from main::@15 main::@18 (byte) main::shift#7 ← phi( main::@15/(byte) main::shift#9 main::@18/(byte) main::shift#10 ) (byte) main::cur_pos#9 ← phi( main::@15/(byte) main::cur_pos#11 main::@18/(byte) main::cur_pos#12 ) (byte) main::ch#2 ← phi( main::@15/(byte) main::ch#0 main::@18/(byte) main::ch#1 ) - (byte) main::pressed#0 ← (number) 0 + (byte) main::pressed#0 ← (byte) 0 (byte) keyboard_get_keycode::ch#0 ← (byte) main::ch#2 call keyboard_get_keycode (byte) keyboard_get_keycode::return#2 ← (byte) keyboard_get_keycode::return#1 @@ -506,64 +506,64 @@ SYMBOL TABLE SSA (const byte*) CHARGEN = (byte*)(number) $d000 (const byte*) CIA1_PORT_A = (byte*)(number) $dc00 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_5 = (number) $10 -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_9 = (number) $20 -(const byte) KEY_A = (number) $a -(const byte) KEY_ARROW_LEFT = (number) $39 -(const byte) KEY_ARROW_UP = (number) $36 -(const byte) KEY_ASTERISK = (number) $31 -(const byte) KEY_AT = (number) $2e -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_COLON = (number) $2d -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_D = (number) $12 -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_E = (number) $e -(const byte) KEY_EQUALS = (number) $35 -(const byte) KEY_F = (number) $15 -(const byte) KEY_F1 = (number) 4 -(const byte) KEY_F3 = (number) 5 -(const byte) KEY_F5 = (number) 6 -(const byte) KEY_F7 = (number) 3 -(const byte) KEY_G = (number) $1a -(const byte) KEY_H = (number) $1d -(const byte) KEY_I = (number) $21 -(const byte) KEY_J = (number) $22 -(const byte) KEY_K = (number) $25 -(const byte) KEY_L = (number) $2a -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_M = (number) $24 -(const byte) KEY_MINUS = (number) $2b -(const byte) KEY_N = (number) $27 -(const byte) KEY_O = (number) $26 -(const byte) KEY_P = (number) $29 -(const byte) KEY_PLUS = (number) $28 -(const byte) KEY_POUND = (number) $30 -(const byte) KEY_Q = (number) $3e -(const byte) KEY_R = (number) $11 -(const byte) KEY_S = (number) $d -(const byte) KEY_SEMICOLON = (number) $32 -(const byte) KEY_SLASH = (number) $37 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_T = (number) $16 -(const byte) KEY_U = (number) $1e -(const byte) KEY_V = (number) $1f -(const byte) KEY_W = (number) 9 -(const byte) KEY_X = (number) $17 -(const byte) KEY_Y = (number) $19 -(const byte) KEY_Z = (number) $c +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_5 = (byte) $10 +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_9 = (byte) $20 +(const byte) KEY_A = (byte) $a +(const byte) KEY_ARROW_LEFT = (byte) $39 +(const byte) KEY_ARROW_UP = (byte) $36 +(const byte) KEY_ASTERISK = (byte) $31 +(const byte) KEY_AT = (byte) $2e +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_COLON = (byte) $2d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_D = (byte) $12 +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_E = (byte) $e +(const byte) KEY_EQUALS = (byte) $35 +(const byte) KEY_F = (byte) $15 +(const byte) KEY_F1 = (byte) 4 +(const byte) KEY_F3 = (byte) 5 +(const byte) KEY_F5 = (byte) 6 +(const byte) KEY_F7 = (byte) 3 +(const byte) KEY_G = (byte) $1a +(const byte) KEY_H = (byte) $1d +(const byte) KEY_I = (byte) $21 +(const byte) KEY_J = (byte) $22 +(const byte) KEY_K = (byte) $25 +(const byte) KEY_L = (byte) $2a +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_M = (byte) $24 +(const byte) KEY_MINUS = (byte) $2b +(const byte) KEY_N = (byte) $27 +(const byte) KEY_O = (byte) $26 +(const byte) KEY_P = (byte) $29 +(const byte) KEY_PLUS = (byte) $28 +(const byte) KEY_POUND = (byte) $30 +(const byte) KEY_Q = (byte) $3e +(const byte) KEY_R = (byte) $11 +(const byte) KEY_S = (byte) $d +(const byte) KEY_SEMICOLON = (byte) $32 +(const byte) KEY_SLASH = (byte) $37 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_T = (byte) $16 +(const byte) KEY_U = (byte) $1e +(const byte) KEY_V = (byte) $1f +(const byte) KEY_W = (byte) 9 +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Y = (byte) $19 +(const byte) KEY_Z = (byte) $c (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) SCREEN = (byte*)(number) $400 -(const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte)(number) $3f, (const byte) KEY_POUND, (byte)(number) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte)(number) $3f, (const byte) KEY_EQUALS, (byte)(number) $3f, (byte)(number) $3f } +(const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte) $3f, (const byte) KEY_POUND, (byte) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte) $3f, (const byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) (label) keyboard_get_keycode::@return (byte) keyboard_get_keycode::ch @@ -611,7 +611,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#9 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -626,7 +626,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() (byte*~) main::$0 (byte*~) main::$11 @@ -926,7 +926,6 @@ SYMBOL TABLE SSA (byte*) print_str_at::str#6 (byte*) print_str_at::str#7 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1 @@ -946,8 +945,6 @@ Adding number conversion cast (unumber) 1 in (byte*~) main::$8 ← (const byte*) Adding number conversion cast (unumber) $1e in (byte*~) main::$9 ← (byte*~) main::$8 + (number) $1e Adding number conversion cast (unumber) $20 in (byte) plot_chargen::ch#0 ← (number) $20 Adding number conversion cast (unumber) 0 in (byte) plot_chargen::shift#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::cur_pos#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::shift#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$16 ← (byte~) main::$15 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$19 ← (byte~) main::$18 != (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::cur_pos#1 ← (number) 0 @@ -959,7 +956,6 @@ Adding number conversion cast (unumber) 0 in (bool~) main::$28 ← (byte~) main: Adding number conversion cast (unumber) 3 in (byte) main::cur_pos#4 ← (number) 3 Adding number conversion cast (unumber) 1 in (byte) main::shift#1 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) main::shift#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::pressed#0 ← (number) 0 Adding number conversion cast (unumber) $3f in (bool~) main::$30 ← (byte) main::key#0 != (number) $3f Adding number conversion cast (unumber) 0 in (bool~) main::$33 ← (byte) main::pressed#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_str_at::$0 ← (number) 0 != *((byte*) print_str_at::str#5) @@ -979,18 +975,14 @@ Adding number conversion cast (unumber) plot_chargen::$13 in (number~) plot_char Adding number conversion cast (unumber) $20 in (byte*~) plot_chargen::$15 ← (byte*) plot_chargen::sc#4 + (number) $20 Adding number conversion cast (unumber) $37 in *((const byte*) PROCPORT) ← (number) $37 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (byte) plot_chargen::ch#0 ← (unumber)(number) $20 Inlining cast (byte) plot_chargen::shift#0 ← (unumber)(number) 0 -Inlining cast (byte) main::cur_pos#0 ← (unumber)(number) 0 -Inlining cast (byte) main::shift#0 ← (unumber)(number) 0 Inlining cast (byte) main::cur_pos#1 ← (unumber)(number) 0 Inlining cast (byte) main::cur_pos#2 ← (unumber)(number) 1 Inlining cast (byte) main::cur_pos#3 ← (unumber)(number) 2 Inlining cast (byte) main::cur_pos#4 ← (unumber)(number) 3 Inlining cast (byte) main::shift#1 ← (unumber)(number) 1 Inlining cast (byte) main::shift#2 ← (unumber)(number) 0 -Inlining cast (byte) main::pressed#0 ← (unumber)(number) 0 Inlining cast (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $32 Inlining cast (byte) mul8u::b#0 ← (unumber)(number) $a @@ -1000,39 +992,8 @@ Simplifying constant pointer cast (byte*) 1 Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 56320 Simplifying constant pointer cast (byte*) 56321 -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -1053,8 +1014,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -1062,7 +1021,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $3f Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1080,7 +1038,6 @@ Simplifying constant integer cast $20 Simplifying constant integer cast $37 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -1101,8 +1058,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -1110,7 +1065,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -1142,7 +1096,6 @@ Inversing boolean not [158] (bool~) main::$34 ← (byte) main::pressed#2 == (byt Inversing boolean not [196] (bool~) plot_chargen::$4 ← (byte) plot_chargen::shift#2 == (byte) 0 from [195] (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte) 0 Inversing boolean not [221] (bool~) plot_chargen::$12 ← (byte~) plot_chargen::$10 == (byte) 0 from [220] (bool~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification -Alias (word) mul8u::mb#0 = (byte) mul8u::b#1 Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 @@ -1215,7 +1168,7 @@ Alias (byte) plot_chargen::x#2 = (byte) plot_chargen::x#3 Alias (byte) plot_chargen::y#3 = (byte) plot_chargen::y#5 Alias (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#8 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 +Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 Identical Phi Values (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 Identical Phi Values (byte) keyboard_get_keycode::ch#1 (byte) keyboard_get_keycode::ch#0 @@ -1287,6 +1240,8 @@ Constant (const byte) plot_chargen::x#0 = 0 Constant (const byte) plot_chargen::c#0 = '.' Constant (const byte) plot_chargen::c#1 = '*' Successful SSA optimization Pass2ConstantIdentification +Constant (const word) mul8u::mb#0 = (word)mul8u::b#0 +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [178] if(true) goto main::@9 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [86] main::i#1 ← ++ main::i#2 to ++ @@ -1330,6 +1285,7 @@ Rewriting multiplication to use shift [90] (word~) plot_chargen::$1 ← (word~) Rewriting multiplication to use shift [109] (byte) plot_chargen::bits#1 ← (byte) plot_chargen::bits#2 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const word) mul8u::mb#0 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#2 @@ -1382,11 +1338,12 @@ Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_F1 Constant inlined plot_chargen::ch#0 = (byte) $20 Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_F3 Constant inlined keyboard_key_pressed::key#4 = (const byte) KEY_LSHIFT +Constant inlined mul8u::mb#0 = (word)(const byte) mul8u::b#0 Constant inlined keyboard_key_pressed::key#2 = (const byte) KEY_F5 Constant inlined keyboard_key_pressed::key#3 = (const byte) KEY_F7 Constant inlined main::sc#0 = (const byte*) SCREEN Constant inlined main::cur_pos#3 = (byte) 2 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined main::cur_pos#4 = (byte) 3 Constant inlined main::cur_pos#1 = (byte) 0 Constant inlined main::$2 = (const byte*) SCREEN+(byte) 1 @@ -1745,8 +1702,8 @@ mul8u: scope:[mul8u] from plot_chargen::@1 [103] phi() to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [104] (word) mul8u::mb#2 ← phi( mul8u/(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [104] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [104] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) + [104] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [104] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [105] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -2863,12 +2820,12 @@ mul8u: { .label return = $30 // [104] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [104] phi (word) mul8u::mb#2 = (const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [104] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #b sta.z mb+1 - // [104] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [104] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -3950,12 +3907,12 @@ mul8u: { .label return = $a // [104] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [104] phi (word) mul8u::mb#2 = (const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [104] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #b sta.z mb+1 - // [104] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [104] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -4322,61 +4279,61 @@ FINAL SYMBOL TABLE (const byte*) CHARGEN = (byte*) 53248 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_5 = (number) $10 -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_9 = (number) $20 -(const byte) KEY_A = (number) $a -(const byte) KEY_ARROW_LEFT = (number) $39 -(const byte) KEY_ARROW_UP = (number) $36 -(const byte) KEY_ASTERISK = (number) $31 -(const byte) KEY_AT = (number) $2e -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_COLON = (number) $2d -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_D = (number) $12 -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_E = (number) $e -(const byte) KEY_EQUALS = (number) $35 -(const byte) KEY_F = (number) $15 -(const byte) KEY_F1 = (number) 4 -(const byte) KEY_F3 = (number) 5 -(const byte) KEY_F5 = (number) 6 -(const byte) KEY_F7 = (number) 3 -(const byte) KEY_G = (number) $1a -(const byte) KEY_H = (number) $1d -(const byte) KEY_I = (number) $21 -(const byte) KEY_J = (number) $22 -(const byte) KEY_K = (number) $25 -(const byte) KEY_L = (number) $2a -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_M = (number) $24 -(const byte) KEY_MINUS = (number) $2b -(const byte) KEY_N = (number) $27 -(const byte) KEY_O = (number) $26 -(const byte) KEY_P = (number) $29 -(const byte) KEY_PLUS = (number) $28 -(const byte) KEY_POUND = (number) $30 -(const byte) KEY_Q = (number) $3e -(const byte) KEY_R = (number) $11 -(const byte) KEY_S = (number) $d -(const byte) KEY_SEMICOLON = (number) $32 -(const byte) KEY_SLASH = (number) $37 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_T = (number) $16 -(const byte) KEY_U = (number) $1e -(const byte) KEY_V = (number) $1f -(const byte) KEY_W = (number) 9 -(const byte) KEY_X = (number) $17 -(const byte) KEY_Y = (number) $19 -(const byte) KEY_Z = (number) $c +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_5 = (byte) $10 +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_9 = (byte) $20 +(const byte) KEY_A = (byte) $a +(const byte) KEY_ARROW_LEFT = (byte) $39 +(const byte) KEY_ARROW_UP = (byte) $36 +(const byte) KEY_ASTERISK = (byte) $31 +(const byte) KEY_AT = (byte) $2e +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_COLON = (byte) $2d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_D = (byte) $12 +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_E = (byte) $e +(const byte) KEY_EQUALS = (byte) $35 +(const byte) KEY_F = (byte) $15 +(const byte) KEY_F1 = (byte) 4 +(const byte) KEY_F3 = (byte) 5 +(const byte) KEY_F5 = (byte) 6 +(const byte) KEY_F7 = (byte) 3 +(const byte) KEY_G = (byte) $1a +(const byte) KEY_H = (byte) $1d +(const byte) KEY_I = (byte) $21 +(const byte) KEY_J = (byte) $22 +(const byte) KEY_K = (byte) $25 +(const byte) KEY_L = (byte) $2a +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_M = (byte) $24 +(const byte) KEY_MINUS = (byte) $2b +(const byte) KEY_N = (byte) $27 +(const byte) KEY_O = (byte) $26 +(const byte) KEY_P = (byte) $29 +(const byte) KEY_PLUS = (byte) $28 +(const byte) KEY_POUND = (byte) $30 +(const byte) KEY_Q = (byte) $3e +(const byte) KEY_R = (byte) $11 +(const byte) KEY_S = (byte) $d +(const byte) KEY_SEMICOLON = (byte) $32 +(const byte) KEY_SLASH = (byte) $37 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_T = (byte) $16 +(const byte) KEY_U = (byte) $1e +(const byte) KEY_V = (byte) $1f +(const byte) KEY_W = (byte) 9 +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Y = (byte) $19 +(const byte) KEY_Z = (byte) $c (const byte*) PROCPORT = (byte*) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte) $3f, (const byte) KEY_POUND, (byte) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte) $3f, (const byte) KEY_EQUALS, (byte) $3f, (byte) $3f } @@ -5219,12 +5176,12 @@ mul8u: { .label res = $a .label return = $a // [104] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [104] phi (word) mul8u::mb#2 = (const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [104] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #b sta.z mb+1 - // [104] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [104] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res sta.z res+1 diff --git a/src/test/ref/examples/chargen/chargen-analysis.sym b/src/test/ref/examples/chargen/chargen-analysis.sym index 0cc95a930..dec310901 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.sym +++ b/src/test/ref/examples/chargen/chargen-analysis.sym @@ -4,61 +4,61 @@ (const byte*) CHARGEN = (byte*) 53248 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_5 = (number) $10 -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_9 = (number) $20 -(const byte) KEY_A = (number) $a -(const byte) KEY_ARROW_LEFT = (number) $39 -(const byte) KEY_ARROW_UP = (number) $36 -(const byte) KEY_ASTERISK = (number) $31 -(const byte) KEY_AT = (number) $2e -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_COLON = (number) $2d -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_D = (number) $12 -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_E = (number) $e -(const byte) KEY_EQUALS = (number) $35 -(const byte) KEY_F = (number) $15 -(const byte) KEY_F1 = (number) 4 -(const byte) KEY_F3 = (number) 5 -(const byte) KEY_F5 = (number) 6 -(const byte) KEY_F7 = (number) 3 -(const byte) KEY_G = (number) $1a -(const byte) KEY_H = (number) $1d -(const byte) KEY_I = (number) $21 -(const byte) KEY_J = (number) $22 -(const byte) KEY_K = (number) $25 -(const byte) KEY_L = (number) $2a -(const byte) KEY_LSHIFT = (number) $f -(const byte) KEY_M = (number) $24 -(const byte) KEY_MINUS = (number) $2b -(const byte) KEY_N = (number) $27 -(const byte) KEY_O = (number) $26 -(const byte) KEY_P = (number) $29 -(const byte) KEY_PLUS = (number) $28 -(const byte) KEY_POUND = (number) $30 -(const byte) KEY_Q = (number) $3e -(const byte) KEY_R = (number) $11 -(const byte) KEY_S = (number) $d -(const byte) KEY_SEMICOLON = (number) $32 -(const byte) KEY_SLASH = (number) $37 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_T = (number) $16 -(const byte) KEY_U = (number) $1e -(const byte) KEY_V = (number) $1f -(const byte) KEY_W = (number) 9 -(const byte) KEY_X = (number) $17 -(const byte) KEY_Y = (number) $19 -(const byte) KEY_Z = (number) $c +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_5 = (byte) $10 +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_9 = (byte) $20 +(const byte) KEY_A = (byte) $a +(const byte) KEY_ARROW_LEFT = (byte) $39 +(const byte) KEY_ARROW_UP = (byte) $36 +(const byte) KEY_ASTERISK = (byte) $31 +(const byte) KEY_AT = (byte) $2e +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_COLON = (byte) $2d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_D = (byte) $12 +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_E = (byte) $e +(const byte) KEY_EQUALS = (byte) $35 +(const byte) KEY_F = (byte) $15 +(const byte) KEY_F1 = (byte) 4 +(const byte) KEY_F3 = (byte) 5 +(const byte) KEY_F5 = (byte) 6 +(const byte) KEY_F7 = (byte) 3 +(const byte) KEY_G = (byte) $1a +(const byte) KEY_H = (byte) $1d +(const byte) KEY_I = (byte) $21 +(const byte) KEY_J = (byte) $22 +(const byte) KEY_K = (byte) $25 +(const byte) KEY_L = (byte) $2a +(const byte) KEY_LSHIFT = (byte) $f +(const byte) KEY_M = (byte) $24 +(const byte) KEY_MINUS = (byte) $2b +(const byte) KEY_N = (byte) $27 +(const byte) KEY_O = (byte) $26 +(const byte) KEY_P = (byte) $29 +(const byte) KEY_PLUS = (byte) $28 +(const byte) KEY_POUND = (byte) $30 +(const byte) KEY_Q = (byte) $3e +(const byte) KEY_R = (byte) $11 +(const byte) KEY_S = (byte) $d +(const byte) KEY_SEMICOLON = (byte) $32 +(const byte) KEY_SLASH = (byte) $37 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_T = (byte) $16 +(const byte) KEY_U = (byte) $1e +(const byte) KEY_V = (byte) $1f +(const byte) KEY_W = (byte) 9 +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Y = (byte) $19 +(const byte) KEY_Z = (byte) $c (const byte*) PROCPORT = (byte*) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte) $3f, (const byte) KEY_POUND, (byte) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte) $3f, (const byte) KEY_EQUALS, (byte) $3f, (byte) $3f } diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index 806b08891..d1ab0d5bf 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -598,7 +598,7 @@ SYMBOL TABLE SSA (byte*) print_screen#2 (byte*) print_screen#3 (byte*) print_screen#4 -(const signed byte*) vals[] = { (signed byte)(number) -$5f, (signed byte)(number) -$40, (signed byte)(number) -$20, (signed byte)(number) -$10, (signed byte)(number) 0, (signed byte)(number) $10, (signed byte)(number) $20, (signed byte)(number) $40, (signed byte)(number) $5f } +(const signed byte*) vals[] = { (signed byte) -$5f, (signed byte) -$40, (signed byte) -$20, (signed byte) -$10, (signed byte) 0, (signed byte) $10, (signed byte) $20, (signed byte) $40, (signed byte) $5f } Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (snumber) 0 in (bool~) print_sbyte_at::$0 ← (signed byte) print_sbyte_at::b#4 < (number) 0 @@ -623,15 +623,6 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (byte~) print_sbyte_at::$1 ← (byte)(signed byte) print_sbyte_at::b#6 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast -$5f -Simplifying constant integer cast -$40 -Simplifying constant integer cast -$20 -Simplifying constant integer cast -$10 -Simplifying constant integer cast 0 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $5f Simplifying constant pointer cast (signed byte*) 253 Simplifying constant pointer cast (signed byte*) 254 Simplifying constant pointer cast (signed byte*) 255 diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index 2832ab683..13098905b 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -287,7 +287,7 @@ makecharset::@8: scope:[makecharset] from makecharset::@7 to:makecharset::@7 makecharset::@9: scope:[makecharset] from makecharset::@7 (byte*) makecharset::charset#17 ← phi( makecharset::@7/(byte*) makecharset::charset#4 ) - (byte) makecharset::c#0 ← (number) 0 + (byte) makecharset::c#0 ← (byte) 0 to:makecharset::@13 makecharset::@13: scope:[makecharset] from makecharset::@18 makecharset::@9 (byte*) makecharset::charset#15 ← phi( makecharset::@18/(byte*) makecharset::charset#16 makecharset::@9/(byte*) makecharset::charset#17 ) @@ -298,8 +298,8 @@ makecharset::@13: scope:[makecharset] from makecharset::@18 makecharset::@9 makecharset::@14: scope:[makecharset] from makecharset::@13 (byte*) makecharset::charset#14 ← phi( makecharset::@13/(byte*) makecharset::charset#15 ) (byte) makecharset::c#8 ← phi( makecharset::@13/(byte) makecharset::c#2 ) - (byte) makecharset::bc#0 ← (number) 0 - (byte) makecharset::i#0 ← (number) 0 + (byte) makecharset::bc#0 ← (byte) 0 + (byte) makecharset::i#0 ← (byte) 0 to:makecharset::@16 makecharset::@16: scope:[makecharset] from makecharset::@14 makecharset::@21 (byte*) makecharset::charset#11 ← phi( makecharset::@14/(byte*) makecharset::charset#14 makecharset::@21/(byte*) makecharset::charset#5 ) @@ -314,8 +314,8 @@ makecharset::@17: scope:[makecharset] from makecharset::@16 (byte*) makecharset::charset#9 ← phi( makecharset::@16/(byte*) makecharset::charset#11 ) (byte) makecharset::c#9 ← phi( makecharset::@16/(byte) makecharset::c#6 ) (byte) makecharset::bc#6 ← phi( makecharset::@16/(byte) makecharset::bc#8 ) - (byte) makecharset::b#0 ← (number) 0 - (byte) makecharset::ii#0 ← (number) 0 + (byte) makecharset::b#0 ← (byte) 0 + (byte) makecharset::ii#0 ← (byte) 0 to:makecharset::@19 makecharset::@18: scope:[makecharset] from makecharset::@16 (byte*) makecharset::charset#16 ← phi( makecharset::@16/(byte*) makecharset::charset#11 ) @@ -416,7 +416,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) BUFFER = (byte*)(number) $4000 (const byte*) CHARSET = (byte*)(number) $3000 @@ -424,11 +424,11 @@ SYMBOL TABLE SSA (const byte*) D018 = (byte*)(number) $d018 (const byte*) SCREEN1 = (byte*)(number) $3800 (const byte*) SCREEN2 = (byte*)(number) $3c00 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 (const word*) SID_VOICE3_FREQ = (word*)(number) $d40e (const byte*) SID_VOICE3_OSC = (byte*)(number) $d41b -(const byte) YELLOW = (number) 7 +(const byte) YELLOW = (byte) 7 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (bool~) fillscreen::$0 (label) fillscreen::@1 @@ -630,7 +630,7 @@ SYMBOL TABLE SSA (byte) makecharset::bc#7 (byte) makecharset::bc#8 (byte) makecharset::bc#9 -(const byte*) makecharset::bittab[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) makecharset::bittab[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte) makecharset::c (byte) makecharset::c#0 (byte) makecharset::c#1 @@ -746,13 +746,8 @@ Adding number conversion cast (unumber) 0 in *((byte*) makecharset::font#3) ← Adding number conversion cast (unumber) $40*8 in (byte*~) makecharset::$2 ← (byte*) makecharset::charset#3 + (number) $40*(number) 8 Adding number conversion cast (unumber) $100*8 in (byte*~) makecharset::$3 ← (byte*) makecharset::charset#4 + (number) $100*(number) 8 Adding number conversion cast (unumber) $ff in *((byte*) makecharset::font1#3) ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) makecharset::c#0 ← (number) 0 Adding number conversion cast (unumber) $40 in (bool~) makecharset::$5 ← (byte) makecharset::c#2 < (number) $40 -Adding number conversion cast (unumber) 0 in (byte) makecharset::bc#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) makecharset::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) makecharset::$6 ← (byte) makecharset::i#2 < (number) 8 -Adding number conversion cast (unumber) 0 in (byte) makecharset::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) makecharset::ii#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) makecharset::$7 ← (byte) makecharset::ii#2 < (number) 8 Adding number conversion cast (unumber) $3f in (bool~) makecharset::$8 ← (byte) makecharset::bc#1 > (number) $3f Adding number conversion cast (unumber) 1*8 in (byte*~) makecharset::$14 ← (byte*) makecharset::charset#5 + (number) 1*(number) 8 @@ -775,11 +770,6 @@ Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1 Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1 Inlining cast *((byte*) makecharset::font#3) ← (unumber)(number) 0 Inlining cast *((byte*) makecharset::font1#3) ← (unumber)(number) $ff -Inlining cast (byte) makecharset::c#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::bc#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::i#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::b#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::ii#0 ← (unumber)(number) 0 Inlining cast (word~) makecharset::$15 ← (word)(byte) makecharset::c#5 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 @@ -789,14 +779,6 @@ Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (word*) 54286 Simplifying constant pointer cast (byte*) 54290 Simplifying constant pointer cast (byte*) 54299 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 14336 Simplifying constant pointer cast (byte*) 15360 Simplifying constant pointer cast (byte*) 16384 @@ -822,13 +804,8 @@ Simplifying constant integer cast $10 Simplifying constant integer cast $30 Simplifying constant integer cast 0 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast $40 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast $3f Simplifying constant integer cast 3 @@ -857,13 +834,8 @@ Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $30 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) 3 @@ -3284,7 +3256,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) BUFFER = (byte*) 16384 (const byte*) CHARSET = (byte*) 12288 @@ -3292,11 +3264,11 @@ FINAL SYMBOL TABLE (const byte*) D018 = (byte*) 53272 (const byte*) SCREEN1 = (byte*) 14336 (const byte*) SCREEN2 = (byte*) 15360 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 -(const byte) YELLOW = (number) 7 +(const byte) YELLOW = (byte) 7 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (label) fillscreen::@1 (label) fillscreen::@return diff --git a/src/test/ref/examples/fire/fire.sym b/src/test/ref/examples/fire/fire.sym index b22abd006..2ceb2059c 100644 --- a/src/test/ref/examples/fire/fire.sym +++ b/src/test/ref/examples/fire/fire.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) BUFFER = (byte*) 16384 (const byte*) CHARSET = (byte*) 12288 @@ -10,11 +10,11 @@ (const byte*) D018 = (byte*) 53272 (const byte*) SCREEN1 = (byte*) 14336 (const byte*) SCREEN2 = (byte*) 15360 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 -(const byte) YELLOW = (number) 7 +(const byte) YELLOW = (byte) 7 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (label) fillscreen::@1 (label) fillscreen::@return diff --git a/src/test/ref/examples/irq/irq-hyperscreen.log b/src/test/ref/examples/irq/irq-hyperscreen.log index 16118966c..914a05294 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.log +++ b/src/test/ref/examples/irq/irq-hyperscreen.log @@ -66,17 +66,17 @@ SYMBOL TABLE SSA (label) @end (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) GHOST_BYTE = (byte*)(number) $3fff (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) RASTER = (byte*)(number) $d012 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_MIN)(void()) irq_bottom_1() (label) irq_bottom_1::@return interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() @@ -553,17 +553,17 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) GHOST_BYTE = (byte*) 16383 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_MIN)(void()) irq_bottom_1() (label) irq_bottom_1::@return interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() diff --git a/src/test/ref/examples/irq/irq-hyperscreen.sym b/src/test/ref/examples/irq/irq-hyperscreen.sym index 37e46765f..8376f583b 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.sym +++ b/src/test/ref/examples/irq/irq-hyperscreen.sym @@ -3,17 +3,17 @@ (label) @end (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) GHOST_BYTE = (byte*) 16383 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_MIN)(void()) irq_bottom_1() (label) irq_bottom_1::@return interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() diff --git a/src/test/ref/examples/kernalload/kernalload.cfg b/src/test/ref/examples/kernalload/kernalload.cfg index f25c18b85..978701cc0 100644 --- a/src/test/ref/examples/kernalload/kernalload.cfg +++ b/src/test/ref/examples/kernalload/kernalload.cfg @@ -111,7 +111,7 @@ strlen: scope:[strlen] from setnam [48] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [49] (word) strlen::len#2 ← phi( strlen/(byte) 0 strlen::@2/(word) strlen::len#1 ) + [49] (word) strlen::len#2 ← phi( strlen/(word) 0 strlen::@2/(word) strlen::len#1 ) [49] (byte*) strlen::str#2 ← phi( strlen/(const string) main::filename strlen::@2/(byte*) strlen::str#0 ) [50] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 to:strlen::@return diff --git a/src/test/ref/examples/kernalload/kernalload.log b/src/test/ref/examples/kernalload/kernalload.log index 66414eaf4..95d514821 100644 --- a/src/test/ref/examples/kernalload/kernalload.log +++ b/src/test/ref/examples/kernalload/kernalload.log @@ -35,7 +35,7 @@ CONTROL FLOW GRAPH SSA (word()) strlen((byte*) strlen::str) strlen: scope:[strlen] from setnam (byte*) strlen::str#4 ← phi( setnam/(byte*) strlen::str#1 ) - (word) strlen::len#0 ← (number) 0 + (word) strlen::len#0 ← (word) 0 to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 (word) strlen::len#4 ← phi( strlen/(word) strlen::len#0 strlen::@2/(word) strlen::len#1 ) @@ -210,7 +210,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BORDERCOL = (byte*)(number) $d020 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte*) LOAD_SPRITE = (byte*)(number) $3000 (const byte*) SCREEN = (byte*)(number) $400 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) @@ -223,7 +223,7 @@ SYMBOL TABLE SSA (const byte*) SPRITES_PTR = (const byte*) SCREEN+(const word) SPRITE_PTRS (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (void()) error((byte) error::err) (label) error::@return (byte) error::err @@ -342,7 +342,6 @@ SYMBOL TABLE SSA (byte*) strlen::str#3 (byte*) strlen::str#4 -Adding number conversion cast (unumber) 0 in (word) strlen::len#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) strlen::$0 ← (number) 0 != *((byte*) strlen::str#2) Adding number conversion cast (unumber) 8 in (byte) loadFileToMemory::device#0 ← (number) 8 Adding number conversion cast (unumber) $ff in (bool~) main::$1 ← (byte) main::status#0 != (number) $ff @@ -357,7 +356,6 @@ Adding number conversion cast (unumber) $33 in *((const byte*) SPRITES_YPOS + (n Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_YPOS + (number) 0) ← ((unumber)) (number) $33 Adding number conversion cast (unumber) 2 in *((const byte*) BORDERCOL) ← (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) strlen::len#0 ← (unumber)(number) 0 Inlining cast (byte) loadFileToMemory::device#0 ← (unumber)(number) 8 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) 1 Inlining cast (word~) main::toSpritePtr1_$0 ← (word)(byte*) main::toSpritePtr1_sprite#1 @@ -383,7 +381,6 @@ Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte**) 254 Simplifying constant pointer cast (byte*) 253 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast $ff Simplifying constant integer cast 1 @@ -397,7 +394,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 1 @@ -481,7 +477,7 @@ Constant inlined load::$0 = (byte) 0 Constant inlined loadFileToMemory::address#0 = (const byte*) LOAD_SPRITE Constant inlined setlfs::device#0 = (const byte) loadFileToMemory::device#0 Constant inlined main::toSpritePtr1_$1 = (word)(const byte*) LOAD_SPRITE/(byte) $40 -Constant inlined strlen::len#0 = (byte) 0 +Constant inlined strlen::len#0 = (word) 0 Constant inlined loadFileToMemory::filename#0 = (const string) main::filename Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin @@ -641,7 +637,7 @@ strlen: scope:[strlen] from setnam [48] phi() to:strlen::@1 strlen::@1: scope:[strlen] from strlen strlen::@2 - [49] (word) strlen::len#2 ← phi( strlen/(byte) 0 strlen::@2/(word) strlen::len#1 ) + [49] (word) strlen::len#2 ← phi( strlen/(word) 0 strlen::@2/(word) strlen::len#1 ) [49] (byte*) strlen::str#2 ← phi( strlen/(const string) main::filename strlen::@2/(byte*) strlen::str#0 ) [50] if((byte) 0!=*((byte*) strlen::str#2)) goto strlen::@2 to:strlen::@return @@ -1017,7 +1013,7 @@ strlen: { .label return = $c // [49] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] __b1_from_strlen: - // [49] phi (word) strlen::len#2 = (byte) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vbuc1 + // [49] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len lda #>0 @@ -1398,7 +1394,7 @@ strlen: { .label return = 4 // [49] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] __b1_from_strlen: - // [49] phi (word) strlen::len#2 = (byte) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vbuc1 + // [49] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len lda #>0 @@ -1514,7 +1510,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BORDERCOL = (byte*) 53280 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte*) LOAD_SPRITE = (byte*) 12288 (const byte*) SCREEN = (byte*) 1024 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) @@ -1527,7 +1523,7 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_PTR = (const byte*) SCREEN+(const word) SPRITE_PTRS (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (void()) error((byte) error::err) (label) error::@return (byte) error::err @@ -1854,7 +1850,7 @@ strlen: { .label str = 2 .label return = 4 // [49] phi from strlen to strlen::@1 [phi:strlen->strlen::@1] - // [49] phi (word) strlen::len#2 = (byte) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vbuc1 + // [49] phi (word) strlen::len#2 = (word) 0 [phi:strlen->strlen::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z len sta.z len+1 diff --git a/src/test/ref/examples/kernalload/kernalload.sym b/src/test/ref/examples/kernalload/kernalload.sym index 8ba08bddd..825af2497 100644 --- a/src/test/ref/examples/kernalload/kernalload.sym +++ b/src/test/ref/examples/kernalload/kernalload.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) BORDERCOL = (byte*) 53280 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte*) LOAD_SPRITE = (byte*) 12288 (const byte*) SCREEN = (byte*) 1024 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) @@ -15,7 +15,7 @@ (const byte*) SPRITES_PTR = (const byte*) SCREEN+(const word) SPRITE_PTRS (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (void()) error((byte) error::err) (label) error::@return (byte) error::err diff --git a/src/test/ref/examples/linking/linking.log b/src/test/ref/examples/linking/linking.log index 728078e29..2d24c7f51 100644 --- a/src/test/ref/examples/linking/linking.log +++ b/src/test/ref/examples/linking/linking.log @@ -46,7 +46,7 @@ main::@return: scope:[main] from main::@3 (void()) fillscreen((byte) fillscreen::c) fillscreen: scope:[fillscreen] from main::@4 (byte) fillscreen::c#3 ← phi( main::@4/(byte) fillscreen::c#0 ) - (byte) fillscreen::i#0 ← (number) 0 + (byte) fillscreen::i#0 ← (byte) 0 (byte*) fillscreen::screen#0 ← (const byte*) SCREEN to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@2 @@ -118,17 +118,12 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) fillscreen::i#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$0 ← (const byte*) SCREEN + (number) $3e8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) fillscreen::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) fillscreen::c#1 = (byte) fillscreen::c#2 diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.cfg b/src/test/ref/examples/multiplexer/simple-multiplexer.cfg index 2aee0c162..92bad9f27 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.cfg +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.cfg @@ -180,7 +180,7 @@ init: scope:[init] from main [82] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [83] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 ) + [83] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(word) $20 ) [83] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 ) [84] *((const byte*) PLEX_PTR + (byte) init::sx#2) ← (byte)(const byte*) SPRITE/(byte) $40 [85] (byte~) init::$5 ← (byte) init::sx#2 << (byte) 1 diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index 128a85960..35ec3aa19 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -51,9 +51,9 @@ CONTROL FLOW GRAPH SSA to:@4 @4: scope:[] from @begin (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number) $400+(number) $3f8 - (byte) plex_show_idx#0 ← (number) 0 - (byte) plex_sprite_idx#0 ← (number) 0 - (byte) plex_sprite_msb#0 ← (number) 1 + (byte) plex_show_idx#0 ← (byte) 0 + (byte) plex_sprite_idx#0 ← (byte) 0 + (byte) plex_sprite_msb#0 ← (byte) 1 to:@9 (void()) plexInit((byte*) plexInit::screen) @@ -263,7 +263,7 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexSho (byte) plex_sprite_idx#40 ← phi( @4/(byte) plex_sprite_idx#0 ) (byte) plex_show_idx#40 ← phi( @4/(byte) plex_show_idx#0 ) (byte*) PLEX_SCREEN_PTR#27 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 ) - (byte) plex_free_next#4 ← (number) 0 + (byte) plex_free_next#4 ← (byte) 0 to:@12 @12: scope:[] from @9 (byte) plex_free_next#38 ← phi( @9/(byte) plex_free_next#4 ) @@ -332,7 +332,7 @@ init: scope:[init] from main init::@5: scope:[init] from init (byte*) PLEX_SCREEN_PTR#12 ← phi( init/(byte*) PLEX_SCREEN_PTR#2 ) (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#12 - (word) init::xp#0 ← (number) $20 + (word) init::xp#0 ← (word) $20 (byte) init::sx#0 ← (byte) 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@5 @@ -375,7 +375,7 @@ loop: scope:[loop] from main::@1 (byte) plex_sprite_msb#33 ← phi( main::@1/(byte) plex_sprite_msb#25 ) (byte) plex_sprite_idx#34 ← phi( main::@1/(byte) plex_sprite_idx#28 ) (byte) plex_show_idx#34 ← phi( main::@1/(byte) plex_show_idx#28 ) - (byte) loop::sin_idx#0 ← (number) 0 + (byte) loop::sin_idx#0 ← (byte) 0 to:loop::@1 loop::@1: scope:[loop] from loop loop::@25 (byte*) PLEX_SCREEN_PTR#42 ← phi( loop/(byte*) PLEX_SCREEN_PTR#43 loop::@25/(byte*) PLEX_SCREEN_PTR#44 ) @@ -598,11 +598,11 @@ SYMBOL TABLE SSA (label) @9 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D011 = (byte*)(number) $d011 -(const byte) GREEN = (number) 5 -(const byte) PLEX_COUNT = (number) $20 +(const byte) GREEN = (byte) 5 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -663,9 +663,9 @@ SYMBOL TABLE SSA (const byte*) SPRITES_XMSB = (byte*)(number) $d010 (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) VIC_RST8 = (number) $80 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) VIC_RST8 = (byte) $80 (const byte*) YSIN[(number) $100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; @@ -1063,9 +1063,6 @@ SYMBOL TABLE SSA (byte) plex_sprite_msb#8 (byte) plex_sprite_msb#9 -Adding number conversion cast (unumber) 0 in (byte) plex_show_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#0 ← (number) 1 Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 Adding number conversion cast (unumber) 1 in (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) 1 in (number~) plexSort::$1 ← (byte) plexSort::m#2 + (number) 1 @@ -1097,15 +1094,12 @@ Adding number conversion cast (unumber) plexShowSprite::$6 in (number~) plexShow Adding number conversion cast (unumber) 2 in (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#15 * (number) 2 Adding number conversion cast (unumber) 0 in (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb#3 == (number) 0 Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#4 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) plex_free_next#4 ← (number) 0 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const byte*) D011) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 -Adding number conversion cast (unumber) $20 in (word) init::xp#0 ← (number) $20 Adding number conversion cast (unumber) $40 in (byte*~) init::$1 ← (const byte*) SPRITE / (number) $40 Adding number conversion cast (unumber) 9 in (word) init::xp#1 ← (word) init::xp#2 + (number) 9 Adding number conversion cast (unumber) 1 in (byte) init::sx#1 ← (byte) init::sx#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) $ff in *((const byte*) SPRITES_ENABLE) ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) loop::sin_idx#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) loop::$0 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 8 in (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (number) 8 Adding number conversion cast (unumber) 1 in (byte) loop::sy#1 ← (byte) loop::sy#2 + rangenext(0,PLEX_COUNT-1) @@ -1113,21 +1107,15 @@ Adding number conversion cast (unumber) 1 in (byte) loop::sin_idx#1 ← (byte) l Adding number conversion cast (unumber) 0 in (bool~) loop::$6 ← (byte~) loop::$5 != (number) 0 Adding number conversion cast (unumber) 1 in (byte) loop::ss#1 ← (byte) loop::ss#2 + rangenext(0,PLEX_COUNT-1) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) plex_show_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) plex_sprite_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) plex_sprite_msb#0 ← (unumber)(number) 1 Inlining cast (byte) plex_show_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#1 ← (unumber)(number) 1 Inlining cast *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 Inlining cast (byte) plex_free_next#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#4 ← (unumber)(number) 1 -Inlining cast (byte) plex_free_next#4 ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast (word) init::xp#0 ← (unumber)(number) $20 Inlining cast (byte~) init::$2 ← (byte)(byte*~) init::$1 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff -Inlining cast (byte) loop::sin_idx#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 53249 @@ -1139,9 +1127,6 @@ Simplifying constant pointer cast (byte*) 53287 Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant integer cast $3f8 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -1164,15 +1149,12 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 -Simplifying constant integer cast $20 Simplifying constant integer cast $40 Simplifying constant integer cast 9 Simplifying constant integer cast 1 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 8 Simplifying constant integer cast 1 @@ -1180,9 +1162,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -1205,14 +1184,11 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 1 @@ -1554,7 +1530,7 @@ Inlining constant with var siblings (const byte) plex_sprite_idx#1 Inlining constant with var siblings (const byte) plex_sprite_msb#1 Inlining constant with var siblings (const byte) plex_free_next#0 Inlining constant with var siblings (const byte) plex_sprite_msb#4 -Constant inlined init::xp#0 = (byte) $20 +Constant inlined init::xp#0 = (word) $20 Constant inlined plexSort::plexFreePrepare1_s#0 = (byte) 0 Constant inlined init::ss#0 = (byte) 0 Constant inlined plexInit::i#0 = (byte) 0 @@ -1867,7 +1843,7 @@ init: scope:[init] from main [82] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [83] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 ) + [83] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(word) $20 ) [83] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 ) [84] *((const byte*) PLEX_PTR + (byte) init::sx#2) ← (byte)(const byte*) SPRITE/(byte) $40 [85] (byte~) init::$5 ← (byte) init::sx#2 << (byte) 1 @@ -2608,7 +2584,7 @@ init: { jsr plexInit // [83] phi from init to init::@1 [phi:init->init::@1] __b1_from_init: - // [83] phi (word) init::xp#2 = (byte) $20 [phi:init->init::@1#0] -- vwuz1=vbuc1 + // [83] phi (word) init::xp#2 = (word) $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 @@ -3397,7 +3373,7 @@ init: { jsr plexInit // [83] phi from init to init::@1 [phi:init->init::@1] __b1_from_init: - // [83] phi (word) init::xp#2 = (byte) $20 [phi:init->init::@1#0] -- vwuz1=vbuc1 + // [83] phi (word) init::xp#2 = (word) $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 @@ -3666,11 +3642,11 @@ FINAL SYMBOL TABLE (label) @2 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 -(const byte) GREEN = (number) 5 -(const byte) PLEX_COUNT = (number) $20 +(const byte) GREEN = (byte) 5 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -3686,9 +3662,9 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_XMSB = (byte*) 53264 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) VIC_RST8 = (number) $80 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) VIC_RST8 = (byte) $80 (const byte*) YSIN[(number) $100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; @@ -4284,7 +4260,7 @@ init: { // [96] phi from init to plexInit [phi:init->plexInit] jsr plexInit // [83] phi from init to init::@1 [phi:init->init::@1] - // [83] phi (word) init::xp#2 = (byte) $20 [phi:init->init::@1#0] -- vwuz1=vbuc1 + // [83] phi (word) init::xp#2 = (word) $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.sym b/src/test/ref/examples/multiplexer/simple-multiplexer.sym index 9f2ccdbcd..121dda2a7 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.sym +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.sym @@ -2,11 +2,11 @@ (label) @2 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D011 = (byte*) 53265 -(const byte) GREEN = (number) 5 -(const byte) PLEX_COUNT = (number) $20 +(const byte) GREEN = (byte) 5 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -22,9 +22,9 @@ (const byte*) SPRITES_XMSB = (byte*) 53264 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) VIC_RST8 = (number) $80 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) VIC_RST8 = (byte) $80 (const byte*) YSIN[(number) $100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; diff --git a/src/test/ref/examples/music/music_irq.log b/src/test/ref/examples/music/music_irq.log index ad45dc801..2e8b33333 100644 --- a/src/test/ref/examples/music/music_irq.log +++ b/src/test/ref/examples/music/music_irq.log @@ -54,9 +54,9 @@ SYMBOL TABLE SSA (label) @end (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) MUSIC = (byte*)(number) $1000 @@ -420,9 +420,9 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) MUSIC = (byte*) 4096 diff --git a/src/test/ref/examples/music/music_irq.sym b/src/test/ref/examples/music/music_irq.sym index 071f3bd0c..1aff06a56 100644 --- a/src/test/ref/examples/music/music_irq.sym +++ b/src/test/ref/examples/music/music_irq.sym @@ -4,9 +4,9 @@ (label) @end (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) MUSIC = (byte*) 4096 diff --git a/src/test/ref/examples/nmisamples/nmisamples.log b/src/test/ref/examples/nmisamples/nmisamples.log index 8d09ff43b..793a91a28 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.log +++ b/src/test/ref/examples/nmisamples/nmisamples.log @@ -81,10 +81,10 @@ SYMBOL TABLE SSA (const byte*) CIA2_INTERRUPT = (byte*)(number) $dd0d (const word*) CIA2_TIMER_A = (word*)(number) $dd04 (const byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const void()**) KERNEL_NMI = (void()**)(number) $318 (const byte*) SAMPLE[(const word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} -(const word) SAMPLE_SIZE = (number) $6100 +(const word) SAMPLE_SIZE = (word) $6100 (const byte*) SID_VOLUME = (byte*)(number) $d418 (void()) main() (label) main::@return @@ -695,10 +695,10 @@ FINAL SYMBOL TABLE (const byte*) CIA2_INTERRUPT = (byte*) 56589 (const word*) CIA2_TIMER_A = (word*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const void()**) KERNEL_NMI = (void()**) 792 (const byte*) SAMPLE[(const word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} -(const word) SAMPLE_SIZE = (number) $6100 +(const word) SAMPLE_SIZE = (word) $6100 (const byte*) SID_VOLUME = (byte*) 54296 (void()) main() (label) main::@return diff --git a/src/test/ref/examples/nmisamples/nmisamples.sym b/src/test/ref/examples/nmisamples/nmisamples.sym index cfa5285c8..166c81768 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.sym +++ b/src/test/ref/examples/nmisamples/nmisamples.sym @@ -6,10 +6,10 @@ (const byte*) CIA2_INTERRUPT = (byte*) 56589 (const word*) CIA2_TIMER_A = (word*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const void()**) KERNEL_NMI = (void()**) 792 (const byte*) SAMPLE[(const word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} -(const word) SAMPLE_SIZE = (number) $6100 +(const word) SAMPLE_SIZE = (word) $6100 (const byte*) SID_VOLUME = (byte*) 54296 (void()) main() (label) main::@return diff --git a/src/test/ref/examples/plasma/plasma-unroll.cfg b/src/test/ref/examples/plasma/plasma-unroll.cfg index 8f8a00180..d09eaffc5 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.cfg +++ b/src/test/ref/examples/plasma/plasma-unroll.cfg @@ -210,7 +210,7 @@ makecharset::@12: scope:[makecharset] from makecharset to:makecharset::@1 makecharset::@1: scope:[makecharset] from makecharset::@11 makecharset::@12 [101] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#30 makecharset::@12/(const byte*) print_line_cursor#0 ) - [101] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(byte) 0 ) + [101] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(word) 0 ) [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@1 diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index 7eaf696dd..7d3038e0e 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -340,10 +340,10 @@ main::@return: scope:[main] from main::@3 (byte*) print_screen#9 ← phi( @17/(byte*) print_screen#0 ) (byte*) print_char_cursor#32 ← phi( @17/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#24 ← phi( @17/(byte*) print_line_cursor#0 ) - (byte) c1A#2 ← (number) 0 - (byte) c1B#2 ← (number) 0 - (byte) c2A#2 ← (number) 0 - (byte) c2B#2 ← (number) 0 + (byte) c1A#2 ← (byte) 0 + (byte) c1B#2 ← (byte) 0 + (byte) c2A#2 ← (byte) 0 + (byte) c2B#2 ← (byte) 0 to:@46 (void()) doplasma((byte*) doplasma::screen) @@ -355,8 +355,8 @@ doplasma: scope:[doplasma] from main::@4 (byte) c1A#8 ← phi( main::@4/(byte) c1A#12 ) (byte) doplasma::c1a#0 ← (byte) c1A#8 (byte) doplasma::c1b#0 ← (byte) c1B#8 - (byte) doplasma::yprev#0 ← (number) 0 - (byte) doplasma::i#0 ← (number) 0 + (byte) doplasma::yprev#0 ← (byte) 0 + (byte) doplasma::i#0 ← (byte) 0 to:doplasma::@1 doplasma::@1: scope:[doplasma] from doplasma doplasma::@2 (byte*) doplasma::screen#10 ← phi( doplasma/(byte*) doplasma::screen#11 doplasma::@2/(byte*) doplasma::screen#12 ) @@ -400,7 +400,7 @@ doplasma::@3: scope:[doplasma] from doplasma::@1 (byte) c1B#3 ← (byte) c1B#9 - (number) 5 (byte) doplasma::c2a#0 ← (byte) c2A#8 (byte) doplasma::c2b#0 ← (byte) c2B#8 - (byte) doplasma::i1#0 ← (number) 0 + (byte) doplasma::i1#0 ← (byte) 0 to:doplasma::@7 doplasma::@7: scope:[doplasma] from doplasma::@3 doplasma::@8 (byte*) doplasma::screen#7 ← phi( doplasma::@3/(byte*) doplasma::screen#8 doplasma::@8/(byte*) doplasma::screen#9 ) @@ -437,7 +437,7 @@ doplasma::@9: scope:[doplasma] from doplasma::@7 (byte) c2A#9 ← phi( doplasma::@7/(byte) c2A#15 ) (byte) c2A#3 ← (byte) c2A#9 + (number) 2 (byte) c2B#3 ← (byte) c2B#9 - (number) 3 - (byte) doplasma::i2#0 ← (number) 0 + (byte) doplasma::i2#0 ← (byte) 0 to:doplasma::@13 doplasma::@13: scope:[doplasma] from doplasma::@18 doplasma::@9 (byte*) doplasma::screen#4 ← phi( doplasma::@18/(byte*) doplasma::screen#5 doplasma::@9/(byte*) doplasma::screen#6 ) @@ -457,7 +457,7 @@ doplasma::@14: scope:[doplasma] from doplasma::@13 (byte*) doplasma::screen#3 ← phi( doplasma::@13/(byte*) doplasma::screen#4 ) (byte) doplasma::i2#3 ← phi( doplasma::@13/(byte) doplasma::i2#2 ) (byte) doplasma::val#0 ← *((const byte*) doplasma::xbuf + (byte) doplasma::i2#3) - (byte) doplasma::ii#0 ← (number) 0 + (byte) doplasma::ii#0 ← (byte) 0 to:doplasma::@16 doplasma::@16: scope:[doplasma] from doplasma::@14 doplasma::@17 (byte) c2B#24 ← phi( doplasma::@14/(byte) c2B#26 doplasma::@17/(byte) c2B#27 ) @@ -528,7 +528,7 @@ makecharset::@24: scope:[makecharset] from makecharset::@23 (byte*) print_line_cursor#11 ← phi( makecharset::@23/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11 (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#16 - (word) makecharset::c#0 ← (number) 0 + (word) makecharset::c#0 ← (word) 0 to:makecharset::@1 makecharset::@1: scope:[makecharset] from makecharset::@19 makecharset::@24 (byte*) makecharset::charset#10 ← phi( makecharset::@19/(byte*) makecharset::charset#11 makecharset::@24/(byte*) makecharset::charset#12 ) @@ -545,7 +545,7 @@ makecharset::@2: scope:[makecharset] from makecharset::@1 (word) makecharset::c#3 ← phi( makecharset::@1/(word) makecharset::c#2 ) (byte~) makecharset::$3 ← < (word) makecharset::c#3 (byte) makecharset::s#0 ← *((const byte*) SINTABLE + (byte~) makecharset::$3) - (byte) makecharset::i#0 ← (number) 0 + (byte) makecharset::i#0 ← (byte) 0 to:makecharset::@4 makecharset::@4: scope:[makecharset] from makecharset::@2 makecharset::@9 (byte*) print_line_cursor#31 ← phi( makecharset::@2/(byte*) print_line_cursor#33 makecharset::@9/(byte*) print_line_cursor#34 ) @@ -564,8 +564,8 @@ makecharset::@5: scope:[makecharset] from makecharset::@4 (byte*) makecharset::charset#4 ← phi( makecharset::@4/(byte*) makecharset::charset#5 ) (byte) makecharset::i#6 ← phi( makecharset::@4/(byte) makecharset::i#2 ) (word) makecharset::c#11 ← phi( makecharset::@4/(word) makecharset::c#7 ) - (byte) makecharset::b#0 ← (number) 0 - (byte) makecharset::ii#0 ← (number) 0 + (byte) makecharset::b#0 ← (byte) 0 + (byte) makecharset::ii#0 ← (byte) 0 to:makecharset::@7 makecharset::@6: scope:[makecharset] from makecharset::@4 (byte*) makecharset::charset#15 ← phi( makecharset::@4/(byte*) makecharset::charset#5 ) @@ -715,8 +715,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CHARSET = (byte*)(number) $2000 (const byte*) COLS = (byte*)(number) $d800 @@ -726,7 +726,7 @@ SYMBOL TABLE SSA (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN1 = (byte*)(number) $2800 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 (const word*) SID_VOICE3_FREQ = (word*)(number) $d40e (const byte*) SID_VOICE3_OSC = (byte*)(number) $d41b @@ -1035,7 +1035,7 @@ SYMBOL TABLE SSA (byte) makecharset::b#5 (byte) makecharset::b#6 (byte) makecharset::b#7 -(const byte*) makecharset::bittab[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) makecharset::bittab[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) makecharset::c (word) makecharset::c#0 (word) makecharset::c#1 @@ -1276,35 +1276,22 @@ Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 -Adding number conversion cast (unumber) 0 in (byte) c1A#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c1B#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c2A#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c2B#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) doplasma::yprev#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) doplasma::i#0 ← (number) 0 Adding number conversion cast (unumber) $19 in (bool~) doplasma::$0 ← (byte) doplasma::i#2 < (number) $19 Adding number conversion cast (unumber) 4 in (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (number) 4 Adding number conversion cast (unumber) 9 in (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (number) 9 Adding number conversion cast (unumber) 3 in (byte) c1A#3 ← (byte) c1A#9 + (number) 3 Adding number conversion cast (unumber) 5 in (byte) c1B#3 ← (byte) c1B#9 - (number) 5 -Adding number conversion cast (unumber) 0 in (byte) doplasma::i1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) doplasma::$3 ← (byte) doplasma::i1#2 < (number) $28 Adding number conversion cast (unumber) 3 in (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (number) 3 Adding number conversion cast (unumber) 7 in (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (number) 7 Adding number conversion cast (unumber) 2 in (byte) c2A#3 ← (byte) c2A#9 + (number) 2 Adding number conversion cast (unumber) 3 in (byte) c2B#3 ← (byte) c2B#9 - (number) 3 -Adding number conversion cast (unumber) 0 in (byte) doplasma::i2#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) doplasma::$5 ← (byte) doplasma::i2#2 < (number) $28 -Adding number conversion cast (unumber) 0 in (byte) doplasma::ii#0 ← (number) 0 Adding number conversion cast (unumber) $19 in (bool~) doplasma::$6 ← (byte) doplasma::ii#2 < (number) $19 Adding number conversion cast (unumber) $28 in (number~) doplasma::$7 ← (byte) doplasma::ii#3 * (number) $28 Adding number conversion cast (unumber) doplasma::$7 in (number~) doplasma::$7 ← (byte) doplasma::ii#3 * (unumber)(number) $28 -Adding number conversion cast (unumber) 0 in (word) makecharset::c#0 ← (number) 0 Adding number conversion cast (unumber) $100 in (bool~) makecharset::$2 ← (word) makecharset::c#2 < (number) $100 -Adding number conversion cast (unumber) 0 in (byte) makecharset::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) makecharset::$4 ← (byte) makecharset::i#2 < (number) 8 -Adding number conversion cast (unumber) 0 in (byte) makecharset::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) makecharset::ii#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) makecharset::$12 ← (word) makecharset::c#4 & (number) 7 Adding number conversion cast (unumber) makecharset::$12 in (number~) makecharset::$12 ← (word) makecharset::c#4 & (unumber)(number) 7 Adding number conversion cast (unumber) 0 in (bool~) makecharset::$13 ← (unumber~) makecharset::$12 == (number) 0 @@ -1321,19 +1308,6 @@ Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast *((const word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 -Inlining cast (byte) c1A#2 ← (unumber)(number) 0 -Inlining cast (byte) c1B#2 ← (unumber)(number) 0 -Inlining cast (byte) c2A#2 ← (unumber)(number) 0 -Inlining cast (byte) c2B#2 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::yprev#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::i#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::i1#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::i2#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::ii#0 ← (unumber)(number) 0 -Inlining cast (word) makecharset::c#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::i#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::b#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::ii#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 @@ -1344,14 +1318,6 @@ Simplifying constant pointer cast (byte*) 54290 Simplifying constant pointer cast (byte*) 54299 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 @@ -1361,34 +1327,21 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast 4 Simplifying constant integer cast 9 Simplifying constant integer cast 3 Simplifying constant integer cast 5 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 3 Simplifying constant integer cast 7 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 Simplifying constant integer cast $100 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -1403,34 +1356,21 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 5 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -2293,7 +2233,7 @@ Constant inlined doplasma::$56 = (const byte*) SCREEN1++++++++++++++++++++++++++ Constant inlined doplasma::$53 = ++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$52 = (const byte*) SCREEN1+++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$55 = ++++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 -Constant inlined makecharset::c#0 = (byte) 0 +Constant inlined makecharset::c#0 = (word) 0 Constant inlined doplasma::$54 = (const byte*) SCREEN1+++++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$51 = ++++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 Constant inlined doplasma::$50 = (const byte*) SCREEN1+++++++++++++++++++++++++++++++++++++++++++(byte) 0*(byte) $28 @@ -2844,7 +2784,7 @@ makecharset::@12: scope:[makecharset] from makecharset to:makecharset::@1 makecharset::@1: scope:[makecharset] from makecharset::@11 makecharset::@12 [101] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#30 makecharset::@12/(const byte*) print_line_cursor#0 ) - [101] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(byte) 0 ) + [101] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(word) 0 ) [102] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@1 @@ -3947,7 +3887,7 @@ makecharset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [101] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [101] phi (word) makecharset::c#2 = (word) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c lda #>0 @@ -5109,7 +5049,7 @@ makecharset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [101] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [101] phi (word) makecharset::c#2 = (word) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c lda #>0 @@ -5565,8 +5505,8 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 @@ -5576,7 +5516,7 @@ FINAL SYMBOL TABLE (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN1 = (byte*) 10240 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 @@ -6368,7 +6308,7 @@ makecharset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [101] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [101] phi (word) makecharset::c#2 = (word) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c sta.z c+1 diff --git a/src/test/ref/examples/plasma/plasma-unroll.sym b/src/test/ref/examples/plasma/plasma-unroll.sym index 70e18a6e4..23bfcdf02 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.sym +++ b/src/test/ref/examples/plasma/plasma-unroll.sym @@ -2,8 +2,8 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 @@ -13,7 +13,7 @@ (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN1 = (byte*) 10240 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 diff --git a/src/test/ref/examples/plasma/plasma.cfg b/src/test/ref/examples/plasma/plasma.cfg index 774af41f1..1c12a31d4 100644 --- a/src/test/ref/examples/plasma/plasma.cfg +++ b/src/test/ref/examples/plasma/plasma.cfg @@ -127,7 +127,7 @@ makecharset::@12: scope:[makecharset] from makecharset to:makecharset::@1 makecharset::@1: scope:[makecharset] from makecharset::@11 makecharset::@12 [58] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#29 makecharset::@12/(const byte*) print_line_cursor#0 ) - [58] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(byte) 0 ) + [58] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(word) 0 ) [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@1 diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index 40d2258a7..24fdc1c99 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -399,10 +399,10 @@ main::@return: scope:[main] from main::@3 (byte*) print_screen#9 ← phi( @17/(byte*) print_screen#0 ) (byte*) print_char_cursor#31 ← phi( @17/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#23 ← phi( @17/(byte*) print_line_cursor#0 ) - (byte) c1A#3 ← (number) 0 - (byte) c1B#3 ← (number) 0 - (byte) c2A#3 ← (number) 0 - (byte) c2B#3 ← (number) 0 + (byte) c1A#3 ← (byte) 0 + (byte) c1B#3 ← (byte) 0 + (byte) c2A#3 ← (byte) 0 + (byte) c2B#3 ← (byte) 0 to:@46 (void()) doplasma((byte*) doplasma::screen) @@ -414,7 +414,7 @@ doplasma: scope:[doplasma] from main::@4 main::@9 (byte) c1A#10 ← phi( main::@4/(byte) c1A#14 main::@9/(byte) c1A#15 ) (byte) doplasma::c1a#0 ← (byte) c1A#10 (byte) doplasma::c1b#0 ← (byte) c1B#10 - (byte) doplasma::i#0 ← (number) 0 + (byte) doplasma::i#0 ← (byte) 0 to:doplasma::@1 doplasma::@1: scope:[doplasma] from doplasma doplasma::@2 (byte*) doplasma::screen#12 ← phi( doplasma/(byte*) doplasma::screen#13 doplasma::@2/(byte*) doplasma::screen#14 ) @@ -453,7 +453,7 @@ doplasma::@3: scope:[doplasma] from doplasma::@1 (byte) c1B#4 ← (byte) c1B#11 - (number) 5 (byte) doplasma::c2a#0 ← (byte) c2A#10 (byte) doplasma::c2b#0 ← (byte) c2B#10 - (byte) doplasma::i1#0 ← (number) 0 + (byte) doplasma::i1#0 ← (byte) 0 to:doplasma::@7 doplasma::@7: scope:[doplasma] from doplasma::@3 doplasma::@8 (byte*) doplasma::screen#9 ← phi( doplasma::@3/(byte*) doplasma::screen#10 doplasma::@8/(byte*) doplasma::screen#11 ) @@ -490,7 +490,7 @@ doplasma::@9: scope:[doplasma] from doplasma::@7 (byte) c2A#11 ← phi( doplasma::@7/(byte) c2A#18 ) (byte) c2A#4 ← (byte) c2A#11 + (number) 2 (byte) c2B#4 ← (byte) c2B#11 - (number) 3 - (byte) doplasma::ii#0 ← (number) 0 + (byte) doplasma::ii#0 ← (byte) 0 to:doplasma::@13 doplasma::@13: scope:[doplasma] from doplasma::@18 doplasma::@9 (byte*) doplasma::screen#7 ← phi( doplasma::@18/(byte*) doplasma::screen#2 doplasma::@9/(byte*) doplasma::screen#8 ) @@ -509,7 +509,7 @@ doplasma::@14: scope:[doplasma] from doplasma::@13 (byte) c1A#34 ← phi( doplasma::@13/(byte) c1A#18 ) (byte*) doplasma::screen#6 ← phi( doplasma::@13/(byte*) doplasma::screen#7 ) (byte) doplasma::ii#6 ← phi( doplasma::@13/(byte) doplasma::ii#2 ) - (byte) doplasma::i2#0 ← (number) 0 + (byte) doplasma::i2#0 ← (byte) 0 to:doplasma::@16 doplasma::@16: scope:[doplasma] from doplasma::@14 doplasma::@17 (byte) c2B#31 ← phi( doplasma::@14/(byte) c2B#34 doplasma::@17/(byte) c2B#35 ) @@ -577,7 +577,7 @@ makecharset::@24: scope:[makecharset] from makecharset::@23 (byte*) print_line_cursor#11 ← phi( makecharset::@23/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11 (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#16 - (word) makecharset::c#0 ← (number) 0 + (word) makecharset::c#0 ← (word) 0 to:makecharset::@1 makecharset::@1: scope:[makecharset] from makecharset::@19 makecharset::@24 (byte*) makecharset::charset#10 ← phi( makecharset::@19/(byte*) makecharset::charset#11 makecharset::@24/(byte*) makecharset::charset#12 ) @@ -594,7 +594,7 @@ makecharset::@2: scope:[makecharset] from makecharset::@1 (word) makecharset::c#3 ← phi( makecharset::@1/(word) makecharset::c#2 ) (byte~) makecharset::$3 ← < (word) makecharset::c#3 (byte) makecharset::s#0 ← *((const byte*) SINTABLE + (byte~) makecharset::$3) - (byte) makecharset::i#0 ← (number) 0 + (byte) makecharset::i#0 ← (byte) 0 to:makecharset::@4 makecharset::@4: scope:[makecharset] from makecharset::@2 makecharset::@9 (byte*) print_line_cursor#29 ← phi( makecharset::@2/(byte*) print_line_cursor#32 makecharset::@9/(byte*) print_line_cursor#33 ) @@ -613,8 +613,8 @@ makecharset::@5: scope:[makecharset] from makecharset::@4 (byte*) makecharset::charset#4 ← phi( makecharset::@4/(byte*) makecharset::charset#5 ) (byte) makecharset::i#6 ← phi( makecharset::@4/(byte) makecharset::i#2 ) (word) makecharset::c#11 ← phi( makecharset::@4/(word) makecharset::c#7 ) - (byte) makecharset::b#0 ← (number) 0 - (byte) makecharset::ii#0 ← (number) 0 + (byte) makecharset::b#0 ← (byte) 0 + (byte) makecharset::ii#0 ← (byte) 0 to:makecharset::@7 makecharset::@6: scope:[makecharset] from makecharset::@4 (byte*) makecharset::charset#15 ← phi( makecharset::@4/(byte*) makecharset::charset#5 ) @@ -764,8 +764,8 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CHARSET = (byte*)(number) $2000 (const byte*) COLS = (byte*)(number) $d800 @@ -776,7 +776,7 @@ SYMBOL TABLE SSA (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN1 = (byte*)(number) $2800 (const byte*) SCREEN2 = (byte*)(number) $2c00 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 (const word*) SID_VOICE3_FREQ = (word*)(number) $d40e (const byte*) SID_VOICE3_OSC = (byte*)(number) $d41b @@ -1118,7 +1118,7 @@ SYMBOL TABLE SSA (byte) makecharset::b#5 (byte) makecharset::b#6 (byte) makecharset::b#7 -(const byte*) makecharset::bittab[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) makecharset::bittab[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (word) makecharset::c (word) makecharset::c#0 (word) makecharset::c#1 @@ -1377,33 +1377,21 @@ Adding number conversion cast (unumber) main::toD0182_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (number) $f Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0182_$8 in (number~) main::toD0182_$8 ← (unumber~) main::toD0182_$3 | (unumber~) main::toD0182_$7 -Adding number conversion cast (unumber) 0 in (byte) c1A#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c1B#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c2A#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c2B#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) doplasma::i#0 ← (number) 0 Adding number conversion cast (unumber) $19 in (bool~) doplasma::$0 ← (byte) doplasma::i#2 < (number) $19 Adding number conversion cast (unumber) 4 in (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (number) 4 Adding number conversion cast (unumber) 9 in (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (number) 9 Adding number conversion cast (unumber) 3 in (byte) c1A#4 ← (byte) c1A#11 + (number) 3 Adding number conversion cast (unumber) 5 in (byte) c1B#4 ← (byte) c1B#11 - (number) 5 -Adding number conversion cast (unumber) 0 in (byte) doplasma::i1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) doplasma::$2 ← (byte) doplasma::i1#2 < (number) $28 Adding number conversion cast (unumber) 3 in (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (number) 3 Adding number conversion cast (unumber) 7 in (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (number) 7 Adding number conversion cast (unumber) 2 in (byte) c2A#4 ← (byte) c2A#11 + (number) 2 Adding number conversion cast (unumber) 3 in (byte) c2B#4 ← (byte) c2B#11 - (number) 3 -Adding number conversion cast (unumber) 0 in (byte) doplasma::ii#0 ← (number) 0 Adding number conversion cast (unumber) $19 in (bool~) doplasma::$4 ← (byte) doplasma::ii#2 < (number) $19 -Adding number conversion cast (unumber) 0 in (byte) doplasma::i2#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) doplasma::$5 ← (byte) doplasma::i2#2 < (number) $28 Adding number conversion cast (unumber) $28 in (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#4 + (number) $28 -Adding number conversion cast (unumber) 0 in (word) makecharset::c#0 ← (number) 0 Adding number conversion cast (unumber) $100 in (bool~) makecharset::$2 ← (word) makecharset::c#2 < (number) $100 -Adding number conversion cast (unumber) 0 in (byte) makecharset::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) makecharset::$4 ← (byte) makecharset::i#2 < (number) 8 -Adding number conversion cast (unumber) 0 in (byte) makecharset::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) makecharset::ii#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) makecharset::$12 ← (word) makecharset::c#4 & (number) 7 Adding number conversion cast (unumber) makecharset::$12 in (number~) makecharset::$12 ← (word) makecharset::c#4 & (unumber)(number) 7 Adding number conversion cast (unumber) 0 in (bool~) makecharset::$13 ← (unumber~) makecharset::$12 == (number) 0 @@ -1422,18 +1410,6 @@ Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1 Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1 -Inlining cast (byte) c1A#3 ← (unumber)(number) 0 -Inlining cast (byte) c1B#3 ← (unumber)(number) 0 -Inlining cast (byte) c2A#3 ← (unumber)(number) 0 -Inlining cast (byte) c2B#3 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::i#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::i1#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::ii#0 ← (unumber)(number) 0 -Inlining cast (byte) doplasma::i2#0 ← (unumber)(number) 0 -Inlining cast (word) makecharset::c#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::i#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::b#0 ← (unumber)(number) 0 -Inlining cast (byte) makecharset::ii#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 @@ -1445,14 +1421,6 @@ Simplifying constant pointer cast (byte*) 54299 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 11264 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 @@ -1466,33 +1434,21 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast 4 Simplifying constant integer cast 9 Simplifying constant integer cast 3 Simplifying constant integer cast 5 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 3 Simplifying constant integer cast 7 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 Simplifying constant integer cast $100 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -1511,33 +1467,21 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 5 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -1927,7 +1871,7 @@ Constant inlined doplasma::screen#1 = (const byte*) SCREEN2 Constant inlined c1B#19 = (byte) 0 Constant inlined makecharset::b#0 = (byte) 0 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 -Constant inlined makecharset::c#0 = (byte) 0 +Constant inlined makecharset::c#0 = (word) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@14(between main::@1 and main::@1) Added new block during phi lifting makecharset::@27(between makecharset::@25 and makecharset::@10) @@ -2188,7 +2132,7 @@ makecharset::@12: scope:[makecharset] from makecharset to:makecharset::@1 makecharset::@1: scope:[makecharset] from makecharset::@11 makecharset::@12 [58] (byte*) print_char_cursor#18 ← phi( makecharset::@11/(byte*) print_char_cursor#29 makecharset::@12/(const byte*) print_line_cursor#0 ) - [58] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(byte) 0 ) + [58] (word) makecharset::c#2 ← phi( makecharset::@11/(word) makecharset::c#1 makecharset::@12/(word) 0 ) [59] if((word) makecharset::c#2<(word) $100) goto makecharset::@2 to:makecharset::@return makecharset::@return: scope:[makecharset] from makecharset::@1 @@ -2930,7 +2874,7 @@ makecharset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) makecharset::c#2 = (word) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c lda #>0 @@ -3818,7 +3762,7 @@ makecharset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) makecharset::c#2 = (word) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c lda #>0 @@ -4231,8 +4175,8 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 @@ -4243,7 +4187,7 @@ FINAL SYMBOL TABLE (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN1 = (byte*) 10240 (const byte*) SCREEN2 = (byte*) 11264 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 @@ -4815,7 +4759,7 @@ makecharset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [58] phi (word) makecharset::c#2 = (byte) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) makecharset::c#2 = (word) 0 [phi:makecharset::@12->makecharset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c sta.z c+1 diff --git a/src/test/ref/examples/plasma/plasma.sym b/src/test/ref/examples/plasma/plasma.sym index c2e6a4006..3c7f97ad6 100644 --- a/src/test/ref/examples/plasma/plasma.sym +++ b/src/test/ref/examples/plasma/plasma.sym @@ -2,8 +2,8 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 @@ -14,7 +14,7 @@ (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN1 = (byte*) 10240 (const byte*) SCREEN2 = (byte*) 11264 -(const byte) SID_CONTROL_NOISE = (number) $80 +(const byte) SID_CONTROL_NOISE = (byte) $80 (const byte*) SID_VOICE3_CONTROL = (byte*) 54290 (const word*) SID_VOICE3_FREQ = (word*) 54286 (const byte*) SID_VOICE3_OSC = (byte*) 54299 diff --git a/src/test/ref/examples/rasterbars/raster-bars.log b/src/test/ref/examples/rasterbars/raster-bars.log index dd2dc162f..ccc64de0c 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.log +++ b/src/test/ref/examples/rasterbars/raster-bars.log @@ -38,7 +38,7 @@ main::@return: scope:[main] from main::@7 (void()) raster() raster: scope:[raster] from main::@5 asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop } - (byte) raster::i#0 ← (number) 0 + (byte) raster::i#0 ← (byte) 0 (byte) raster::col#0 ← *((const byte*) rastercols + (byte) raster::i#0) to:raster::@1 raster::@1: scope:[raster] from raster raster::@1 @@ -90,58 +90,21 @@ SYMBOL TABLE SSA (byte) raster::i#0 (byte) raster::i#1 (byte) raster::i#2 -(const byte*) rastercols[] = { (byte)(number) $b, (byte)(number) 0, (byte)(number) $b, (byte)(number) $b, (byte)(number) $c, (byte)(number) $b, (byte)(number) $c, (byte)(number) $c, (byte)(number) $f, (byte)(number) $c, (byte)(number) $f, (byte)(number) $f, (byte)(number) 1, (byte)(number) $f, (byte)(number) 1, (byte)(number) 1, (byte)(number) $f, (byte)(number) 1, (byte)(number) $f, (byte)(number) $f, (byte)(number) $c, (byte)(number) $f, (byte)(number) $c, (byte)(number) $c, (byte)(number) $b, (byte)(number) $c, (byte)(number) $b, (byte)(number) $b, (byte)(number) 0, (byte)(number) $b, (byte)(number) 0, (byte)(number) $ff } +(const byte*) rastercols[] = { (byte) $b, (byte) 0, (byte) $b, (byte) $b, (byte) $c, (byte) $b, (byte) $c, (byte) $c, (byte) $f, (byte) $c, (byte) $f, (byte) $f, (byte) 1, (byte) $f, (byte) 1, (byte) 1, (byte) $f, (byte) 1, (byte) $f, (byte) $f, (byte) $c, (byte) $f, (byte) $c, (byte) $c, (byte) $b, (byte) $c, (byte) $b, (byte) $b, (byte) 0, (byte) $b, (byte) 0, (byte) $ff } Adding number conversion cast (unumber) $a in (bool~) main::$0 ← *((const byte*) RASTER) != (number) $a Adding number conversion cast (unumber) $b in (bool~) main::$1 ← *((const byte*) RASTER) != (number) $b -Adding number conversion cast (unumber) 0 in (byte) raster::i#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) raster::$0 ← (byte) raster::col#1 != (number) $ff Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) raster::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant integer cast $b -Simplifying constant integer cast 0 -Simplifying constant integer cast $b -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $f -Simplifying constant integer cast $c -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast 1 -Simplifying constant integer cast $f -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast $f -Simplifying constant integer cast 1 -Simplifying constant integer cast $f -Simplifying constant integer cast $f -Simplifying constant integer cast $c -Simplifying constant integer cast $f -Simplifying constant integer cast $c -Simplifying constant integer cast $c -Simplifying constant integer cast $b -Simplifying constant integer cast $c -Simplifying constant integer cast $b -Simplifying constant integer cast $b -Simplifying constant integer cast 0 -Simplifying constant integer cast $b -Simplifying constant integer cast 0 -Simplifying constant integer cast $ff Simplifying constant integer cast $a Simplifying constant integer cast $b -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) $b -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if(*((const byte*) RASTER)!=(byte) $a) goto main::@2 diff --git a/src/test/ref/examples/rotate/rotate.cfg b/src/test/ref/examples/rotate/rotate.cfg index 7fc12c46d..a715805a5 100644 --- a/src/test/ref/examples/rotate/rotate.cfg +++ b/src/test/ref/examples/rotate/rotate.cfg @@ -275,7 +275,7 @@ mulf_init: scope:[mulf_init] from init mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [131] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [131] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [131] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [131] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [131] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [131] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [132] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index 7f68ad330..4787072ed 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -101,9 +101,9 @@ CONTROL FLOW GRAPH SSA (void()) mulf_init() mulf_init: scope:[mulf_init] from init - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -130,7 +130,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -422,7 +422,7 @@ init::@return: scope:[init] from init::@1 (void()) anim() anim: scope:[anim] from main::@1 - (byte) anim::angle#0 ← (number) 0 + (byte) anim::angle#0 ← (byte) 0 to:anim::@1 anim::@1: scope:[anim] from anim anim::@27 (byte) anim::angle#9 ← phi( anim/(byte) anim::angle#0 anim::@27/(byte) anim::angle#11 ) @@ -444,7 +444,7 @@ anim::@19: scope:[anim] from anim::@6 (signed byte) anim::cos_a#0 ← (signed byte~) anim::$3 (signed byte~) anim::$4 ← ((signed byte)) *((const byte*) SIN + (byte) anim::angle#2) (signed byte) anim::sin_a#0 ← (signed byte~) anim::$4 - (byte) anim::sprite_msb#0 ← (number) 0 + (byte) anim::sprite_msb#0 ← (byte) 0 (byte) anim::i#0 ← (byte) 0 to:anim::@10 anim::@10: scope:[anim] from anim::@11 anim::@19 @@ -680,15 +680,15 @@ SYMBOL TABLE SSA (const dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 (const byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e (const byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f -(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (number) 0 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (number) 0 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const byte) CIA_TIMER_CONTROL_STOP = (number) 0 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const byte) CIA_TIMER_CONTROL_STOP = (byte) 0 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) COS = (const byte*) SIN+(number) $40 -(const byte) GREEN = (number) 5 -(const byte) LIGHT_BLUE = (number) $e +(const byte) GREEN = (byte) 5 +(const byte) LIGHT_BLUE = (byte) $e (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1150,22 +1150,18 @@ SYMBOL TABLE SSA (word) print_word_at::w#1 (word) print_word_at::w#2 (word) print_word_at::w#3 -(const signed byte*) xs[(number) 8] = { (signed byte)(number) -$46, (signed byte)(number) -$46, (signed byte)(number) -$46, (signed byte)(number) 0, (signed byte)(number) 0, (signed byte)(number) $46, (signed byte)(number) $46, (signed byte)(number) $46 } -(const signed byte*) ys[(number) 8] = { (signed byte)(number) -$46, (signed byte)(number) 0, (signed byte)(number) $46, (signed byte)(number) -$46, (signed byte)(number) $46, (signed byte)(number) -$46, (signed byte)(number) 0, (signed byte)(number) $46 } +(const signed byte*) xs[(number) 8] = { (signed byte) -$46, (signed byte) -$46, (signed byte) -$46, (signed byte) 0, (signed byte) 0, (signed byte) $46, (signed byte) $46, (signed byte) $46 } +(const signed byte*) ys[(number) 8] = { (signed byte) -$46, (signed byte) 0, (signed byte) $46, (signed byte) -$46, (signed byte) $46, (signed byte) -$46, (signed byte) 0, (signed byte) $46 } Fixing inline constructor with mulf8u_prepared::$0 ← (byte)*(mulf8u_prepared::memB) w= (byte)*(mulf8u_prepared::resL) Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) $40 in -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -1187,9 +1183,7 @@ Adding number conversion cast (unumber) 1 in (byte*~) print_byte_at::$3 ← (byt Adding number conversion cast (unumber) $ff in *((const byte*) SPRITES_ENABLE) ← (number) $ff Adding number conversion cast (unumber) $3f8 in (byte*~) init::$1 ← (const byte*) SCREEN + (number) $3f8 Adding number conversion cast (unumber) $40 in (byte*~) init::$2 ← (const byte*) SPRITE / (number) $40 -Adding number conversion cast (unumber) 0 in (byte) anim::angle#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) anim::$0 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) anim::sprite_msb#0 ← (number) 0 Adding number conversion cast (snumber) 2 in (number~) anim::$7 ← (signed word~) anim::$6 * (number) 2 Adding number conversion cast (snumber) anim::$7 in (number~) anim::$7 ← (signed word~) anim::$6 * (snumber)(number) 2 Adding number conversion cast (snumber) 2 in (number~) anim::$9 ← (signed word~) anim::$8 * (number) 2 @@ -1213,10 +1207,6 @@ Adding number conversion cast (unumber) 2 in (number~) anim::$26 ← (byte) anim Adding number conversion cast (unumber) anim::$26 in (number~) anim::$26 ← (byte) anim::i#3 * (unumber)(number) 2 Adding number conversion cast (unumber) $80 in (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#4 | (number) $80 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast (byte~) mulf8s_prepared::$0 ← (byte)(signed byte) mulf8s_prepared::b#4 Inlining cast (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#6 @@ -1225,10 +1215,8 @@ Inlining cast (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf Inlining cast *((const dword*) CIA2_TIMER_AB) ← (unumber)(number) $ffffffff Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff Inlining cast (byte~) init::$3 ← (byte)(byte*~) init::$2 -Inlining cast (byte) anim::angle#0 ← (unumber)(number) 0 Inlining cast (signed byte~) anim::$3 ← (signed byte)*((const byte*) COS + (byte) anim::angle#2) Inlining cast (signed byte~) anim::$4 ← (signed byte)*((const byte*) SIN + (byte) anim::angle#2) -Inlining cast (byte) anim::sprite_msb#0 ← (unumber)(number) 0 Inlining cast (byte~) anim::mulf8s_prepare1_$0 ← (byte)(signed byte) anim::mulf8s_prepare1_a#1 Inlining cast (byte~) anim::mulf8s_prepare2_$0 ← (byte)(signed byte) anim::mulf8s_prepare2_a#1 Inlining cast (signed byte~) anim::$16 ← (signed byte)(byte~) anim::$15 @@ -1247,35 +1235,15 @@ Simplifying constant pointer cast (byte*) 253 Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 Simplifying constant pointer cast (signed byte*) 253 -Simplifying constant integer cast -$46 -Simplifying constant integer cast -$46 -Simplifying constant integer cast -$46 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $46 -Simplifying constant integer cast $46 -Simplifying constant integer cast $46 -Simplifying constant integer cast -$46 -Simplifying constant integer cast 0 -Simplifying constant integer cast $46 -Simplifying constant integer cast -$46 -Simplifying constant integer cast $46 -Simplifying constant integer cast -$46 -Simplifying constant integer cast 0 -Simplifying constant integer cast $46 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $40 Simplifying constant pointer cast (byte*) 12288 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -1297,9 +1265,7 @@ Simplifying constant integer cast 1 Simplifying constant integer cast $ff Simplifying constant integer cast $3f8 Simplifying constant integer cast $40 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 2 @@ -1314,15 +1280,11 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $80 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -1342,9 +1304,7 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2 @@ -1576,7 +1536,7 @@ Inlining constant with var siblings (const byte) anim::sprite_msb#0 Inlining constant with var siblings (const byte) anim::i#0 Constant inlined mulf_init::c#0 = (byte) 0 Constant inlined mulf_init::sqr2_lo#0 = (const byte*) mulf_sqr2_lo -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined anim::sprite_msb#0 = (byte) 0 Constant inlined init::i#0 = (byte) 0 Constant inlined mulf_init::sqr2_hi#0 = (const byte*) mulf_sqr2_hi @@ -2000,7 +1960,7 @@ mulf_init: scope:[mulf_init] from init mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [131] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [131] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [131] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [131] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [131] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [131] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [132] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 @@ -3252,7 +3212,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [131] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [131] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -4619,7 +4579,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [131] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [131] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -5003,12 +4963,12 @@ FINAL SYMBOL TABLE (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) COS = (const byte*) SIN+(byte) $40 -(const byte) GREEN = (number) 5 -(const byte) LIGHT_BLUE = (number) $e +(const byte) GREEN = (byte) 5 +(const byte) LIGHT_BLUE = (byte) $e (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -5993,7 +5953,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [131] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [131] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/examples/rotate/rotate.sym b/src/test/ref/examples/rotate/rotate.sym index 78b298fc3..eb3aea84a 100644 --- a/src/test/ref/examples/rotate/rotate.sym +++ b/src/test/ref/examples/rotate/rotate.sym @@ -5,12 +5,12 @@ (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) COS = (const byte*) SIN+(byte) $40 -(const byte) GREEN = (number) 5 -(const byte) LIGHT_BLUE = (number) $e +(const byte) GREEN = (byte) 5 +(const byte) LIGHT_BLUE = (byte) $e (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/examples/scroll/scroll.log b/src/test/ref/examples/scroll/scroll.log index a3f27a87c..7f3013c3d 100644 --- a/src/test/ref/examples/scroll/scroll.log +++ b/src/test/ref/examples/scroll/scroll.log @@ -21,7 +21,7 @@ main: scope:[main] from @2 call fillscreen to:main::@17 main::@17: scope:[main] from main - (byte) main::scroll#0 ← (number) 7 + (byte) main::scroll#0 ← (byte) 7 (byte*) main::nxt#0 ← (const byte*) TEXT to:main::@2 main::@2: scope:[main] from main::@17 main::@2 main::@7 @@ -55,7 +55,7 @@ main::@7: scope:[main] from main::@15 main::@5 main::@6: scope:[main] from main::@5 (byte*) main::nxt#6 ← phi( main::@5/(byte*) main::nxt#8 ) (byte) main::scroll#2 ← (number) 7 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@8 main::@8: scope:[main] from main::@6 main::@9 (byte) main::scroll#10 ← phi( main::@6/(byte) main::scroll#2 main::@9/(byte) main::scroll#11 ) @@ -218,12 +218,10 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $28 in Adding number conversion cast (unumber) $20 in (byte) fillscreen::fill#0 ← (number) $20 -Adding number conversion cast (unumber) 7 in (byte) main::scroll#0 ← (number) 7 Adding number conversion cast (unumber) $fe in (bool~) main::$1 ← *((const byte*) RASTER) != (number) $fe Adding number conversion cast (unumber) $ff in (bool~) main::$2 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) $ff in (bool~) main::$4 ← (byte) main::scroll#1 == (number) $ff Adding number conversion cast (unumber) 7 in (byte) main::scroll#2 ← (number) 7 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $27 in (bool~) main::$6 ← (byte) main::i#2 != (number) $27 Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) main::i#3 + (number) 1 Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) main::i#3 + (unumber)(number) 1 @@ -232,9 +230,7 @@ Adding number conversion cast (unumber) $27 in *((const byte*) main::line + (num Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$0 ← (byte*) fillscreen::screen#2 + (number) $3e8 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) fillscreen::fill#0 ← (unumber)(number) $20 -Inlining cast (byte) main::scroll#0 ← (unumber)(number) 7 Inlining cast (byte) main::scroll#2 ← (unumber)(number) 7 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 53266 @@ -242,12 +238,10 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53270 Simplifying constant integer cast $28 Simplifying constant integer cast $20 -Simplifying constant integer cast 7 Simplifying constant integer cast $fe Simplifying constant integer cast $ff Simplifying constant integer cast $ff Simplifying constant integer cast 7 -Simplifying constant integer cast 0 Simplifying constant integer cast $27 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -256,12 +250,10 @@ Simplifying constant integer cast $3e8 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $20 -Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 7 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/examples/scrollbig/scrollbig.log b/src/test/ref/examples/scrollbig/scrollbig.log index ad206faf9..95aba894b 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.log +++ b/src/test/ref/examples/scrollbig/scrollbig.log @@ -88,7 +88,7 @@ main::@return: scope:[main] from main::@8 return to:@return @1: scope:[] from @begin - (byte) scroll#2 ← (number) 7 + (byte) scroll#2 ← (byte) 7 to:@2 (void()) scroll_soft() @@ -139,7 +139,7 @@ scroll_soft::@return: scope:[scroll_soft] from scroll_soft::@1 @2: scope:[] from @1 (byte) scroll#19 ← phi( @1/(byte) scroll#2 ) (byte*) current_chargen#4 ← (const byte*) CHARGEN - (byte) current_bit#4 ← (number) 1 + (byte) current_bit#4 ← (byte) 1 to:@3 (void()) scroll_bit() @@ -272,7 +272,7 @@ next_char::@return: scope:[next_char] from next_char::@1 (void()) scroll_hard() scroll_hard: scope:[scroll_hard] from scroll_bit::@1 - (byte) scroll_hard::i#0 ← (number) 0 + (byte) scroll_hard::i#0 ← (byte) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@2 (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@2/(byte) scroll_hard::i#1 ) @@ -638,10 +638,8 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $20 in (byte) fillscreen::fill#0 ← (number) $20 Adding number conversion cast (unumber) $fe in (bool~) main::$1 ← *((const byte*) RASTER) != (number) $fe Adding number conversion cast (unumber) $ff in (bool~) main::$2 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) 7 in (byte) scroll#2 ← (number) 7 Adding number conversion cast (unumber) $ff in (bool~) scroll_soft::$0 ← (byte) scroll#3 == (number) $ff Adding number conversion cast (unumber) 7 in (byte) scroll#4 ← (number) 7 -Adding number conversion cast (unumber) 1 in (byte) current_bit#4 ← (number) 1 Adding number conversion cast (unumber) 2 in (number~) scroll_bit::$0 ← (byte) current_bit#13 / (number) 2 Adding number conversion cast (unumber) scroll_bit::$0 in (number~) scroll_bit::$0 ← (byte) current_bit#13 / (unumber)(number) 2 Adding number conversion cast (unumber) 0 in (bool~) scroll_bit::$1 ← (byte) current_bit#5 == (number) 0 @@ -657,7 +655,6 @@ Adding number conversion cast (unumber) $80+' ' in (byte) scroll_bit::b#1 ← (n Adding number conversion cast (unumber) $80 in (byte) scroll_bit::b#1 ← ((unumber)) (number) $80+(byte) ' ' Adding number conversion cast (unumber) $37 in *((const byte*) PROCPORT) ← (number) $37 Adding number conversion cast (unumber) 0 in (bool~) next_char::$0 ← (byte) next_char::c#0 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) scroll_hard::i#0 ← (number) 0 Adding number conversion cast (unumber) $27 in (bool~) scroll_hard::$0 ← (byte) scroll_hard::i#2 != (number) $27 Adding number conversion cast (unumber) $28*0 in (byte*~) scroll_hard::$1 ← (const byte*) SCREEN + (number) $28*(number) 0 Adding number conversion cast (unumber) $28*0 in (byte*~) scroll_hard::$2 ← (const byte*) SCREEN + (number) $28*(number) 0 @@ -694,14 +691,11 @@ Adding number conversion cast (unumber) scroll_hard::$24 in (number~) scroll_har Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$0 ← (byte*) fillscreen::screen#2 + (number) $3e8 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) fillscreen::fill#0 ← (unumber)(number) $20 -Inlining cast (byte) scroll#2 ← (unumber)(number) 7 Inlining cast (byte) scroll#4 ← (unumber)(number) 7 -Inlining cast (byte) current_bit#4 ← (unumber)(number) 1 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $32 Inlining cast (byte) current_bit#6 ← (unumber)(number) $80 Inlining cast (byte) scroll_bit::b#1 ← (unumber)(unumber)(number) $80+(byte) ' ' Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $37 -Inlining cast (byte) scroll_hard::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1 Simplifying constant pointer cast (byte*) 53248 @@ -712,10 +706,8 @@ Simplifying constant pointer cast (byte*) 53270 Simplifying constant integer cast $20 Simplifying constant integer cast $fe Simplifying constant integer cast $ff -Simplifying constant integer cast 7 Simplifying constant integer cast $ff Simplifying constant integer cast 7 -Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast $32 @@ -729,7 +721,6 @@ Simplifying constant integer cast (unumber)(number) $80+(byte) ' ' Simplifying constant integer cast $80 Simplifying constant integer cast $37 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $27 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -744,10 +735,8 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 7 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $32 @@ -760,7 +749,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $37 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.asm b/src/test/ref/examples/scrolllogo/scrolllogo.asm index a116b0391..0624a7f40 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.asm +++ b/src/test/ref/examples/scrolllogo/scrolllogo.asm @@ -267,11 +267,14 @@ sin16s_gen2: { sta.z sintab lda #>xsin sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -346,13 +349,9 @@ mul16s: { lda.z a+1 sta.z mul16u.a+1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u lda.z a+1 bpl __b2 @@ -382,10 +381,18 @@ mul16u: { .label res = 8 .label return = 8 .label b = $19 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a @@ -619,13 +626,6 @@ mulu16_sel: { sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u cpx #0 beq !e+ diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.cfg b/src/test/ref/examples/scrolllogo/scrolllogo.cfg index 1b17a4c39..6ebde52c3 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.cfg +++ b/src/test/ref/examples/scrolllogo/scrolllogo.cfg @@ -59,7 +59,7 @@ loop: scope:[loop] from main::@5 [25] phi() to:loop::@1 loop::@1: scope:[loop] from loop loop::@4 - [26] (word) xsin_idx#11 ← phi( loop/(byte) 0 loop::@4/(word) xsin_idx#19 ) + [26] (word) xsin_idx#11 ← phi( loop/(word) 0 loop::@4/(word) xsin_idx#19 ) to:loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2 [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 @@ -227,8 +227,8 @@ sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 [101] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) xsin sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [101] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [101] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [101] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [101] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 @@ -281,198 +281,199 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [127] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [127] (dword) mul16u::mb#0 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [127] (word) mul16u::b#2 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [128] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [128] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [128] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [129] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [129] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [129] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [130] return + [131] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [132] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [134] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [135] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [139] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [139] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [140] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [140] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [142] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [147] call mulu16_sel - [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [143] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [148] call mulu16_sel + [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [152] call mulu16_sel - [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [153] call mulu16_sel + [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [156] call mulu16_sel - [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [157] call mulu16_sel + [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [162] call mulu16_sel - [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [163] call mulu16_sel + [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [167] call mulu16_sel - [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [168] call mulu16_sel + [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [172] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [174] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [175] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [175] return + [176] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [177] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [177] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [177] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [180] call mul16u - [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [178] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [178] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [178] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [181] call mul16u + [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [185] return + [186] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [186] phi() - [187] call divr16u - [188] (word) divr16u::return#2 ← (word) divr16u::return#0 + [187] phi() + [188] call divr16u + [189] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [190] (word) divr16u::rem#4 ← (word) rem16u#1 - [191] call divr16u - [192] (word) divr16u::return#3 ← (word) divr16u::return#0 + [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [191] (word) divr16u::rem#4 ← (word) rem16u#1 + [192] call divr16u + [193] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [193] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [194] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [195] return + [196] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [196] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [196] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [197] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [197] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [197] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [197] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [197] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [197] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [198] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [198] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [198] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [198] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [198] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [203] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 + [204] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE + [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [209] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [209] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [210] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [210] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [212] (word) rem16u#1 ← (word) divr16u::rem#11 + [213] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [213] return + [214] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main::@3 main::@4 - [214] (byte) memset::c#4 ← phi( main::@3/(const byte) BLACK main::@4/(const byte) WHITE|(byte) 8 ) - [214] (void*) memset::str#3 ← phi( main::@3/(void*)(const byte*) SCREEN main::@4/(void*)(const byte*) COLS ) + [215] (byte) memset::c#4 ← phi( main::@3/(const byte) BLACK main::@4/(const byte) WHITE|(byte) 8 ) + [215] (void*) memset::str#3 ← phi( main::@3/(void*)(const byte*) SCREEN main::@4/(void*)(const byte*) COLS ) to:memset::@1 memset::@1: scope:[memset] from memset - [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 - [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 + [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [217] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [218] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset::@2 - [219] return + [220] return to:@return memset::@3: scope:[memset] from memset::@2 - [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index c178b963a..99a813da7 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -85,7 +85,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@6 @6: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@29 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -93,7 +93,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -201,7 +201,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#13 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -216,8 +216,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul16u: scope:[mul16u] from mul16s mulu16_sel (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#2 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -347,8 +347,8 @@ sin16s_gen2::@7: scope:[sin16s_gen2] from sin16s_gen2 (dword~) sin16s_gen2::$3 ← (dword) div32u16u::return#4 (word) rem16u#6 ← (word) rem16u#15 (dword) sin16s_gen2::step#0 ← (dword~) sin16s_gen2::$3 - (dword) sin16s_gen2::x#0 ← (number) 0 - (word) sin16s_gen2::i#0 ← (number) 0 + (dword) sin16s_gen2::x#0 ← (dword) 0 + (word) sin16s_gen2::i#0 ← (word) 0 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@7 sin16s_gen2::@9 (dword) sin16s_gen2::step#4 ← phi( sin16s_gen2::@7/(dword) sin16s_gen2::step#0 sin16s_gen2::@9/(dword) sin16s_gen2::step#1 ) @@ -420,7 +420,7 @@ sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 (dword) sin16s::x#3 ← phi( sin16s_gen2::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -716,7 +716,7 @@ main::@return: scope:[main] from main::@7 to:@return @30: scope:[] from @29 (word) rem16u#28 ← phi( @29/(word) rem16u#31 ) - (word) xsin_idx#2 ← (number) 0 + (word) xsin_idx#2 ← (word) 0 to:@32 (void()) loop() @@ -773,7 +773,7 @@ render_logo: scope:[render_logo] from loop::@6 (number~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (number) 8 (signed byte~) render_logo::$4 ← ((signed byte)) (number~) render_logo::$3 (signed byte) render_logo::x_char#0 ← (signed byte~) render_logo::$4 - (byte) render_logo::line#0 ← (number) 0 + (byte) render_logo::line#0 ← (byte) 0 (bool~) render_logo::$5 ← (signed word) render_logo::xpos#1 < (number) 0 if((bool~) render_logo::$5) goto render_logo::@1 to:render_logo::@3 @@ -931,22 +931,22 @@ SYMBOL TABLE SSA (const byte*) BGCOL = (byte*)(number) $d021 (const byte*) BGCOL2 = (byte*)(number) $d022 (const byte*) BGCOL3 = (byte*)(number) $d023 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) COLS = (byte*)(number) $d800 (const byte*) D016 = (byte*)(number) $d016 (const byte*) D018 = (byte*)(number) $d018 -(const byte) DARK_GREY = (number) $b +(const byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*)(number) $2000 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $400 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_MCM = (number) $10 -(const byte) WHITE = (number) 1 -(const word) XSIN_SIZE = (number) $200 +(const byte) VIC_MCM = (byte) $10 +(const byte) WHITE = (byte) 1 +(const word) XSIN_SIZE = (word) $200 (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (word~) div32u16u::$0 (word~) div32u16u::$1 @@ -1645,8 +1645,6 @@ SYMBOL TABLE SSA Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1656,7 +1654,6 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (unumber)(number) 1 @@ -1666,9 +1663,6 @@ Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul Adding number conversion cast (snumber) 0 in (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mul16s::$5 ← (signed word) mul16s::b#2 < (number) 0 Adding number conversion cast (snumber) 1 in (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl#0 >> (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen2::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen2::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1696,7 +1690,6 @@ Adding number conversion cast (unumber) 8 in (byte) memset::c#1 ← ((unumber)) Adding number conversion cast (unumber) $3e8 in (word) memset::num#1 ← (number) $3e8 Adding number conversion cast (snumber) -$140 in (signed word) sin16s_gen2::min#0 ← (number) -$140 Adding number conversion cast (snumber) $140 in (signed word) sin16s_gen2::max#0 ← (number) $140 -Adding number conversion cast (unumber) 0 in (word) xsin_idx#2 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) loop::$0 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in (word) xsin_idx#4 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) render_logo::$1 ← (byte~) render_logo::$0 & (number) 7 @@ -1704,7 +1697,6 @@ Adding number conversion cast (unumber) render_logo::$1 in (number~) render_logo Adding number conversion cast (unumber) render_logo::$2 in (number~) render_logo::$2 ← (const byte) VIC_MCM | (unumber~) render_logo::$1 Adding number conversion cast (snumber) 8 in (number~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (number) 8 Adding number conversion cast (snumber) render_logo::$3 in (number~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (snumber)(number) 8 -Adding number conversion cast (unumber) 0 in (byte) render_logo::line#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) render_logo::$5 ← (signed word) render_logo::xpos#1 < (number) 0 Adding number conversion cast (unumber) 0 in (byte) render_logo::screen_idx#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) render_logo::screen_idx#2 ← (number) 0 @@ -1733,19 +1725,13 @@ Adding number conversion cast (unumber) $28 in (number~) render_logo::$26 ← (n Adding number conversion cast (unumber) render_logo::$26 in (number~) render_logo::$26 ← (unumber)(number) $28 * (byte) render_logo::line#12 Adding number conversion cast (unumber) 0 in *((byte*~) render_logo::$27 + (byte) render_logo::screen_idx#16) ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#1 Inlining cast (word~) mul16s::$1 ← (word)(signed word) mul16s::b#1 Inlining cast (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 Inlining cast (signed dword~) mul16s::$7 ← (signed dword)(dword) mul16s::m#4 Inlining cast (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 -Inlining cast (dword) sin16s_gen2::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen2::i#0 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s_gen2::$8 ← (signed word)(word~) sin16s_gen2::$7 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -1764,11 +1750,9 @@ Inlining cast (byte) memset::c#1 ← (unumber)(const byte) WHITE|(unumber)(numbe Inlining cast (word) memset::num#1 ← (unumber)(number) $3e8 Inlining cast (signed word) sin16s_gen2::min#0 ← (snumber)(number) -$140 Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $140 -Inlining cast (word) xsin_idx#2 ← (unumber)(number) 0 Inlining cast (word) xsin_idx#4 ← (unumber)(number) 0 Inlining cast (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#1 Inlining cast (signed byte~) render_logo::$4 ← (signed byte)(snumber~) render_logo::$3 -Inlining cast (byte) render_logo::line#0 ← (unumber)(number) 0 Inlining cast (byte~) render_logo::$18 ← (byte)(signed byte~) render_logo::$17 Inlining cast (byte) render_logo::screen_idx#1 ← (unumber)(number) 0 Inlining cast (byte~) render_logo::$6 ← (byte)(signed byte) render_logo::x_char#2 @@ -1791,8 +1775,6 @@ Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1803,7 +1785,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -1811,9 +1792,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -1834,7 +1812,6 @@ Simplifying constant integer cast 8 Simplifying constant integer cast $3e8 Simplifying constant integer cast -$140 Simplifying constant integer cast $140 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 7 @@ -1844,7 +1821,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast $28 @@ -1860,8 +1836,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1870,7 +1844,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -1878,9 +1851,6 @@ Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -1900,12 +1870,10 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (word) $3e8 Finalized signed number type (signed word) -$140 Finalized signed number type (signed word) $140 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized signed number type (signed byte) 8 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -1983,7 +1951,6 @@ Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#2 Alias (word) mul16u::a#3 = (word) mul16u::a#4 (word) mul16u::a#7 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#4 (dword) mul16u::return#1 @@ -2239,8 +2206,8 @@ Resolved ranged next value [432] render_logo::line#6 ← ++ render_logo::line#11 Resolved ranged comparison value [434] unroll if(render_logo::line#6!=rangelast(0,5)) goto render_logo::@24 to (number) 6 Resolved ranged next value [447] render_logo::line#8 ← ++ render_logo::line#12 to ++ Resolved ranged comparison value [449] unroll if(render_logo::line#8!=rangelast(0,5)) goto render_logo::@32 to (number) 6 -Eliminating unused variable (void*) memset::return#2 and assignment [158] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [160] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#2 and assignment [159] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [161] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) render_logo::logo_idx#0 Eliminating unused constant (const byte) render_logo::screen_idx#0 Eliminating unused constant (const byte) render_logo::line#0 @@ -2274,9 +2241,9 @@ Alias (byte~) render_logo::$22 = (byte~) render_logo::$20 Successful SSA optimization Pass2AliasElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [58] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [148] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [151] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 +Constant right-side identified [149] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff +Constant right-side identified [152] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = =(signed byte) 0) goto mul16s::@2 +if() condition always true - replacing block destination [47] if((const signed word) mul16s::b#0>=(signed byte) 0) goto mul16s::@2 Successful SSA optimization Pass2ConstantIfs Eliminating variable (word~) mul16s::$13 from unused block mul16s::@4 Eliminating variable (word~) mul16s::$14 from unused block mul16s::@4 @@ -2300,17 +2267,17 @@ Removing unused block mul16s::@4 Successful SSA optimization Pass2EliminateUnusedBlocks Alias (dword) mul16s::m#4 = (dword) mul16s::m#5 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [49] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1 -Constant right-side identified [137] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 -Constant right-side identified [139] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 +Constant right-side identified [50] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1 +Constant right-side identified [138] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 +Constant right-side identified [140] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::$1 = sin16s_gen2::ampl#0>>1 Constant (const word) main::toD0181_$2 = main::toD0181_$1*4 Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [48] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 -Constant right-side identified [135] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 -Constant right-side identified [136] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f +Constant right-side identified [49] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 +Constant right-side identified [136] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 +Constant right-side identified [137] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1 Constant (const byte) main::toD0181_$3 = >main::toD0181_$2 @@ -2318,14 +2285,14 @@ Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f Successful SSA optimization Pass2ConstantIdentification Simplifying constant evaluating to zero (const signed word) sin16s_gen2::min#0+(const signed word) sin16s_gen2::$1 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero sin16s_gen2::$8 in [63] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 +Simplifying expression containing zero sin16s_gen2::$8 in [64] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const signed word) sin16s_gen2::$1 Eliminating unused constant (const signed word) sin16s_gen2::offs#0 Successful SSA optimization PassNEliminateUnusedVars Alias (signed word~) sin16s_gen2::$9 = (signed word~) sin16s_gen2::$8 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [134] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 +Constant right-side identified [135] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7 Successful SSA optimization Pass2ConstantIdentification @@ -2333,19 +2300,19 @@ Unrolling loop Loop head: render_logo::@7 tails: render_logo::@7 blocks: render_ Successful SSA optimization Pass2LoopUnroll Identical Phi Values (byte) render_logo::line#9 (const byte) render_logo::line#1 Successful SSA optimization Pass2IdenticalPhiElimination -Negating conditional jump and destination [173] if((byte) render_logo::line#2==(byte) 6) goto render_logo::@8 +Negating conditional jump and destination [174] if((byte) render_logo::line#2==(byte) 6) goto render_logo::@8 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Constant right-side identified [169] (byte~) render_logo::$8 ← (byte) $28 * (const byte) render_logo::line#1 -Constant right-side identified [172] (byte) render_logo::line#2 ← ++ (const byte) render_logo::line#1 +Constant right-side identified [170] (byte~) render_logo::$8 ← (byte) $28 * (const byte) render_logo::line#1 +Constant right-side identified [173] (byte) render_logo::line#2 ← ++ (const byte) render_logo::line#1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) render_logo::$8 = $28*render_logo::line#1 Constant (const byte) render_logo::line#2 = ++render_logo::line#1 Successful SSA optimization Pass2ConstantIdentification -if() condition always false - eliminating [173] if((const byte) render_logo::line#2==(byte) 6) goto render_logo::@8 +if() condition always false - eliminating [174] if((const byte) render_logo::line#2==(byte) 6) goto render_logo::@8 Successful SSA optimization Pass2ConstantIfs Simplifying constant evaluating to zero (byte) $28*(const byte) render_logo::line#1 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero SCREEN in [170] (byte*~) render_logo::$9 ← (const byte*) SCREEN + (const byte) render_logo::$8 +Simplifying expression containing zero SCREEN in [171] (byte*~) render_logo::$9 ← (const byte*) SCREEN + (const byte) render_logo::$8 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) render_logo::$8 Successful SSA optimization PassNEliminateUnusedVars @@ -2822,10 +2789,10 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) render_logo::$84 = SCREEN+render_logo::$83 Successful SSA optimization Pass2ConstantIdentification Inlining Noop Cast [37] (byte) render_logo::logo_start#0 ← (byte)(signed byte) render_logo::x_char#0 keeping render_logo::x_char#0 -Inlining Noop Cast [164] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [166] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [208] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 -Inlining Noop Cast [210] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [165] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [167] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [209] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [211] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [64] (byte) render_logo::logo_idx#1 ← (byte)(signed byte~) render_logo::$17 keeping render_logo::logo_idx#1 Inlining Noop Cast [103] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 @@ -2921,7 +2888,7 @@ Constant inlined main::toD0181_$6 = >(word)(const byte*) LOGO/(byte) 4 Constant inlined main::toD0181_$5 = >(word)(const byte*) LOGO Constant inlined main::toD0181_$4 = (word)(const byte*) LOGO Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4 -Constant inlined xsin_idx#16 = (byte) 0 +Constant inlined xsin_idx#16 = (word) 0 Constant inlined sin16s_gen2::sintab#1 = (const signed word*) xsin Constant inlined render_logo::$44 = (const byte*) SCREEN+(byte) $28*++++++++++(byte) 0 Constant inlined memset::c#0 = (const byte) BLACK @@ -2934,7 +2901,7 @@ Constant inlined divr16u::i#0 = (byte) 0 Constant inlined render_logo::$51 = (byte) $28*++++++(byte) 0 Constant inlined render_logo::$54 = (const byte*) SCREEN+(byte) $28*++++++++(byte) 0 Constant inlined render_logo::$53 = (byte) $28*++++++++(byte) 0 -Constant inlined sin16s_gen2::x#0 = (byte) 0 +Constant inlined sin16s_gen2::x#0 = (dword) 0 Constant inlined render_logo::$56 = (const byte*) SCREEN+(byte) $28*++++++++++(byte) 0 Constant inlined render_logo::$55 = (byte) $28*++++++++++(byte) 0 Constant inlined render_logo::screen_idx#1 = (byte) 0 @@ -2964,7 +2931,7 @@ Constant inlined render_logo::$9 = (const byte*) SCREEN Constant inlined render_logo::$72 = (const byte*) SCREEN+(byte) $28*++(byte) 0 Constant inlined render_logo::line#14 = ++++(byte) 0 Constant inlined render_logo::$71 = (byte) $28*++(byte) 0 -Constant inlined sin16s_gen2::i#0 = (byte) 0 +Constant inlined sin16s_gen2::i#0 = (word) 0 Constant inlined render_logo::$74 = (byte) $28*++++(byte) 0 Constant inlined render_logo::$75 = (const byte*) SCREEN+(byte) $28*++++(byte) 0 Constant inlined memset::num#1 = (word) $3e8 @@ -2988,8 +2955,8 @@ Constant inlined render_logo::line#30 = ++++++++(byte) 0 Constant inlined render_logo::line#32 = ++++++++++(byte) 0 Constant inlined xsin_idx#4 = (byte) 0 Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28 -Constant inlined divr16u::quotient#0 = (byte) 0 -Constant inlined mul16u::res#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined render_logo::$13 = (const byte*) SCREEN Constant inlined divr16u::divisor#1 = (const word) XSIN_SIZE Constant inlined divr16u::divisor#0 = (const word) XSIN_SIZE @@ -3046,7 +3013,7 @@ Successful SSA optimization Pass2ConstantSimplification Identical Phi Values (word) divr16u::divisor#6 (const word) XSIN_SIZE Identical Phi Values (word) memset::num#2 (word) $3e8 Successful SSA optimization Pass2IdenticalPhiElimination -if() condition always false - eliminating [202] if((word) $3e8<=(byte) 0) goto memset::@1 +if() condition always false - eliminating [203] if((word) $3e8<=(byte) 0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs Added new block during phi lifting main::@8(between main::@1 and main::@1) Added new block during phi lifting loop::@16(between loop::@15 and loop::@11) @@ -3090,9 +3057,9 @@ Calls in [main] to memset:17 memset:19 sin16s_gen2:26 loop:28 Calls in [loop] to render_logo:40 Calls in [sin16s_gen2] to div32u16u:120 sin16s:127 mul16s:130 Calls in [mul16s] to mul16u:143 -Calls in [sin16s] to mulu16_sel:187 mulu16_sel:194 mulu16_sel:199 mulu16_sel:207 mulu16_sel:214 -Calls in [mulu16_sel] to mul16u:232 -Calls in [div32u16u] to divr16u:239 divr16u:244 +Calls in [sin16s] to mulu16_sel:188 mulu16_sel:195 mulu16_sel:200 mulu16_sel:208 mulu16_sel:215 +Calls in [mulu16_sel] to mul16u:233 +Calls in [div32u16u] to divr16u:240 divr16u:245 Created 38 initial phi equivalence classes Coalesced [31] main::ch#3 ← main::ch#1 @@ -3112,44 +3079,44 @@ Coalesced [140] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 Coalesced [142] mul16u::a#8 ← mul16u::a#1 Coalesced [150] mul16s::m#7 ← mul16s::m#1 Coalesced [154] mul16s::m#8 ← mul16s::m#0 -Coalesced [156] mul16u::a#10 ← mul16u::a#6 -Coalesced [157] mul16u::mb#7 ← mul16u::mb#0 -Coalesced [165] mul16u::res#9 ← mul16u::res#1 -Coalesced [169] mul16u::a#11 ← mul16u::a#0 -Coalesced [170] mul16u::res#7 ← mul16u::res#6 -Coalesced [171] mul16u::mb#8 ← mul16u::mb#1 -Coalesced (already) [172] mul16u::res#8 ← mul16u::res#2 -Coalesced [175] sin16s::x#9 ← sin16s::x#1 -Coalesced [179] sin16s::x#11 ← sin16s::x#2 -Coalesced [185] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [186] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [192] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [193] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [198] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [205] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [206] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [212] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [213] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [221] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [225] sin16s::x#10 ← sin16s::x#4 -Coalesced [226] sin16s::x#8 ← sin16s::x#0 -Coalesced [230] mul16u::mb#6 ← mul16u::b#1 -Coalesced [231] mul16u::a#9 ← mul16u::a#2 -Coalesced [243] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [250] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [251] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [258] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [265] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [266] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [272] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [273] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [274] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [275] divr16u::i#7 ← divr16u::i#1 -Coalesced [276] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [277] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [278] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [288] memset::dst#5 ← memset::dst#1 -Coalesced down to 26 phi equivalence classes +Coalesced [157] mul16u::a#10 ← mul16u::a#6 +Coalesced [158] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [166] mul16u::res#9 ← mul16u::res#1 +Coalesced [170] mul16u::a#11 ← mul16u::a#0 +Coalesced [171] mul16u::res#7 ← mul16u::res#6 +Coalesced [172] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [173] mul16u::res#8 ← mul16u::res#2 +Coalesced [176] sin16s::x#9 ← sin16s::x#1 +Coalesced [180] sin16s::x#11 ← sin16s::x#2 +Coalesced [186] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [187] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [193] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [194] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [199] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [206] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [207] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [213] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [214] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [222] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [226] sin16s::x#10 ← sin16s::x#4 +Coalesced [227] sin16s::x#8 ← sin16s::x#0 +Coalesced [231] mul16u::b#3 ← mul16u::b#1 +Coalesced [232] mul16u::a#9 ← mul16u::a#2 +Coalesced [244] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [251] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [252] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [259] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [266] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [267] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [273] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [274] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [275] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [276] divr16u::i#7 ← divr16u::i#1 +Coalesced [277] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [278] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [279] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [289] memset::dst#5 ← memset::dst#1 +Coalesced down to 27 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @30 Culled Empty Block (label) @33 @@ -3286,7 +3253,7 @@ loop: scope:[loop] from main::@5 [25] phi() to:loop::@1 loop::@1: scope:[loop] from loop loop::@4 - [26] (word) xsin_idx#11 ← phi( loop/(byte) 0 loop::@4/(word) xsin_idx#19 ) + [26] (word) xsin_idx#11 ← phi( loop/(word) 0 loop::@4/(word) xsin_idx#19 ) to:loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2 [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 @@ -3454,8 +3421,8 @@ sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 [101] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) xsin sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [101] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [101] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [101] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [101] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 @@ -3508,200 +3475,201 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [127] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [127] (dword) mul16u::mb#0 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [127] (word) mul16u::b#2 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [128] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [128] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [128] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [129] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [129] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [129] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [130] return + [131] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [132] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [134] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [135] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [139] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [139] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [140] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [140] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [142] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [147] call mulu16_sel - [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [143] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [148] call mulu16_sel + [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [152] call mulu16_sel - [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [153] call mulu16_sel + [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [156] call mulu16_sel - [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [157] call mulu16_sel + [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [162] call mulu16_sel - [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [163] call mulu16_sel + [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [167] call mulu16_sel - [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [168] call mulu16_sel + [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [172] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [174] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [175] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [175] return + [176] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [177] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [177] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [177] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [180] call mul16u - [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [178] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [178] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [178] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [181] call mul16u + [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [185] return + [186] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [186] phi() - [187] call divr16u - [188] (word) divr16u::return#2 ← (word) divr16u::return#0 + [187] phi() + [188] call divr16u + [189] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [190] (word) divr16u::rem#4 ← (word) rem16u#1 - [191] call divr16u - [192] (word) divr16u::return#3 ← (word) divr16u::return#0 + [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [191] (word) divr16u::rem#4 ← (word) rem16u#1 + [192] call divr16u + [193] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [193] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [194] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [195] return + [196] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [196] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [196] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [197] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [197] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [197] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [197] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [197] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [197] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [198] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [198] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [198] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [198] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [198] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [203] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 + [204] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE + [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [209] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [209] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [210] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [210] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [212] (word) rem16u#1 ← (word) divr16u::rem#11 + [213] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [213] return + [214] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main::@3 main::@4 - [214] (byte) memset::c#4 ← phi( main::@3/(const byte) BLACK main::@4/(const byte) WHITE|(byte) 8 ) - [214] (void*) memset::str#3 ← phi( main::@3/(void*)(const byte*) SCREEN main::@4/(void*)(const byte*) COLS ) + [215] (byte) memset::c#4 ← phi( main::@3/(const byte) BLACK main::@4/(const byte) WHITE|(byte) 8 ) + [215] (void*) memset::str#3 ← phi( main::@3/(void*)(const byte*) SCREEN main::@4/(void*)(const byte*) COLS ) to:memset::@1 memset::@1: scope:[memset] from memset - [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 - [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 + [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [217] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [218] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset::@2 - [219] return + [220] return to:@return memset::@3: scope:[memset] from memset::@2 - [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 @@ -3790,9 +3758,10 @@ VARIABLE REGISTER WEIGHTS (word) mul16u::a#1 4.0 (word) mul16u::a#2 2.0 (word) mul16u::a#3 67.66666666666666 -(word) mul16u::a#6 6.0 +(word) mul16u::a#6 3.0 (word) mul16u::b (word) mul16u::b#1 4.0 +(word) mul16u::b#2 2.0 (dword) mul16u::mb (dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 @@ -3925,7 +3894,6 @@ VARIABLE REGISTER WEIGHTS (word) xsin_idx#19 11.0 (word) xsin_idx#3 11.0 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 Initial phi equivalence classes [ main::ch#2 main::ch#1 ] [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] @@ -3937,7 +3905,7 @@ Initial phi equivalence classes [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -4025,7 +3993,7 @@ Complete equivalence classes [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -4112,7 +4080,7 @@ Allocated zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] Allocated zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] Allocated zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] Allocated zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] -Allocated zp[2]:21 [ mul16u::b#1 ] +Allocated zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] Allocated zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] Allocated zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -4276,12 +4244,12 @@ main: { lda #VIC_MCM sta D016 // [13] call memset - // [214] phi from main::@3 to memset [phi:main::@3->memset] + // [215] phi from main::@3 to memset [phi:main::@3->memset] memset_from___b3: - // [214] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuz1=vbuc1 + // [215] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuz1=vbuc1 lda #BLACK sta.z memset.c - // [214] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [215] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -4293,12 +4261,12 @@ main: { // main::@4 __b4: // [15] call memset - // [214] phi from main::@4 to memset [phi:main::@4->memset] + // [215] phi from main::@4 to memset [phi:main::@4->memset] memset_from___b4: - // [214] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuz1=vbuc1 + // [215] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuz1=vbuc1 lda #WHITE|8 sta.z memset.c - // [214] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [215] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -4357,7 +4325,7 @@ loop: { .label xpos = $3d // [26] phi from loop to loop::@1 [phi:loop->loop::@1] __b1_from_loop: - // [26] phi (word) xsin_idx#11 = (byte) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1 + // [26] phi (word) xsin_idx#11 = (word) 0 [phi:loop->loop::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z xsin_idx lda #>0 @@ -4836,7 +4804,7 @@ sin16s_gen2: { .label x = $b .label i = 9 // [98] call div32u16u - // [186] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [187] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u // [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 @@ -4867,14 +4835,16 @@ sin16s_gen2: { sta.z sintab lda #>xsin sta.z sintab+1 - // [101] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [101] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [101] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [101] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5012,15 +4982,11 @@ mul16s: { // [127] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [127] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [127] phi (dword) mul16u::mb#0 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vduz1=vduc1 + // [127] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -5103,21 +5069,31 @@ mul16u: { .label return = $68 .label b = $15 .label return_1 = $95 - // [128] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [128] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [128] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [128] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [129] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -5125,22 +5101,22 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [130] return + // [131] return rts // mul16u::@2 __b2: - // [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 + // [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [132] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 + // [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -5154,26 +5130,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [134] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [135] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [134] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [135] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [128] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [129] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [128] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [128] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [128] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [129] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // sin16s @@ -5198,7 +5174,7 @@ sin16s: { .label sinx = $26 // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = $21 - // [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -5218,7 +5194,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [139] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [140] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [139] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 + // [140] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [139] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [139] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [140] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [139] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 + // [140] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [139] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -5268,7 +5244,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [142] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [143] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [142] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [143] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -5310,31 +5286,31 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [147] call mulu16_sel - // [177] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [148] call mulu16_sel + // [178] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return lda.z mulu16_sel.return_5+1 @@ -5342,31 +5318,31 @@ sin16s: { jmp __b7 // sin16s::@7 __b7: - // [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 + // [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 lda.z x2 sta.z mulu16_sel.v1 lda.z x2+1 sta.z mulu16_sel.v1+1 - // [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [152] call mulu16_sel - // [177] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [153] call mulu16_sel + // [178] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_1 lda.z mulu16_sel.return_5+1 @@ -5374,30 +5350,30 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 + // [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x3 lda.z mulu16_sel.return_1+1 sta.z x3+1 - // [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [156] call mulu16_sel - // [177] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [157] call mulu16_sel + // [178] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [177] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [178] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_2 lda.z mulu16_sel.return_5+1 @@ -5405,12 +5381,12 @@ sin16s: { jmp __b9 // sin16s::@9 __b9: - // [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 + // [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 lda.z mulu16_sel.return_2 sta.z x3_6 lda.z mulu16_sel.return_2+1 sta.z x3_6+1 - // [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -5418,26 +5394,26 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [162] call mulu16_sel - // [177] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [163] call mulu16_sel + // [178] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_3 lda.z mulu16_sel.return_5+1 @@ -5445,31 +5421,31 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 + // [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 lda.z mulu16_sel.return_3 sta.z x4 lda.z mulu16_sel.return_3+1 sta.z x4+1 - // [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 + // [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 lda.z x4 sta.z mulu16_sel.v1 lda.z x4+1 sta.z mulu16_sel.v1+1 - // [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [167] call mulu16_sel - // [177] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [168] call mulu16_sel + // [178] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_4 lda.z mulu16_sel.return_5+1 @@ -5477,12 +5453,12 @@ sin16s: { jmp __b11 // sin16s::@11 __b11: - // [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 + // [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 lda.z mulu16_sel.return_4 sta.z x5 lda.z mulu16_sel.return_4+1 sta.z x5+1 - // [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 + // [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 lda.z x5+1 lsr sta.z x5_128+1 @@ -5495,7 +5471,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 + // [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z usinx clc adc.z x5_128 @@ -5503,14 +5479,14 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx_1+1 - // [172] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 + // [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 + // [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z usinx_1 @@ -5518,21 +5494,21 @@ sin16s: { lda #0 sbc.z usinx_1+1 sta.z sinx+1 - // [174] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [175] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [174] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [175] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [175] return + // [176] return rts // sin16s::@12 __b12: - // [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 + // [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 lda.z usinx_1 sta.z return_1 lda.z usinx_1+1 @@ -5555,30 +5531,23 @@ mulu16_sel: { .label return_4 = $8d .label select = $2c .label return_5 = $a1 - // [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 + // [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 lda.z v2 sta.z mul16u.b lda.z v2+1 sta.z mul16u.b+1 - // [180] call mul16u + // [181] call mul16u // [127] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [127] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [127] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [127] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 + // [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res sta.z mul16u.return_1 lda.z mul16u.res+1 @@ -5590,7 +5559,7 @@ mulu16_sel: { jmp __b1 // mulu16_sel::@1 __b1: - // [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 + // [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 lda.z mul16u.return_1 sta.z __0 lda.z mul16u.return_1+1 @@ -5599,7 +5568,7 @@ mulu16_sel: { sta.z __0+2 lda.z mul16u.return_1+3 sta.z __0+3 - // [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 + // [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 lda.z __0 sta.z __1 lda.z __0+1 @@ -5618,7 +5587,7 @@ mulu16_sel: { dex bne !- !e: - // [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_5 lda.z __1+3 @@ -5626,7 +5595,7 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [185] return + // [186] return rts } // div32u16u @@ -5637,21 +5606,21 @@ div32u16u: { .label quotient_lo = $a9 .label return = $ab .label return_1 = $52 - // [187] call divr16u - // [196] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [188] call divr16u + // [197] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [196] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [196] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [188] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [189] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_1 lda.z divr16u.return+1 @@ -5659,27 +5628,27 @@ div32u16u: { jmp __b1 // div32u16u::@1 __b1: - // [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return_1 sta.z quotient_hi lda.z divr16u.return_1+1 sta.z quotient_hi+1 - // [190] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 + // [191] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 lda.z rem16u sta.z divr16u.rem lda.z rem16u+1 sta.z divr16u.rem+1 - // [191] call divr16u - // [196] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [192] call divr16u + // [197] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [196] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [196] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [197] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [192] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [193] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_2 lda.z divr16u.return+1 @@ -5687,12 +5656,12 @@ div32u16u: { jmp __b2 // div32u16u::@2 __b2: - // [193] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 + // [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 lda.z divr16u.return_2 sta.z quotient_lo lda.z divr16u.return_2+1 sta.z quotient_lo+1 - // [194] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -5704,7 +5673,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [195] return + // [196] return rts } // divr16u @@ -5723,63 +5692,63 @@ divr16u: { .label return = $31 .label return_1 = $a3 .label return_2 = $a7 - // [197] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [198] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [197] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + // [198] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [197] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [198] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [197] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [197] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [197] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [198] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [197] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [197] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [197] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [197] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [198] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [198] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [198] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 + // [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 lda.z dividend+1 sta.z __1 - // [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z __1 sta.z __2 - // [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 + // [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda.z __2 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [203] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [204] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [203] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [204] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>XSIN_SIZE bcc __b3_from___b2 @@ -5791,12 +5760,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 + // [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #XSIN_SIZE sta.z rem+1 - // [209] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [210] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [209] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [209] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [210] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [210] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 + // [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 + // [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [212] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 + // [213] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 lda.z rem sta.z rem16u lda.z rem+1 @@ -5829,7 +5798,7 @@ divr16u: { jmp __breturn // divr16u::@return __breturn: - // [213] return + // [214] return rts } // memset @@ -5843,7 +5812,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 + // [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 lda.z str clc adc #<$3e8 @@ -5851,19 +5820,19 @@ memset: { lda.z str+1 adc #>$3e8 sta.z end+1 - // [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + // [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 lda.z str sta.z dst lda.z str+1 sta.z dst+1 - // [217] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [218] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [217] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [218] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -5873,15 +5842,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [219] return + // [220] return rts // memset::@3 __b3: - // [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + // [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 lda.z c ldy #0 sta (dst),y - // [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -5953,64 +5922,65 @@ Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16 Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:33 [ sin16s::isUpper#2 ] Removing always clobbered register reg byte a as potential for zp[1]:44 [ mulu16_sel::select#5 ] -Statement [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [188] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [190] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [192] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [193] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [194] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::return#0 ] ) always clobbers reg byte a -Statement [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [189] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [191] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [193] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::return#0 ] ) always clobbers reg byte a +Statement [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] -Statement [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [212] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::memset:13 [ memset::str#3 memset::c#4 memset::end#0 ] main:3::memset:15 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [213] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::memset:13 [ memset::str#3 memset::c#4 memset::end#0 ] main:3::memset:15 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:54 [ memset::c#4 ] -Statement [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#4 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#4 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:54 [ memset::c#4 ] Statement [6] *((const byte*) BORDERCOL) ← (const byte) WHITE [ ] ( main:3 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY [ ] ( main:3 [ ] ) always clobbers reg byte a @@ -6062,60 +6032,61 @@ Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16 Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167::mul16u:180 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:147 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:152 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:156 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:162 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:167 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [188] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [190] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [192] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [193] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [194] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::return#0 ] ) always clobbers reg byte a -Statement [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [212] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:187 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:191 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::memset:13 [ memset::str#3 memset::c#4 memset::end#0 ] main:3::memset:15 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#4 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [189] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [191] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [193] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::return#0 ] ) always clobbers reg byte a +Statement [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [213] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::memset:13 [ memset::str#3 memset::c#4 memset::end#0 ] main:3::memset:15 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#4 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ main::ch#2 main::ch#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] : zp[2]:3 , Potential registers zp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] : zp[1]:5 , reg byte x , reg byte y , @@ -6126,7 +6097,7 @@ Potential registers zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:9 , Potential registers zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:11 , Potential registers zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:15 , Potential registers zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] : zp[4]:17 , -Potential registers zp[2]:21 [ mul16u::b#1 ] : zp[2]:21 , +Potential registers zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] : zp[2]:21 , Potential registers zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:23 , Potential registers zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:25 , Potential registers zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:29 , @@ -6206,7 +6177,7 @@ Potential registers zp[2]:179 [ memset::end#0 ] : zp[2]:179 , REGISTER UPLIFT SCOPES Uplift Scope [render_logo] 506.94: zp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] 499.17: zp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] 271.07: zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] 259.71: zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] 202: zp[1]:71 [ render_logo::$33 ] 202: zp[1]:72 [ render_logo::$36 ] 202: zp[1]:73 [ render_logo::$39 ] 202: zp[1]:74 [ render_logo::$42 ] 202: zp[1]:75 [ render_logo::$45 ] 202: zp[1]:77 [ render_logo::$73 ] 202: zp[1]:78 [ render_logo::$76 ] 202: zp[1]:79 [ render_logo::$79 ] 202: zp[1]:80 [ render_logo::$82 ] 202: zp[1]:81 [ render_logo::$85 ] 4: zp[1]:65 [ render_logo::$0 ] 4: zp[1]:66 [ render_logo::$1 ] 4: zp[1]:67 [ render_logo::$2 ] 2.14: zp[2]:63 [ render_logo::xpos#0 ] 2: zp[2]:68 [ render_logo::$3 ] 2: zp[1]:76 [ render_logo::logo_idx#1 ] 0.36: zp[1]:70 [ render_logo::x_char#0 ] -Uplift Scope [mul16u] 346.86: zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:116 [ mul16u::$1 ] 180.67: zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp[2]:21 [ mul16u::b#1 ] 4: zp[4]:104 [ mul16u::return#2 ] 4: zp[4]:149 [ mul16u::return#3 ] +Uplift Scope [mul16u] 346.86: zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:116 [ mul16u::$1 ] 177.67: zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 6: zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] 4: zp[4]:104 [ mul16u::return#2 ] 4: zp[4]:149 [ mul16u::return#3 ] Uplift Scope [divr16u] 106.92: zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:175 [ divr16u::$1 ] 22: zp[1]:176 [ divr16u::$2 ] 18.19: zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:163 [ divr16u::return#2 ] 4: zp[2]:167 [ divr16u::return#3 ] Uplift Scope [sin16s] 27.5: zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:90 [ sin16s::return#0 ] 13: zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:117 [ sin16s::$4 ] 4: zp[2]:125 [ sin16s::x2#0 ] 4: zp[2]:133 [ sin16s::x3_6#0 ] 4: zp[2]:139 [ sin16s::x4#0 ] 4: zp[2]:143 [ sin16s::x5#0 ] 4: zp[2]:145 [ sin16s::x5_128#0 ] 1: zp[2]:129 [ sin16s::x3#0 ] 1: zp[2]:147 [ sin16s::usinx#1 ] 0.64: zp[2]:121 [ sin16s::x1#0 ] 0.33: zp[2]:135 [ sin16s::usinx#0 ] 0.06: zp[1]:33 [ sin16s::isUpper#2 ] Uplift Scope [sin16s_gen2] 24.54: zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp[4]:98 [ sin16s_gen2::$6 ] 13.75: zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp[2]:102 [ sin16s_gen2::$9 ] 10.33: zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp[4]:86 [ sin16s_gen2::step#0 ] @@ -6218,61 +6189,61 @@ Uplift Scope [main] 38.5: zp[1]:2 [ main::ch#2 main::ch#1 ] Uplift Scope [] 26.12: zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 0.8: zp[2]:177 [ rem16u#1 ] Uplift Scope [div32u16u] 4: zp[4]:82 [ div32u16u::return#2 ] 4: zp[2]:169 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:171 [ div32u16u::return#0 ] 0.8: zp[2]:165 [ div32u16u::quotient_hi#0 ] -Uplifting [mul16u] best 75074 combination zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:21 [ mul16u::b#1 ] zp[4]:104 [ mul16u::return#2 ] zp[4]:149 [ mul16u::return#3 ] -Uplifting [divr16u] best 74864 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:163 [ divr16u::return#2 ] zp[2]:167 [ divr16u::return#3 ] -Uplifting [sin16s] best 74855 combination zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:90 [ sin16s::return#0 ] zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:117 [ sin16s::$4 ] zp[2]:125 [ sin16s::x2#0 ] zp[2]:133 [ sin16s::x3_6#0 ] zp[2]:139 [ sin16s::x4#0 ] zp[2]:143 [ sin16s::x5#0 ] zp[2]:145 [ sin16s::x5_128#0 ] zp[2]:129 [ sin16s::x3#0 ] zp[2]:147 [ sin16s::usinx#1 ] zp[2]:121 [ sin16s::x1#0 ] zp[2]:135 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 74855 combination zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:98 [ sin16s_gen2::$6 ] zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:102 [ sin16s_gen2::$9 ] zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:86 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 74839 combination zp[2]:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:123 [ mulu16_sel::return#0 ] zp[2]:127 [ mulu16_sel::return#1 ] zp[2]:131 [ mulu16_sel::return#2 ] zp[2]:137 [ mulu16_sel::return#10 ] zp[2]:141 [ mulu16_sel::return#11 ] zp[4]:153 [ mulu16_sel::$0 ] zp[4]:157 [ mulu16_sel::$1 ] zp[2]:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [loop] best 74839 combination zp[2]:57 [ loop::$7 ] zp[2]:59 [ loop::$2 ] zp[2]:61 [ loop::xpos#0 ] -Uplifting [mul16s] best 74839 combination zp[4]:94 [ mul16s::return#2 ] zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp[4]:112 [ mul16s::return#0 ] zp[2]:108 [ mul16s::$9 ] zp[2]:110 [ mul16s::$16 ] zp[2]:92 [ mul16s::a#0 ] -Uplifting [memset] best 74823 combination zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:52 [ memset::str#3 ] -Uplifting [main] best 74703 combination reg byte x [ main::ch#2 main::ch#1 ] -Uplifting [] best 74703 combination zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp[2]:177 [ rem16u#1 ] -Uplifting [div32u16u] best 74703 combination zp[4]:82 [ div32u16u::return#2 ] zp[2]:169 [ div32u16u::quotient_lo#0 ] zp[4]:171 [ div32u16u::return#0 ] zp[2]:165 [ div32u16u::quotient_hi#0 ] +Uplifting [mul16u] best 75504 combination zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] zp[4]:104 [ mul16u::return#2 ] zp[4]:149 [ mul16u::return#3 ] +Uplifting [divr16u] best 75294 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:163 [ divr16u::return#2 ] zp[2]:167 [ divr16u::return#3 ] +Uplifting [sin16s] best 75285 combination zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:90 [ sin16s::return#0 ] zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:117 [ sin16s::$4 ] zp[2]:125 [ sin16s::x2#0 ] zp[2]:133 [ sin16s::x3_6#0 ] zp[2]:139 [ sin16s::x4#0 ] zp[2]:143 [ sin16s::x5#0 ] zp[2]:145 [ sin16s::x5_128#0 ] zp[2]:129 [ sin16s::x3#0 ] zp[2]:147 [ sin16s::usinx#1 ] zp[2]:121 [ sin16s::x1#0 ] zp[2]:135 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16s_gen2] best 75285 combination zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:98 [ sin16s_gen2::$6 ] zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:102 [ sin16s_gen2::$9 ] zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:86 [ sin16s_gen2::step#0 ] +Uplifting [mulu16_sel] best 75269 combination zp[2]:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:123 [ mulu16_sel::return#0 ] zp[2]:127 [ mulu16_sel::return#1 ] zp[2]:131 [ mulu16_sel::return#2 ] zp[2]:137 [ mulu16_sel::return#10 ] zp[2]:141 [ mulu16_sel::return#11 ] zp[4]:153 [ mulu16_sel::$0 ] zp[4]:157 [ mulu16_sel::$1 ] zp[2]:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [loop] best 75269 combination zp[2]:57 [ loop::$7 ] zp[2]:59 [ loop::$2 ] zp[2]:61 [ loop::xpos#0 ] +Uplifting [mul16s] best 75269 combination zp[4]:94 [ mul16s::return#2 ] zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp[4]:112 [ mul16s::return#0 ] zp[2]:108 [ mul16s::$9 ] zp[2]:110 [ mul16s::$16 ] zp[2]:92 [ mul16s::a#0 ] +Uplifting [memset] best 75253 combination zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:52 [ memset::str#3 ] +Uplifting [main] best 75133 combination reg byte x [ main::ch#2 main::ch#1 ] +Uplifting [] best 75133 combination zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp[2]:177 [ rem16u#1 ] +Uplifting [div32u16u] best 75133 combination zp[4]:82 [ div32u16u::return#2 ] zp[2]:169 [ div32u16u::quotient_lo#0 ] zp[4]:171 [ div32u16u::return#0 ] zp[2]:165 [ div32u16u::quotient_hi#0 ] Attempting to uplift remaining variables inzp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] -Uplifting [render_logo] best 69603 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] +Uplifting [render_logo] best 70033 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Attempting to uplift remaining variables inzp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] -Uplifting [render_logo] best 64803 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] +Uplifting [render_logo] best 65233 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] Attempting to uplift remaining variables inzp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] -Uplifting [render_logo] best 64803 combination zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] +Uplifting [render_logo] best 65233 combination zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] Attempting to uplift remaining variables inzp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] -Uplifting [render_logo] best 64803 combination zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] +Uplifting [render_logo] best 65233 combination zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] Attempting to uplift remaining variables inzp[1]:71 [ render_logo::$33 ] -Uplifting [render_logo] best 64403 combination reg byte a [ render_logo::$33 ] +Uplifting [render_logo] best 64833 combination reg byte a [ render_logo::$33 ] Attempting to uplift remaining variables inzp[1]:72 [ render_logo::$36 ] -Uplifting [render_logo] best 64003 combination reg byte a [ render_logo::$36 ] +Uplifting [render_logo] best 64433 combination reg byte a [ render_logo::$36 ] Attempting to uplift remaining variables inzp[1]:73 [ render_logo::$39 ] -Uplifting [render_logo] best 63603 combination reg byte a [ render_logo::$39 ] +Uplifting [render_logo] best 64033 combination reg byte a [ render_logo::$39 ] Attempting to uplift remaining variables inzp[1]:74 [ render_logo::$42 ] -Uplifting [render_logo] best 63203 combination reg byte a [ render_logo::$42 ] +Uplifting [render_logo] best 63633 combination reg byte a [ render_logo::$42 ] Attempting to uplift remaining variables inzp[1]:75 [ render_logo::$45 ] -Uplifting [render_logo] best 62803 combination reg byte a [ render_logo::$45 ] +Uplifting [render_logo] best 63233 combination reg byte a [ render_logo::$45 ] Attempting to uplift remaining variables inzp[1]:77 [ render_logo::$73 ] -Uplifting [render_logo] best 62403 combination reg byte a [ render_logo::$73 ] +Uplifting [render_logo] best 62833 combination reg byte a [ render_logo::$73 ] Attempting to uplift remaining variables inzp[1]:78 [ render_logo::$76 ] -Uplifting [render_logo] best 62003 combination reg byte a [ render_logo::$76 ] +Uplifting [render_logo] best 62433 combination reg byte a [ render_logo::$76 ] Attempting to uplift remaining variables inzp[1]:79 [ render_logo::$79 ] -Uplifting [render_logo] best 61603 combination reg byte a [ render_logo::$79 ] +Uplifting [render_logo] best 62033 combination reg byte a [ render_logo::$79 ] Attempting to uplift remaining variables inzp[1]:80 [ render_logo::$82 ] -Uplifting [render_logo] best 61203 combination reg byte a [ render_logo::$82 ] +Uplifting [render_logo] best 61633 combination reg byte a [ render_logo::$82 ] Attempting to uplift remaining variables inzp[1]:81 [ render_logo::$85 ] -Uplifting [render_logo] best 60803 combination reg byte a [ render_logo::$85 ] +Uplifting [render_logo] best 61233 combination reg byte a [ render_logo::$85 ] Attempting to uplift remaining variables inzp[1]:65 [ render_logo::$0 ] -Uplifting [render_logo] best 60797 combination reg byte a [ render_logo::$0 ] +Uplifting [render_logo] best 61227 combination reg byte a [ render_logo::$0 ] Attempting to uplift remaining variables inzp[1]:66 [ render_logo::$1 ] -Uplifting [render_logo] best 60791 combination reg byte a [ render_logo::$1 ] +Uplifting [render_logo] best 61221 combination reg byte a [ render_logo::$1 ] Attempting to uplift remaining variables inzp[1]:67 [ render_logo::$2 ] -Uplifting [render_logo] best 60785 combination reg byte a [ render_logo::$2 ] +Uplifting [render_logo] best 61215 combination reg byte a [ render_logo::$2 ] Attempting to uplift remaining variables inzp[1]:76 [ render_logo::logo_idx#1 ] -Uplifting [render_logo] best 60779 combination reg byte a [ render_logo::logo_idx#1 ] +Uplifting [render_logo] best 61209 combination reg byte a [ render_logo::logo_idx#1 ] Attempting to uplift remaining variables inzp[1]:70 [ render_logo::x_char#0 ] -Uplifting [render_logo] best 60779 combination zp[1]:70 [ render_logo::x_char#0 ] +Uplifting [render_logo] best 61209 combination zp[1]:70 [ render_logo::x_char#0 ] Coalescing zero page register [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:147 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:129 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:177 [ rem16u#1 ] ] - score: 2 Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] ] with [ zp[4]:104 [ mul16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 ] ] with [ zp[4]:112 [ mul16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:21 [ mul16u::b#1 ] ] with [ zp[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] ] with [ zp[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 Coalescing zero page register [ zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:149 [ mul16u::return#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:90 [ sin16s::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:125 [ sin16s::x2#0 ] ] - score: 1 @@ -6305,7 +6276,7 @@ Coalescing zero page register [ zp[2]:123 [ mulu16_sel::return#0 mulu16_sel::ret Coalescing zero page register [ zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] Coalescing zero page register [ zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] -Coalescing zero page register [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:21 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] +Coalescing zero page register [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:21 [ mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] Coalescing zero page register [ zp[2]:52 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] ] Coalescing zero page register [ zp[2]:57 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 ] ] with [ zp[2]:40 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] @@ -6313,7 +6284,7 @@ Coalescing zero page register [ zp[2]:102 [ sin16s_gen2::$9 ] ] with [ zp[2]:68 Coalescing zero page register [ zp[4]:117 [ sin16s::$4 ] ] with [ zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] Coalescing zero page register [ zp[2]:121 [ sin16s::x1#0 ] ] with [ zp[2]:108 [ mul16s::$9 mul16s::$16 ] ] Coalescing zero page register [ zp[2]:165 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] -Coalescing zero page register [ zp[2]:102 [ sin16s_gen2::$9 render_logo::$3 ] ] with [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] +Coalescing zero page register [ zp[2]:102 [ sin16s_gen2::$9 render_logo::$3 ] ] with [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] Coalescing zero page register [ zp[2]:179 [ memset::end#0 ] ] with [ zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] Allocated (was zp[1]:6) zp[1]:2 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] Allocated (was zp[1]:7) zp[1]:3 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] @@ -6325,7 +6296,7 @@ Allocated (was zp[2]:52) zp[2]:16 [ memset::str#3 memset::dst#2 memset::dst#4 me Allocated (was zp[2]:57) zp[2]:18 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] Allocated (was zp[1]:70) zp[1]:20 [ render_logo::x_char#0 ] Allocated (was zp[4]:82) zp[4]:21 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -Allocated (was zp[2]:102) zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +Allocated (was zp[2]:102) zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] Allocated (was zp[4]:117) zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp[2]:121) zp[2]:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ] Allocated (was zp[2]:165) zp[2]:33 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] @@ -6415,11 +6386,11 @@ main: { lda #VIC_MCM sta D016 // [13] call memset - // [214] phi from main::@3 to memset [phi:main::@3->memset] + // [215] phi from main::@3 to memset [phi:main::@3->memset] memset_from___b3: - // [214] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 + // [215] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [214] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [215] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -6431,11 +6402,11 @@ main: { // main::@4 __b4: // [15] call memset - // [214] phi from main::@4 to memset [phi:main::@4->memset] + // [215] phi from main::@4 to memset [phi:main::@4->memset] memset_from___b4: - // [214] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 + // [215] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [214] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [215] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -6491,7 +6462,7 @@ loop: { .label xpos = $12 // [26] phi from loop to loop::@1 [phi:loop->loop::@1] __b1_from_loop: - // [26] phi (word) xsin_idx#11 = (byte) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1 + // [26] phi (word) xsin_idx#11 = (word) 0 [phi:loop->loop::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z xsin_idx lda #>0 @@ -6905,7 +6876,7 @@ sin16s_gen2: { .label x = 4 .label i = $23 // [98] call div32u16u - // [186] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [187] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u // [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 @@ -6920,14 +6891,16 @@ sin16s_gen2: { sta.z sintab lda #>xsin sta.z sintab+1 - // [101] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [101] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [101] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [101] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7040,15 +7013,11 @@ mul16s: { // [127] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [127] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [127] phi (dword) mul16u::mb#0 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vduz1=vduc1 + // [127] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b4 @@ -7105,21 +7074,31 @@ mul16u: { .label res = 8 .label return = 8 .label b = $19 - // [128] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [128] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [128] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [128] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [129] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -7127,20 +7106,20 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [130] return + // [131] return rts // mul16u::@2 __b2: - // [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a - // [132] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -7154,26 +7133,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [134] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [135] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [134] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [135] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [128] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [129] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [128] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [128] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [128] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [129] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // sin16s @@ -7194,7 +7173,7 @@ sin16s: { .label x5 = $21 .label x5_128 = $21 .label sinx = $10 - // [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -7214,7 +7193,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [139] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [140] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [139] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [140] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [139] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [139] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [140] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [139] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [140] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [139] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -7262,7 +7241,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [142] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [143] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [142] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [143] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -7304,53 +7283,53 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [147] call mulu16_sel - // [177] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [148] call mulu16_sel + // [178] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 jmp __b7 // sin16s::@7 __b7: - // [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [152] call mulu16_sel - // [177] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [153] call mulu16_sel + // [178] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -7358,26 +7337,26 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - // [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [156] call mulu16_sel - // [177] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [157] call mulu16_sel + // [178] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [177] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [178] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 jmp __b9 // sin16s::@9 __b9: - // [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - // [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -7385,21 +7364,21 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [162] call mulu16_sel - // [177] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [163] call mulu16_sel + // [178] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -7407,27 +7386,27 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - // [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [167] call mulu16_sel - // [177] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [168] call mulu16_sel + // [178] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 jmp __b11 // sin16s::@11 __b11: - // [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - // [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -7436,7 +7415,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -7444,13 +7423,13 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 - // [172] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -7458,21 +7437,21 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [174] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [175] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [174] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [175] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [175] return + // [176] return rts // sin16s::@12 __b12: - // [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 jmp __b3_from___b12 } // mulu16_sel @@ -7486,31 +7465,24 @@ mulu16_sel: { .label v2 = $19 .label return = $21 .label return_1 = $12 - // [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [180] call mul16u + // [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [181] call mul16u // [127] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [127] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [127] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [127] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 jmp __b1 // mulu16_sel::@1 __b1: - // [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - // [183] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx + // [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx cpx #0 beq !e+ !: @@ -7521,7 +7493,7 @@ mulu16_sel: { dex bne !- !e: - // [184] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 @@ -7529,7 +7501,7 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [185] return + // [186] return rts } // div32u16u @@ -7539,46 +7511,46 @@ div32u16u: { .label quotient_hi = $21 .label quotient_lo = $e .label return = $15 - // [187] call divr16u - // [196] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [188] call divr16u + // [197] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [196] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [196] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [188] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [189] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp __b1 // div32u16u::@1 __b1: - // [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 - // [190] (word) divr16u::rem#4 ← (word) rem16u#1 - // [191] call divr16u - // [196] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [191] (word) divr16u::rem#4 ← (word) rem16u#1 + // [192] call divr16u + // [197] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [196] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [196] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [197] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [192] (word) divr16u::return#3 ← (word) divr16u::return#0 + // [193] (word) divr16u::return#3 ← (word) divr16u::return#0 jmp __b2 // div32u16u::@2 __b2: - // [193] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - // [194] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + // [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -7590,7 +7562,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [195] return + // [196] return rts } // divr16u @@ -7604,58 +7576,58 @@ divr16u: { .label dividend = $19 .label quotient = $e .label return = $e - // [197] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [198] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [197] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [198] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [197] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [198] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [197] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [197] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [197] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [198] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [197] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [197] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [197] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [197] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [198] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [198] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [198] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 - // [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 - // [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [203] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [204] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [203] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [204] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>XSIN_SIZE bcc __b3_from___b2 @@ -7667,12 +7639,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 + // [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #XSIN_SIZE sta.z rem+1 - // [209] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [210] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [209] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [209] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [210] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [210] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [212] (word) rem16u#1 ← (word) divr16u::rem#11 + // [213] (word) rem16u#1 ← (word) divr16u::rem#11 jmp __breturn // divr16u::@return __breturn: - // [213] return + // [214] return rts } // memset @@ -7713,7 +7685,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 + // [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 lda.z str clc adc #<$3e8 @@ -7721,15 +7693,15 @@ memset: { lda.z str+1 adc #>$3e8 sta.z end+1 - // [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [217] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [218] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [217] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [218] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -7739,15 +7711,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [219] return + // [220] return rts // memset::@3 __b3: - // [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -7856,10 +7828,9 @@ Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda BGCOL2 Removing instruction lda #>0 Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 @@ -8028,6 +7999,7 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 +Removing instruction lda #<0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b2: Removing instruction __breturn: @@ -8044,22 +8016,22 @@ FINAL SYMBOL TABLE (const byte*) BGCOL = (byte*) 53281 (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) COLS = (byte*) 55296 (const byte*) D016 = (byte*) 53270 (const byte*) D018 = (byte*) 53272 -(const byte) DARK_GREY = (number) $b +(const byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_MCM = (number) $10 -(const byte) WHITE = (number) 1 -(const word) XSIN_SIZE = (number) $200 +(const byte) VIC_MCM = (byte) $10 +(const byte) WHITE = (byte) 1 +(const word) XSIN_SIZE = (word) $200 (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (label) div32u16u::@1 (label) div32u16u::@2 @@ -8182,9 +8154,10 @@ FINAL SYMBOL TABLE (word) mul16u::a#1 a zp[2]:14 4.0 (word) mul16u::a#2 a zp[2]:14 2.0 (word) mul16u::a#3 a zp[2]:14 67.66666666666666 -(word) mul16u::a#6 a zp[2]:14 6.0 +(word) mul16u::a#6 a zp[2]:14 3.0 (word) mul16u::b (word) mul16u::b#1 b zp[2]:25 4.0 +(word) mul16u::b#2 b zp[2]:25 2.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp[4]:27 4.0 (dword) mul16u::mb#1 mb zp[4]:27 202.0 @@ -8407,7 +8380,7 @@ reg byte a [ render_logo::$79 ] reg byte a [ render_logo::$82 ] reg byte a [ render_logo::$85 ] zp[4]:21 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] reg byte a [ mul16u::$1 ] zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ] @@ -8418,7 +8391,7 @@ zp[2]:35 [ memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx# FINAL ASSEMBLER -Score: 46481 +Score: 46731 // File Comments // Upstart @@ -8496,10 +8469,10 @@ main: { sta D016 // memset(SCREEN, BLACK, 1000) // [13] call memset - // [214] phi from main::@3 to memset [phi:main::@3->memset] - // [214] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 + // [215] phi from main::@3 to memset [phi:main::@3->memset] + // [215] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 ldx #BLACK - // [214] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 + // [215] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 lda #SCREEN @@ -8509,10 +8482,10 @@ main: { // main::@4 // memset(COLS, WHITE|8, 1000) // [15] call memset - // [214] phi from main::@4 to memset [phi:main::@4->memset] - // [214] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 + // [215] phi from main::@4 to memset [phi:main::@4->memset] + // [215] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 ldx #WHITE|8 - // [214] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 + // [215] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 lda #COLS @@ -8558,7 +8531,7 @@ loop: { .label __7 = $12 .label xpos = $12 // [26] phi from loop to loop::@1 [phi:loop->loop::@1] - // [26] phi (word) xsin_idx#11 = (byte) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1 + // [26] phi (word) xsin_idx#11 = (word) 0 [phi:loop->loop::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z xsin_idx sta.z xsin_idx+1 @@ -8935,7 +8908,7 @@ sin16s_gen2: { .label i = $23 // div32u16u(PI2_u4f28, wavelength) // [98] call div32u16u - // [186] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [187] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] jsr div32u16u // div32u16u(PI2_u4f28, wavelength) // [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 @@ -8948,13 +8921,16 @@ sin16s_gen2: { sta.z sintab lda #>xsin sta.z sintab+1 - // [101] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [101] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [101] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [101] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -9066,15 +9042,11 @@ mul16s: { // [117] call mul16u // [127] phi from mul16s to mul16u [phi:mul16s->mul16u] // [127] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [127] phi (dword) mul16u::mb#0 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vduz1=vduc1 + // [127] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // mul16u((word)a, (word) b) // [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 @@ -9127,40 +9099,50 @@ mul16u: { .label res = 8 .label return = 8 .label b = $19 - // [128] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [128] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [128] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + // mb = b + // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 + // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [128] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [129] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 __b1: // while(a!=0) - // [129] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 // mul16u::@return // } - // [130] return + // [131] return rts // mul16u::@2 __b2: // a&1 - // [131] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // if( (a&1) != 0) - // [132] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul16u::@4 // res = res + mb - // [133] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -9174,24 +9156,24 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [134] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - // [134] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [135] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [135] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy // mul16u::@3 __b3: // a = a>>1 - // [135] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // mb = mb<<1 - // [136] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [128] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - // [128] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [128] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [128] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [129] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [129] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // sin16s @@ -9213,7 +9195,7 @@ sin16s: { .label x5_128 = $21 .label sinx = $10 // if(x >= PI_u4f28 ) - // [137] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc b1 @@ -9232,7 +9214,7 @@ sin16s: { !: // sin16s::@4 // x = x - PI_u4f28 - // [138] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [139] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] - // [139] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [140] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [140] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [139] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [139] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [140] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] b1: - // [139] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [140] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [139] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy // sin16s::@1 __b1: // if(x >= PI_HALF_u4f28 ) - // [140] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2 @@ -9278,7 +9260,7 @@ sin16s: { !: // sin16s::@5 // x = PI_u4f28 - x - // [141] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [142] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] - // [142] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [143] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [143] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy // sin16s::@2 __b2: // x<<3 - // [143] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -9319,81 +9301,81 @@ sin16s: { rol.z __4+2 rol.z __4+3 // x1 = >x<<3 - // [144] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // mulu16_sel(x1, x1, 0) - // [145] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [146] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [147] call mulu16_sel - // [177] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [148] call mulu16_sel + // [178] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x1, x1, 0) - // [148] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 // sin16s::@7 // x2 = mulu16_sel(x1, x1, 0) - // [149] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 // mulu16_sel(x2, x1, 1) - // [150] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [151] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [152] call mulu16_sel - // [177] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] - // [177] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [153] call mulu16_sel + // [178] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x2, x1, 1) - // [153] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@8 // x3 = mulu16_sel(x2, x1, 1) - // [154] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 // mulu16_sel(x3, $10000/6, 1) - // [155] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [156] call mulu16_sel - // [177] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] - // [177] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [157] call mulu16_sel + // [178] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [177] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [178] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, $10000/6, 1) - // [157] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 // sin16s::@9 // x3_6 = mulu16_sel(x3, $10000/6, 1) - // [158] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 // usinx = x1 - x3_6 - // [159] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -9402,49 +9384,49 @@ sin16s: { sbc.z x3_6+1 sta.z usinx+1 // mulu16_sel(x3, x1, 0) - // [160] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [161] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [162] call mulu16_sel - // [177] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [163] call mulu16_sel + // [178] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, x1, 0) - // [163] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@10 // x4 = mulu16_sel(x3, x1, 0) - // [164] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 // mulu16_sel(x4, x1, 0) - // [165] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [166] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [167] call mulu16_sel - // [177] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] - // [177] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [168] call mulu16_sel + // [178] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [177] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [177] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x4, x1, 0) - // [168] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 // sin16s::@11 // x5 = mulu16_sel(x4, x1, 0) - // [169] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 // x5_128 = x5>>4 - // [170] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -9454,7 +9436,7 @@ sin16s: { lsr.z x5_128+1 ror.z x5_128 // usinx = usinx + x5_128 - // [171] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -9463,12 +9445,12 @@ sin16s: { adc.z x5_128+1 sta.z usinx+1 // if(isUpper!=0) - // [172] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b3 // sin16s::@6 // sinx = -(signed word)usinx - // [173] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -9476,16 +9458,16 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [174] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] - // [174] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [175] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [175] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy // sin16s::@3 __b3: // sin16s::@return // } - // [175] return + // [176] return rts // sin16s::@12 - // [176] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 } // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. @@ -9499,30 +9481,23 @@ mulu16_sel: { .label return = $21 .label return_1 = $12 // mul16u(v1, v2) - // [178] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [179] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [180] call mul16u + // [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [181] call mul16u // [127] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] // [127] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [127] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [127] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u // mul16u(v1, v2) - // [181] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 // mulu16_sel::@1 - // [182] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 // mul16u(v1, v2)< (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 sta.z return+1 // mulu16_sel::@return // } - // [185] return + // [186] return rts } // div32u16u @@ -9552,45 +9527,45 @@ div32u16u: { .label quotient_lo = $e .label return = $15 // divr16u(>dividend, divisor, 0) - // [187] call divr16u - // [196] phi from div32u16u to divr16u [phi:div32u16u->divr16u] - // [196] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [188] call divr16u + // [197] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [197] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [196] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 jsr divr16u // divr16u(>dividend, divisor, 0) - // [188] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [189] (word) divr16u::return#2 ← (word) divr16u::return#0 // div32u16u::@1 // quotient_hi = divr16u(>dividend, divisor, 0) - // [189] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 // divr16u(divr16u] - // [196] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [191] (word) divr16u::rem#4 ← (word) rem16u#1 + // [192] call divr16u + // [197] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [197] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [196] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [197] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // divr16u(divr16u::@1] - // [197] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [198] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [198] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [197] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [198] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 - // [197] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [197] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy - // [197] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [197] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [197] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [197] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [197] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [198] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [198] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [198] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 __b1: // rem = rem << 1 - // [198] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // >dividend - // [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // >dividend & $80 - // [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) - // [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2 // divr16u::@4 // rem = rem | 1 - // [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [203] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [203] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [204] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [204] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 __b2: // dividend = dividend << 1 - // [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // quotient = quotient << 1 - // [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // if(rem>=divisor) - // [206] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>XSIN_SIZE bcc __b3 @@ -9675,13 +9650,13 @@ divr16u: { !: // divr16u::@5 // quotient++; - // [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: // rem = rem - divisor - // [208] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 + // [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #XSIN_SIZE sta.z rem+1 - // [209] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - // [209] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [209] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [210] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [210] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [210] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 __b3: // for( byte i : 0..15) - // [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1 // divr16u::@6 // rem16u = rem - // [212] (word) rem16u#1 ← (word) divr16u::rem#11 + // [213] (word) rem16u#1 ← (word) divr16u::rem#11 // divr16u::@return // } - // [213] return + // [214] return rts } // memset @@ -9717,7 +9692,7 @@ memset: { .label str = $10 // memset::@1 // end = (char*)str + num - // [215] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 + // [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 lda.z str clc adc #<$3e8 @@ -9725,13 +9700,13 @@ memset: { lda.z str+1 adc #>$3e8 sta.z end+1 - // [216] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [217] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [217] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [218] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [218] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) - // [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -9740,17 +9715,17 @@ memset: { bne __b3 // memset::@return // } - // [219] return + // [220] return rts // memset::@3 __b3: // *dst = c - // [220] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.sym b/src/test/ref/examples/scrolllogo/scrolllogo.sym index 4ade86706..8a6ecfe8e 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.sym +++ b/src/test/ref/examples/scrolllogo/scrolllogo.sym @@ -5,22 +5,22 @@ (const byte*) BGCOL = (byte*) 53281 (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) COLS = (byte*) 55296 (const byte*) D016 = (byte*) 53270 (const byte*) D018 = (byte*) 53272 -(const byte) DARK_GREY = (number) $b +(const byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_MCM = (number) $10 -(const byte) WHITE = (number) 1 -(const word) XSIN_SIZE = (number) $200 +(const byte) VIC_MCM = (byte) $10 +(const byte) WHITE = (byte) 1 +(const word) XSIN_SIZE = (word) $200 (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (label) div32u16u::@1 (label) div32u16u::@2 @@ -143,9 +143,10 @@ (word) mul16u::a#1 a zp[2]:14 4.0 (word) mul16u::a#2 a zp[2]:14 2.0 (word) mul16u::a#3 a zp[2]:14 67.66666666666666 -(word) mul16u::a#6 a zp[2]:14 6.0 +(word) mul16u::a#6 a zp[2]:14 3.0 (word) mul16u::b (word) mul16u::b#1 b zp[2]:25 4.0 +(word) mul16u::b#2 b zp[2]:25 2.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp[4]:27 4.0 (dword) mul16u::mb#1 mb zp[4]:27 202.0 @@ -368,7 +369,7 @@ reg byte a [ render_logo::$79 ] reg byte a [ render_logo::$82 ] reg byte a [ render_logo::$85 ] zp[4]:21 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] -zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] +zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] reg byte a [ mul16u::$1 ] zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ] diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index 31e537f59..7d2a7cf4d 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -162,17 +162,17 @@ SYMBOL TABLE SSA (const byte*) BGCOL = (byte*)(number) $d021 (const byte*) BGCOL2 = (byte*)(number) $d022 (const byte*) BGCOL3 = (byte*)(number) $d023 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) COLS = (byte*)(number) $d800 (const byte*) D016 = (byte*)(number) $d016 (const byte*) D018 = (byte*)(number) $d018 -(const byte) DARK_GREY = (number) $b +(const byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*)(number) $2000 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_MCM = (number) $10 -(const byte) WHITE = (number) 1 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_MCM = (byte) $10 +(const byte) WHITE = (byte) 1 (void()) main() (byte~) main::$0 (bool~) main::$3 @@ -1094,17 +1094,17 @@ FINAL SYMBOL TABLE (const byte*) BGCOL = (byte*) 53281 (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) COLS = (byte*) 55296 (const byte*) D016 = (byte*) 53270 (const byte*) D018 = (byte*) 53272 -(const byte) DARK_GREY = (number) $b +(const byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_MCM = (number) $10 -(const byte) WHITE = (number) 1 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_MCM = (byte) $10 +(const byte) WHITE = (byte) 1 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/examples/showlogo/showlogo.sym b/src/test/ref/examples/showlogo/showlogo.sym index e552c2eac..24a2cee29 100644 --- a/src/test/ref/examples/showlogo/showlogo.sym +++ b/src/test/ref/examples/showlogo/showlogo.sym @@ -5,17 +5,17 @@ (const byte*) BGCOL = (byte*) 53281 (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) COLS = (byte*) 55296 (const byte*) D016 = (byte*) 53270 (const byte*) D018 = (byte*) 53272 -(const byte) DARK_GREY = (number) $b +(const byte) DARK_GREY = (byte) $b (const byte*) LOGO = (byte*) 8192 (const byte*) SCREEN = (byte*) 1024 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_MCM = (number) $10 -(const byte) WHITE = (number) 1 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_MCM = (byte) $10 +(const byte) WHITE = (byte) 1 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.asm b/src/test/ref/examples/sinplotter/sine-plotter.asm index 58ac73b86..fec41a895 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.asm +++ b/src/test/ref/examples/sinplotter/sine-plotter.asm @@ -251,11 +251,14 @@ sin16s_gen2: { sta.z sintab lda #>sin sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -330,13 +333,9 @@ mul16s: { lda.z a+1 sta.z mul16u.a+1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u lda.z a+1 bpl __b2 @@ -366,10 +365,18 @@ mul16u: { .label res = 8 .label return = 8 .label b = $12 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a @@ -603,13 +610,6 @@ mulu16_sel: { sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u cpx #0 beq !e+ diff --git a/src/test/ref/examples/sinplotter/sine-plotter.cfg b/src/test/ref/examples/sinplotter/sine-plotter.cfg index 71946decf..773f4797e 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.cfg +++ b/src/test/ref/examples/sinplotter/sine-plotter.cfg @@ -55,8 +55,8 @@ render_sine: scope:[render_sine] from main::@6 [22] phi() to:render_sine::@1 render_sine::@1: scope:[render_sine] from render_sine render_sine::@3 - [23] (word) render_sine::xpos#3 ← phi( render_sine/(byte) 0 render_sine::@3/(word) render_sine::xpos#9 ) - [23] (word) render_sine::sin_idx#2 ← phi( render_sine/(byte) 0 render_sine::@3/(word) render_sine::sin_idx#1 ) + [23] (word) render_sine::xpos#3 ← phi( render_sine/(word) 0 render_sine::@3/(word) render_sine::xpos#9 ) + [23] (word) render_sine::sin_idx#2 ← phi( render_sine/(word) 0 render_sine::@3/(word) render_sine::sin_idx#1 ) [24] if((word) render_sine::sin_idx#2<(const word) SIN_SIZE) goto render_sine::@2 to:render_sine::@return render_sine::@return: scope:[render_sine] from render_sine::@1 @@ -152,8 +152,8 @@ sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 [71] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) sin sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [71] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [71] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [71] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [71] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 @@ -206,255 +206,256 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [97] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [97] (dword) mul16u::mb#0 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [97] (word) mul16u::b#2 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [98] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [98] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [98] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [99] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [99] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [99] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [100] return + [101] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [102] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [103] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [104] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [105] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [106] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [105] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [106] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [107] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [109] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [109] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [110] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [110] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [112] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [117] call mulu16_sel - [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [113] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [118] call mulu16_sel + [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [122] call mulu16_sel - [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [123] call mulu16_sel + [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [126] call mulu16_sel - [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [127] call mulu16_sel + [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [132] call mulu16_sel - [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [133] call mulu16_sel + [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [137] call mulu16_sel - [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [138] call mulu16_sel + [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [142] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [143] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [144] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [145] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [145] return + [146] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [147] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [147] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [147] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [150] call mul16u - [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [148] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [148] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [148] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [151] call mul16u + [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [154] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [155] return + [156] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [156] phi() - [157] call divr16u - [158] (word) divr16u::return#2 ← (word) divr16u::return#0 + [157] phi() + [158] call divr16u + [159] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [160] (word) divr16u::rem#4 ← (word) rem16u#1 - [161] call divr16u - [162] (word) divr16u::return#3 ← (word) divr16u::return#0 + [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [161] (word) divr16u::rem#4 ← (word) rem16u#1 + [162] call divr16u + [163] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [163] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [164] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [165] return + [166] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [166] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [166] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [167] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [167] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [167] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [167] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [167] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [167] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [168] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [170] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [171] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [168] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [168] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [168] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [168] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [173] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [174] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [175] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 + [174] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [177] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE + [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [179] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [179] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [180] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [181] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [180] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [180] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [182] (word) rem16u#1 ← (word) divr16u::rem#11 + [183] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [183] return + [184] return to:@return (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) bitmap_clear: scope:[bitmap_clear] from main::@4 - [184] phi() - [185] call memset + [185] phi() + [186] call memset to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [186] phi() - [187] call memset + [187] phi() + [188] call memset to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [188] return + [189] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from bitmap_clear bitmap_clear::@1 - [189] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) - [189] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) - [189] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) - [190] if((word) memset::num#2<=(byte) 0) goto memset::@return + [190] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) + [190] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) + [190] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) + [191] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [193] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [194] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [195] return + [196] return to:@return memset::@3: scope:[memset] from memset::@2 - [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [197] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [198] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 (void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen) bitmap_init: scope:[bitmap_init] from main::@3 - [198] phi() + [199] phi() to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [199] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) - [199] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) - [200] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 - [201] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 - [202] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 + [200] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) + [200] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) + [201] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 + [202] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 + [203] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 to:bitmap_init::@2 bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1 - [203] phi() + [204] phi() to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6 - [204] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) - [205] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 - [206] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 + [205] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) + [206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 + [207] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [207] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) - [207] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) - [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 - [209] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 - [210] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 - [211] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 - [212] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 - [213] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 - [214] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 + [208] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) + [208] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) + [209] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 + [210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 + [211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 + [212] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 + [213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 + [214] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 + [215] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3 - [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 + [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5 - [216] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) - [217] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 - [218] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 + [217] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) + [218] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 + [219] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [219] return + [220] return to:@return diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index 5b9b783ab..98a4879a6 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -89,7 +89,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@6 @6: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@29 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -97,7 +97,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -205,7 +205,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#13 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -220,8 +220,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul16u: scope:[mul16u] from mul16s mulu16_sel (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#2 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -351,8 +351,8 @@ sin16s_gen2::@7: scope:[sin16s_gen2] from sin16s_gen2 (dword~) sin16s_gen2::$3 ← (dword) div32u16u::return#4 (word) rem16u#6 ← (word) rem16u#15 (dword) sin16s_gen2::step#0 ← (dword~) sin16s_gen2::$3 - (dword) sin16s_gen2::x#0 ← (number) 0 - (word) sin16s_gen2::i#0 ← (number) 0 + (dword) sin16s_gen2::x#0 ← (dword) 0 + (word) sin16s_gen2::i#0 ← (word) 0 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@7 sin16s_gen2::@9 (dword) sin16s_gen2::step#4 ← phi( sin16s_gen2::@7/(dword) sin16s_gen2::step#0 sin16s_gen2::@9/(dword) sin16s_gen2::step#1 ) @@ -424,7 +424,7 @@ sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 (dword) sin16s::x#3 ← phi( sin16s_gen2::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -623,7 +623,7 @@ bitmap_init: scope:[bitmap_init] from main::@8 (byte*) bitmap_init::gfx#1 ← phi( main::@8/(byte*) bitmap_init::gfx#0 ) (byte*) bitmap_gfx#1 ← (byte*) bitmap_init::gfx#1 (byte*) bitmap_screen#1 ← (byte*) bitmap_init::screen#1 - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -891,8 +891,8 @@ main::@return: scope:[main] from main::@1 (void()) render_sine() render_sine: scope:[render_sine] from main::@11 - (word) render_sine::xpos#0 ← (number) 0 - (word) render_sine::sin_idx#0 ← (number) 0 + (word) render_sine::xpos#0 ← (word) 0 + (word) render_sine::sin_idx#0 ← (word) 0 to:render_sine::@1 render_sine::@1: scope:[render_sine] from render_sine render_sine::@4 (word) render_sine::xpos#8 ← phi( render_sine/(word) render_sine::xpos#0 render_sine::@4/(word) render_sine::xpos#9 ) @@ -1019,27 +1019,27 @@ SYMBOL TABLE SSA (label) @end (const byte*) BGCOL = (byte*)(number) $d021 (const byte*) BITMAP = (byte*)(number) $2000 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA2_PORT_A = (byte*)(number) $dd00 (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const byte*) D011 = (byte*)(number) $d011 (const byte*) D016 = (byte*)(number) $d016 (const byte*) D018 = (byte*)(number) $d018 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) SCREEN = (byte*)(number) $400 -(const word) SIN_SIZE = (number) $200 +(const word) SIN_SIZE = (word) $200 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (number~) bitmap_clear::$0 (number~) bitmap_clear::$1 @@ -1840,8 +1840,6 @@ SYMBOL TABLE SSA Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#2) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#2) Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1851,7 +1849,6 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (unumber)(number) 1 @@ -1861,9 +1858,6 @@ Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul Adding number conversion cast (snumber) 0 in (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mul16s::$5 ← (signed word) mul16s::b#2 < (number) 0 Adding number conversion cast (snumber) 1 in (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl#0 >> (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen2::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen2::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1875,7 +1869,6 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (nu Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -1911,8 +1904,6 @@ Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0 Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (snumber) -$140 in (signed word) sin16s_gen2::min#0 ← (number) -$140 Adding number conversion cast (snumber) $140 in (signed word) sin16s_gen2::max#0 ← (number) $140 -Adding number conversion cast (unumber) 0 in (word) render_sine::xpos#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) render_sine::sin_idx#0 ← (number) 0 Adding number conversion cast (snumber) $a in (number~) render_sine::$5 ← (signed word) render_sine::sin2_val#0 + (number) $a Adding number conversion cast (snumber) render_sine::$5 in (number~) render_sine::$5 ← (signed word) render_sine::sin2_val#0 + (snumber)(number) $a Adding number conversion cast (unumber) $140 in (bool~) render_sine::$8 ← (word) render_sine::xpos#1 == (number) $140 @@ -1922,19 +1913,13 @@ Adding number conversion cast (snumber) $c8 in (signed word) wrap_y::y#2 ← (si Adding number conversion cast (snumber) 0 in (bool~) wrap_y::$2 ← (signed word) wrap_y::y#6 < (number) 0 Adding number conversion cast (snumber) $c8 in (signed word) wrap_y::y#3 ← (signed word) wrap_y::y#7 + (number) $c8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#1 Inlining cast (word~) mul16s::$1 ← (word)(signed word) mul16s::b#1 Inlining cast (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 Inlining cast (signed dword~) mul16s::$7 ← (signed dword)(dword) mul16s::m#4 Inlining cast (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 -Inlining cast (dword) sin16s_gen2::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen2::i#0 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s_gen2::$8 ← (signed word)(word~) sin16s_gen2::$7 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -1946,7 +1931,6 @@ Inlining cast (signed word~) sin16s::$14 ← (signed word)(word) sin16s::usinx#1 Inlining cast (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#3 Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -1956,8 +1940,6 @@ Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (signed word) sin16s_gen2::min#0 ← (snumber)(number) -$140 Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $140 -Inlining cast (word) render_sine::xpos#0 ← (unumber)(number) 0 -Inlining cast (word) render_sine::sin_idx#0 ← (unumber)(number) 0 Inlining cast (word) render_sine::xpos#2 ← (unumber)(number) 0 Inlining cast (byte~) wrap_y::$0 ← (byte)(signed word) wrap_y::y#8 Successful SSA optimization Pass2InlineCast @@ -1971,8 +1953,6 @@ Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1983,7 +1963,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -1991,9 +1970,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -2004,7 +1980,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -2027,8 +2002,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast -$140 Simplifying constant integer cast $140 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast $140 Simplifying constant integer cast 0 @@ -2037,8 +2010,6 @@ Simplifying constant integer cast $c8 Simplifying constant integer cast 0 Simplifying constant integer cast $c8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2047,7 +2018,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -2055,9 +2025,6 @@ Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2068,7 +2035,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -2088,8 +2054,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized signed number type (signed word) -$140 Finalized signed number type (signed word) $140 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) $a Finalized unsigned number type (word) $140 Finalized unsigned number type (byte) 0 @@ -2157,7 +2121,6 @@ Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#2 Alias (word) mul16u::a#3 = (word) mul16u::a#4 (word) mul16u::a#7 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#4 (dword) mul16u::return#1 @@ -2433,8 +2396,8 @@ Resolved ranged next value [315] bitmap_init::y#1 ← ++ bitmap_init::y#2 to ++ Resolved ranged comparison value [317] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5 to (number) 0 Simplifying expression containing zero bitmap_clear::$0 in [327] (byte) bitmap_clear::col#0 ← (byte~) bitmap_clear::$0 + (const byte) bitmap_clear::bgcol#0 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (void*) memset::return#2 and assignment [167] (void*) memset::return#2 ← (void*) memset::str#3 -Eliminating unused variable (void*) memset::return#3 and assignment [169] (void*) memset::return#3 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#2 and assignment [168] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#3 and assignment [170] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) bitmap_clear::bgcol#0 Eliminating unused constant (const word) rem16u#0 Eliminating unused constant (const byte*) bitmap_screen#0 @@ -2463,11 +2426,11 @@ Alias (byte) bitmap_clear::col#0 = (byte~) bitmap_clear::$0 Successful SSA optimization Pass2AliasElimination Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [58] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 -Constant right-side identified [163] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 -Constant right-side identified [182] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 -Constant right-side identified [187] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff -Constant right-side identified [190] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 +Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0 +Constant right-side identified [164] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10 +Constant right-side identified [183] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0 +Constant right-side identified [188] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff +Constant right-side identified [191] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = =(signed byte) 0) goto mul16s::@2 +if() condition always true - replacing block destination [47] if((const signed word) mul16s::b#0>=(signed byte) 0) goto mul16s::@2 Successful SSA optimization Pass2ConstantIfs Eliminating variable (word~) mul16s::$13 from unused block mul16s::@4 Eliminating variable (word~) mul16s::$14 from unused block mul16s::@4 @@ -2494,10 +2457,10 @@ Removing unused block mul16s::@4 Successful SSA optimization Pass2EliminateUnusedBlocks Alias (dword) mul16s::m#4 = (dword) mul16s::m#5 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [49] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1 -Constant right-side identified [167] (byte~) main::vicSelectGfxBank1_toDd001_$2 ← (const byte) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40 -Constant right-side identified [171] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 -Constant right-side identified [173] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 +Constant right-side identified [50] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1 +Constant right-side identified [168] (byte~) main::vicSelectGfxBank1_toDd001_$2 ← (const byte) main::vicSelectGfxBank1_toDd001_$1 / (byte) $40 +Constant right-side identified [172] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4 +Constant right-side identified [174] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::$1 = sin16s_gen2::ampl#0>>1 Constant (const byte) main::vicSelectGfxBank1_toDd001_$2 = main::vicSelectGfxBank1_toDd001_$1/$40 @@ -2506,7 +2469,7 @@ Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4 Successful SSA optimization Pass2ConstantIdentification Simplifying constant evaluating to zero (const byte) main::vicSelectGfxBank1_toDd001_$1/(byte) $40 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero 3 in [168] (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank1_toDd001_$2 +Simplifying expression containing zero 3 in [169] (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) main::vicSelectGfxBank1_toDd001_$2 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) main::vicSelectGfxBank1_toDd001_$1 Eliminating unused constant (const byte) main::vicSelectGfxBank1_toDd001_$2 @@ -2515,9 +2478,9 @@ Eliminating unused constant (const word) main::vicSelectGfxBank1_toDd001_$0 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte*) main::vicSelectGfxBank1_gfx#0 Successful SSA optimization PassNEliminateUnusedVars -Constant right-side identified [48] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 -Constant right-side identified [168] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 -Constant right-side identified [169] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f +Constant right-side identified [49] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1 +Constant right-side identified [169] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2 +Constant right-side identified [170] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1 Constant (const byte) main::vicSelectGfxBank1_toDd001_return#0 = 3 @@ -2526,27 +2489,27 @@ Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f Successful SSA optimization Pass2ConstantIdentification Simplifying constant evaluating to zero (const signed word) sin16s_gen2::min#0+(const signed word) sin16s_gen2::$1 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero sin16s_gen2::$8 in [63] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 +Simplifying expression containing zero sin16s_gen2::$8 in [64] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const signed word) sin16s_gen2::$1 Eliminating unused constant (const signed word) sin16s_gen2::offs#0 Successful SSA optimization PassNEliminateUnusedVars Alias (signed word~) sin16s_gen2::$9 = (signed word~) sin16s_gen2::$8 Successful SSA optimization Pass2AliasElimination -Constant right-side identified [166] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 +Constant right-side identified [167] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [61] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 -Inlining Noop Cast [152] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0 +Inlining Noop Cast [62] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9 +Inlining Noop Cast [153] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0 Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [101] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [105] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [119] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 -Inlining Noop Cast [121] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [102] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [106] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [120] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [122] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [173] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 * (const byte) SIZEOF_SIGNED_WORD -Rewriting multiplication to use shift [183] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [174] (word~) render_sine::$10 ← (word) render_sine::sin_idx#2 * (const byte) SIZEOF_SIGNED_WORD +Rewriting multiplication to use shift [184] (word~) render_sine::$11 ← (word) render_sine::sin_idx#2 * (const byte) SIZEOF_SIGNED_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2584,7 +2547,7 @@ Inlining constant with var siblings (const word) render_sine::xpos#2 Constant inlined bitmap_init::screen#0 = (const byte*) SCREEN Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined bitmap_init::gfx#0 = (const byte*) BITMAP -Constant inlined sin16s_gen2::i#0 = (byte) 0 +Constant inlined sin16s_gen2::i#0 = (word) 0 Constant inlined sin16s::isUpper#0 = (byte) 0 Constant inlined memset::num#1 = (word) $1f40 Constant inlined memset::num#0 = (word) $3e8 @@ -2616,15 +2579,15 @@ Constant inlined main::toD0181_gfx#0 = (const byte*) BITMAP Constant inlined divr16u::i#0 = (byte) 0 Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28 Constant inlined bitmap_init::bits#0 = (byte) $80 -Constant inlined render_sine::xpos#0 = (byte) 0 +Constant inlined render_sine::xpos#0 = (word) 0 Constant inlined bitmap_init::bits#2 = (byte) $80 -Constant inlined divr16u::quotient#0 = (byte) 0 -Constant inlined sin16s_gen2::x#0 = (byte) 0 -Constant inlined mul16u::res#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 +Constant inlined sin16s_gen2::x#0 = (dword) 0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined divr16u::divisor#1 = (const word) SIN_SIZE Constant inlined divr16u::divisor#0 = (const word) SIN_SIZE Constant inlined memset::str#1 = (void*)(const byte*) BITMAP -Constant inlined render_sine::sin_idx#0 = (byte) 0 +Constant inlined render_sine::sin_idx#0 = (word) 0 Constant inlined memset::str#0 = (void*)(const byte*) SCREEN Constant inlined bitmap_clear::fgcol#0 = (const byte) WHITE Constant inlined divr16u::dividend#1 = >(const dword) PI2_u4f28 @@ -2685,10 +2648,10 @@ Calls in [main] to bitmap_init:19 bitmap_clear:21 sin16s_gen2:23 render_sine:25 Calls in [render_sine] to wrap_y:38 bitmap_plot:45 wrap_y:51 bitmap_plot:58 Calls in [sin16s_gen2] to div32u16u:88 sin16s:95 mul16s:98 Calls in [mul16s] to mul16u:111 -Calls in [sin16s] to mulu16_sel:155 mulu16_sel:162 mulu16_sel:167 mulu16_sel:175 mulu16_sel:182 -Calls in [mulu16_sel] to mul16u:200 -Calls in [div32u16u] to divr16u:207 divr16u:212 -Calls in [bitmap_clear] to memset:248 memset:250 +Calls in [sin16s] to mulu16_sel:156 mulu16_sel:163 mulu16_sel:168 mulu16_sel:176 mulu16_sel:183 +Calls in [mulu16_sel] to mul16u:201 +Calls in [div32u16u] to divr16u:208 divr16u:213 +Calls in [bitmap_clear] to memset:249 memset:251 Created 44 initial phi equivalence classes Coalesced [37] wrap_y::y#11 ← wrap_y::y#0 @@ -2710,51 +2673,51 @@ Coalesced [108] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0 Coalesced [110] mul16u::a#8 ← mul16u::a#1 Coalesced [118] mul16s::m#7 ← mul16s::m#1 Coalesced [122] mul16s::m#8 ← mul16s::m#0 -Coalesced [124] mul16u::a#10 ← mul16u::a#6 -Coalesced [125] mul16u::mb#7 ← mul16u::mb#0 -Coalesced [133] mul16u::res#9 ← mul16u::res#1 -Coalesced [137] mul16u::a#11 ← mul16u::a#0 -Coalesced [138] mul16u::res#7 ← mul16u::res#6 -Coalesced [139] mul16u::mb#8 ← mul16u::mb#1 -Coalesced (already) [140] mul16u::res#8 ← mul16u::res#2 -Coalesced [143] sin16s::x#9 ← sin16s::x#1 -Coalesced [147] sin16s::x#11 ← sin16s::x#2 -Coalesced [153] mulu16_sel::v1#8 ← mulu16_sel::v1#0 -Coalesced [154] mulu16_sel::v2#8 ← mulu16_sel::v2#0 -Coalesced [160] mulu16_sel::v1#9 ← mulu16_sel::v1#1 -Coalesced [161] mulu16_sel::v2#9 ← mulu16_sel::v2#1 -Coalesced [166] mulu16_sel::v1#10 ← mulu16_sel::v1#2 -Coalesced [173] mulu16_sel::v1#6 ← mulu16_sel::v1#3 -Coalesced [174] mulu16_sel::v2#6 ← mulu16_sel::v2#3 -Coalesced [180] mulu16_sel::v1#7 ← mulu16_sel::v1#4 -Coalesced [181] mulu16_sel::v2#7 ← mulu16_sel::v2#4 -Coalesced [189] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [193] sin16s::x#10 ← sin16s::x#4 -Coalesced [194] sin16s::x#8 ← sin16s::x#0 -Coalesced [198] mul16u::mb#6 ← mul16u::b#1 -Coalesced [199] mul16u::a#9 ← mul16u::a#2 -Coalesced [211] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [218] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [219] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [226] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [233] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [234] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [240] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [241] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [242] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [243] divr16u::i#7 ← divr16u::i#1 -Coalesced [244] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [245] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [246] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [263] memset::dst#5 ← memset::dst#1 -Coalesced [283] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [288] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [289] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [290] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [291] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [292] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [293] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced down to 30 phi equivalence classes +Coalesced [125] mul16u::a#10 ← mul16u::a#6 +Coalesced [126] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [134] mul16u::res#9 ← mul16u::res#1 +Coalesced [138] mul16u::a#11 ← mul16u::a#0 +Coalesced [139] mul16u::res#7 ← mul16u::res#6 +Coalesced [140] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [141] mul16u::res#8 ← mul16u::res#2 +Coalesced [144] sin16s::x#9 ← sin16s::x#1 +Coalesced [148] sin16s::x#11 ← sin16s::x#2 +Coalesced [154] mulu16_sel::v1#8 ← mulu16_sel::v1#0 +Coalesced [155] mulu16_sel::v2#8 ← mulu16_sel::v2#0 +Coalesced [161] mulu16_sel::v1#9 ← mulu16_sel::v1#1 +Coalesced [162] mulu16_sel::v2#9 ← mulu16_sel::v2#1 +Coalesced [167] mulu16_sel::v1#10 ← mulu16_sel::v1#2 +Coalesced [174] mulu16_sel::v1#6 ← mulu16_sel::v1#3 +Coalesced [175] mulu16_sel::v2#6 ← mulu16_sel::v2#3 +Coalesced [181] mulu16_sel::v1#7 ← mulu16_sel::v1#4 +Coalesced [182] mulu16_sel::v2#7 ← mulu16_sel::v2#4 +Coalesced [190] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [194] sin16s::x#10 ← sin16s::x#4 +Coalesced [195] sin16s::x#8 ← sin16s::x#0 +Coalesced [199] mul16u::b#3 ← mul16u::b#1 +Coalesced [200] mul16u::a#9 ← mul16u::a#2 +Coalesced [212] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [219] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [220] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [227] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [234] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [235] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [241] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [242] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [243] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [244] divr16u::i#7 ← divr16u::i#1 +Coalesced [245] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [246] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [247] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [264] memset::dst#5 ← memset::dst#1 +Coalesced [284] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [289] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [290] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [291] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [292] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [293] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [294] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced down to 31 phi equivalence classes Culled Empty Block (label) @6 Culled Empty Block (label) @29 Culled Empty Block (label) @39 @@ -2892,8 +2855,8 @@ render_sine: scope:[render_sine] from main::@6 [22] phi() to:render_sine::@1 render_sine::@1: scope:[render_sine] from render_sine render_sine::@3 - [23] (word) render_sine::xpos#3 ← phi( render_sine/(byte) 0 render_sine::@3/(word) render_sine::xpos#9 ) - [23] (word) render_sine::sin_idx#2 ← phi( render_sine/(byte) 0 render_sine::@3/(word) render_sine::sin_idx#1 ) + [23] (word) render_sine::xpos#3 ← phi( render_sine/(word) 0 render_sine::@3/(word) render_sine::xpos#9 ) + [23] (word) render_sine::sin_idx#2 ← phi( render_sine/(word) 0 render_sine::@3/(word) render_sine::sin_idx#1 ) [24] if((word) render_sine::sin_idx#2<(const word) SIN_SIZE) goto render_sine::@2 to:render_sine::@return render_sine::@return: scope:[render_sine] from render_sine::@1 @@ -2989,8 +2952,8 @@ sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2 to:sin16s_gen2::@1 sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5 [71] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) sin sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) - [71] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) - [71] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) + [71] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 ) + [71] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 ) [72] if((word) sin16s_gen2::i#2<(const word) SIN_SIZE) goto sin16s_gen2::@2 to:sin16s_gen2::@return sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@1 @@ -3043,257 +3006,258 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mulu16_sel [97] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 ) - [97] (dword) mul16u::mb#0 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [97] (word) mul16u::b#2 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) + [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [98] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [98] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [98] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [99] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [99] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [99] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [100] return + [101] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [102] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [103] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [104] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [105] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [106] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [105] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [106] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [107] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen2::@2 - [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 + [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s - [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 + [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 - [109] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) - [109] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) - [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 + [110] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) + [110] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) + [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 - [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 + [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 - [112] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) - [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 - [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 - [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 - [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 - [117] call mulu16_sel - [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + [113] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) + [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 + [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 + [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 + [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 + [118] call mulu16_sel + [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 - [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 - [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 - [122] call mulu16_sel - [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 + [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 + [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 + [123] call mulu16_sel + [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 - [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - [126] call mulu16_sel - [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + [127] call mulu16_sel + [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 - [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 - [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 - [132] call mulu16_sel - [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 + [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 + [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 + [133] call mulu16_sel + [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 - [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 - [137] call mulu16_sel - [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 + [138] call mulu16_sel + [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 - [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 - [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 - [142] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 + [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 + [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 + [143] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 - [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 + [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 - [144] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) + [145] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 - [145] return + [146] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 - [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 - [147] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) - [147] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) - [147] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) - [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 - [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - [150] call mul16u - [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [148] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 ) + [148] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 ) + [148] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 ) + [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 + [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + [151] call mul16u + [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel - [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 - [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 + [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + [154] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 + [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 - [155] return + [156] return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen2 - [156] phi() - [157] call divr16u - [158] (word) divr16u::return#2 ← (word) divr16u::return#0 + [157] phi() + [158] call divr16u + [159] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u - [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 - [160] (word) divr16u::rem#4 ← (word) rem16u#1 - [161] call divr16u - [162] (word) divr16u::return#3 ← (word) divr16u::return#0 + [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 + [161] (word) divr16u::rem#4 ← (word) rem16u#1 + [162] call divr16u + [163] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 - [163] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - [164] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 + [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 - [165] return + [166] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 - [166] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) - [166] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) + [167] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 ) + [167] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [167] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [167] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [167] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) - [167] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) - [168] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 - [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 - [170] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [171] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [168] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [168] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [168] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) + [168] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) + [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 + [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 + [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [173] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [174] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 - [175] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 + [174] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 + [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [177] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE + [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [179] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [179] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) - [180] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [181] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [180] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [180] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) + [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 - [182] (word) rem16u#1 ← (word) divr16u::rem#11 + [183] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - [183] return + [184] return to:@return (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) bitmap_clear: scope:[bitmap_clear] from main::@4 - [184] phi() - [185] call memset + [185] phi() + [186] call memset to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear - [186] phi() - [187] call memset + [187] phi() + [188] call memset to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1 - [188] return + [189] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from bitmap_clear bitmap_clear::@1 - [189] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) - [189] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) - [189] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) - [190] if((word) memset::num#2<=(byte) 0) goto memset::@return + [190] (byte) memset::c#4 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 ) + [190] (void*) memset::str#3 ← phi( bitmap_clear/(void*)(const byte*) SCREEN bitmap_clear::@1/(void*)(const byte*) BITMAP ) + [190] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 ) + [191] if((word) memset::num#2<=(byte) 0) goto memset::@return to:memset::@1 memset::@1: scope:[memset] from memset - [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 - [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 + [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 to:memset::@2 memset::@2: scope:[memset] from memset::@1 memset::@3 - [193] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) - [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 + [194] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 ) + [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 to:memset::@return memset::@return: scope:[memset] from memset memset::@2 - [195] return + [196] return to:@return memset::@3: scope:[memset] from memset::@2 - [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 - [197] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 + [198] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@2 (void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen) bitmap_init: scope:[bitmap_init] from main::@3 - [198] phi() + [199] phi() to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [199] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) - [199] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) - [200] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 - [201] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 - [202] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 + [200] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) + [200] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 ) + [201] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 + [202] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 + [203] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 to:bitmap_init::@2 bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1 - [203] phi() + [204] phi() to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6 - [204] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) - [205] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 - [206] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 + [205] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 ) + [206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 + [207] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [207] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) - [207] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) - [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 - [209] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 - [210] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 - [211] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 - [212] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 - [213] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 - [214] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 + [208] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP bitmap_init::@4/(byte*) bitmap_init::yoffs#4 ) + [208] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 ) + [209] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 + [210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 + [211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 + [212] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 + [213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 + [214] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 + [215] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3 - [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 + [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5 - [216] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) - [217] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 - [218] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 + [217] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 ) + [218] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 + [219] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [219] return + [220] return to:@return @@ -3419,9 +3383,10 @@ VARIABLE REGISTER WEIGHTS (word) mul16u::a#1 4.0 (word) mul16u::a#2 2.0 (word) mul16u::a#3 67.66666666666666 -(word) mul16u::a#6 6.0 +(word) mul16u::a#6 3.0 (word) mul16u::b (word) mul16u::b#1 4.0 +(word) mul16u::b#2 2.0 (dword) mul16u::mb (dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 @@ -3546,7 +3511,6 @@ VARIABLE REGISTER WEIGHTS (signed word) wrap_y::y#6 202.0 (signed word) wrap_y::y#9 24.0 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 Initial phi equivalence classes [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] @@ -3557,7 +3521,7 @@ Initial phi equivalence classes [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3648,7 +3612,7 @@ Complete equivalence classes [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3738,7 +3702,7 @@ Allocated zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] Allocated zp[4]:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] Allocated zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] Allocated zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] -Allocated zp[2]:23 [ mul16u::b#1 ] +Allocated zp[2]:23 [ mul16u::b#2 mul16u::b#1 ] Allocated zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] Allocated zp[4]:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -3928,7 +3892,7 @@ main: { lda #toD0181_return sta D018 // [14] call bitmap_init - // [198] phi from main::@3 to bitmap_init [phi:main::@3->bitmap_init] + // [199] phi from main::@3 to bitmap_init [phi:main::@3->bitmap_init] bitmap_init_from___b3: jsr bitmap_init // [15] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -3937,7 +3901,7 @@ main: { // main::@4 __b4: // [16] call bitmap_clear - // [184] phi from main::@4 to bitmap_clear [phi:main::@4->bitmap_clear] + // [185] phi from main::@4 to bitmap_clear [phi:main::@4->bitmap_clear] bitmap_clear_from___b4: jsr bitmap_clear // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -3979,12 +3943,12 @@ render_sine: { .label sin_idx = 2 // [23] phi from render_sine to render_sine::@1 [phi:render_sine->render_sine::@1] __b1_from_render_sine: - // [23] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::xpos#3 = (word) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z xpos lda #>0 sta.z xpos+1 - // [23] phi (word) render_sine::sin_idx#2 = (byte) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::sin_idx#2 = (word) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z sin_idx lda #>0 @@ -4301,7 +4265,7 @@ sin16s_gen2: { .label x = $d .label i = $b // [68] call div32u16u - // [156] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [157] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u // [69] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 @@ -4332,14 +4296,16 @@ sin16s_gen2: { sta.z sintab lda #>sin sta.z sintab+1 - // [71] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [71] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [71] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [71] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4477,15 +4443,11 @@ mul16s: { // [97] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [97] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [97] phi (dword) mul16u::mb#0 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vduz1=vduc1 + // [97] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -4568,21 +4530,31 @@ mul16u: { .label return = $70 .label b = $17 .label return_1 = $9d - // [98] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [99] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [98] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [98] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [99] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [99] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [98] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [99] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -4590,22 +4562,22 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [100] return + // [101] return rts // mul16u::@2 __b2: - // [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 + // [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [102] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 + // [103] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -4619,26 +4591,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [104] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [105] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [104] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [105] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [105] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [106] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [106] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [107] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [98] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [99] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [98] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [98] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [98] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [99] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [99] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [99] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // sin16s @@ -4663,7 +4635,7 @@ sin16s: { .label sinx = $28 // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = $23 - // [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -4683,7 +4655,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [109] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [110] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [109] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 + // [110] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [109] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [110] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [109] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [110] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [109] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 + // [110] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [109] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [110] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -4733,7 +4705,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [112] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [113] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [112] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [113] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -4775,31 +4747,31 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [117] call mulu16_sel - // [147] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [118] call mulu16_sel + // [148] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return lda.z mulu16_sel.return_5+1 @@ -4807,31 +4779,31 @@ sin16s: { jmp __b7 // sin16s::@7 __b7: - // [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 + // [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 lda.z x2 sta.z mulu16_sel.v1 lda.z x2+1 sta.z mulu16_sel.v1+1 - // [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [122] call mulu16_sel - // [147] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [123] call mulu16_sel + // [148] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_1 lda.z mulu16_sel.return_5+1 @@ -4839,30 +4811,30 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 + // [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x3 lda.z mulu16_sel.return_1+1 sta.z x3+1 - // [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [126] call mulu16_sel - // [147] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [127] call mulu16_sel + // [148] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select - // [147] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [148] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_2 lda.z mulu16_sel.return_5+1 @@ -4870,12 +4842,12 @@ sin16s: { jmp __b9 // sin16s::@9 __b9: - // [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 + // [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 lda.z mulu16_sel.return_2 sta.z x3_6 lda.z mulu16_sel.return_2+1 sta.z x3_6+1 - // [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -4883,26 +4855,26 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 + // [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 - // [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [132] call mulu16_sel - // [147] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [133] call mulu16_sel + // [148] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_3 lda.z mulu16_sel.return_5+1 @@ -4910,31 +4882,31 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 + // [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 lda.z mulu16_sel.return_3 sta.z x4 lda.z mulu16_sel.return_3+1 sta.z x4+1 - // [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 + // [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 lda.z x4 sta.z mulu16_sel.v1 lda.z x4+1 sta.z mulu16_sel.v1+1 - // [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [137] call mulu16_sel - // [147] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [138] call mulu16_sel + // [148] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z mulu16_sel.return_4 lda.z mulu16_sel.return_5+1 @@ -4942,12 +4914,12 @@ sin16s: { jmp __b11 // sin16s::@11 __b11: - // [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 + // [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 lda.z mulu16_sel.return_4 sta.z x5 lda.z mulu16_sel.return_4+1 sta.z x5+1 - // [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 + // [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 lda.z x5+1 lsr sta.z x5_128+1 @@ -4960,7 +4932,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 + // [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z usinx clc adc.z x5_128 @@ -4968,14 +4940,14 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx_1+1 - // [142] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 + // [143] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 + // [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z usinx_1 @@ -4983,21 +4955,21 @@ sin16s: { lda #0 sbc.z usinx_1+1 sta.z sinx+1 - // [144] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [145] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [144] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [145] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [145] return + // [146] return rts // sin16s::@12 __b12: - // [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 + // [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 lda.z usinx_1 sta.z return_1 lda.z usinx_1+1 @@ -5020,30 +4992,23 @@ mulu16_sel: { .label return_4 = $95 .label select = $2e .label return_5 = $a9 - // [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 + // [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 lda.z v2 sta.z mul16u.b lda.z v2+1 sta.z mul16u.b+1 - // [150] call mul16u + // [151] call mul16u // [97] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [97] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [97] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [97] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 + // [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res sta.z mul16u.return_1 lda.z mul16u.res+1 @@ -5055,7 +5020,7 @@ mulu16_sel: { jmp __b1 // mulu16_sel::@1 __b1: - // [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 + // [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 lda.z mul16u.return_1 sta.z __0 lda.z mul16u.return_1+1 @@ -5064,7 +5029,7 @@ mulu16_sel: { sta.z __0+2 lda.z mul16u.return_1+3 sta.z __0+3 - // [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 + // [154] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 lda.z __0 sta.z __1 lda.z __0+1 @@ -5083,7 +5048,7 @@ mulu16_sel: { dex bne !- !e: - // [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_5 lda.z __1+3 @@ -5091,7 +5056,7 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [155] return + // [156] return rts } // div32u16u @@ -5102,21 +5067,21 @@ div32u16u: { .label quotient_lo = $b1 .label return = $b3 .label return_1 = $5a - // [157] call divr16u - // [166] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [158] call divr16u + // [167] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [166] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [167] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [166] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [167] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [158] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [159] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_1 lda.z divr16u.return+1 @@ -5124,27 +5089,27 @@ div32u16u: { jmp __b1 // div32u16u::@1 __b1: - // [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return_1 sta.z quotient_hi lda.z divr16u.return_1+1 sta.z quotient_hi+1 - // [160] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 + // [161] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 lda.z rem16u sta.z divr16u.rem lda.z rem16u+1 sta.z divr16u.rem+1 - // [161] call divr16u - // [166] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [162] call divr16u + // [167] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [166] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [167] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [166] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [167] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [162] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [163] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_2 lda.z divr16u.return+1 @@ -5152,12 +5117,12 @@ div32u16u: { jmp __b2 // div32u16u::@2 __b2: - // [163] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 + // [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 lda.z divr16u.return_2 sta.z quotient_lo lda.z divr16u.return_2+1 sta.z quotient_lo+1 - // [164] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -5169,7 +5134,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [165] return + // [166] return rts } // divr16u @@ -5188,63 +5153,63 @@ divr16u: { .label return = $33 .label return_1 = $ab .label return_2 = $af - // [167] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [168] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [167] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + // [168] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [167] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [167] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [167] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [167] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [168] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [167] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [167] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [167] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [167] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [168] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [168] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [168] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 + // [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 lda.z dividend+1 sta.z __1 - // [170] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z __1 sta.z __2 - // [171] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 + // [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda.z __2 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [173] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [174] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [173] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [174] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [174] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [175] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>SIN_SIZE bcc __b3_from___b2 @@ -5256,12 +5221,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [177] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 + // [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #SIN_SIZE sta.z rem+1 - // [179] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [180] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [179] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [179] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [180] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [180] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [180] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 + // [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [181] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 + // [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [182] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 + // [183] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 lda.z rem sta.z rem16u lda.z rem+1 @@ -5294,7 +5259,7 @@ divr16u: { jmp __breturn // divr16u::@return __breturn: - // [183] return + // [184] return rts } // bitmap_clear @@ -5303,40 +5268,40 @@ divr16u: { // fgcol - the foreground color to fill the screen with bitmap_clear: { .const col = WHITE*$10 - // [185] call memset - // [189] phi from bitmap_clear to memset [phi:bitmap_clear->memset] + // [186] call memset + // [190] phi from bitmap_clear to memset [phi:bitmap_clear->memset] memset_from_bitmap_clear: - // [189] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuz1=vbuc1 + // [190] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuz1=vbuc1 lda #col sta.z memset.c - // [189] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [190] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [189] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [190] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [186] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [187] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] __b1_from_bitmap_clear: jmp __b1 // bitmap_clear::@1 __b1: - // [187] call memset - // [189] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [188] call memset + // [190] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] memset_from___b1: - // [189] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuz1=vbuc1 + // [190] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuz1=vbuc1 lda #0 sta.z memset.c - // [189] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [190] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [189] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [190] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -5345,7 +5310,7 @@ bitmap_clear: { jmp __breturn // bitmap_clear::@return __breturn: - // [188] return + // [189] return rts } // memset @@ -5357,7 +5322,7 @@ memset: { .label num = $36 .label str = $38 .label c = $3a - // [190] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [191] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -5366,7 +5331,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 + // [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z str clc adc.z num @@ -5374,19 +5339,19 @@ memset: { lda.z str+1 adc.z num+1 sta.z end+1 - // [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 + // [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 lda.z str sta.z dst lda.z str+1 sta.z dst+1 - // [193] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [194] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [193] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [194] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -5396,15 +5361,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [195] return + // [196] return rts // memset::@3 __b3: - // [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 + // [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 lda.z c ldy #0 sta (dst),y - // [197] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [198] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -5422,103 +5387,103 @@ bitmap_init: { .label x = $3e .label y = $3f .label yoffs = $40 - // [199] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + // [200] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] __b1_from_bitmap_init: - // [199] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 + // [200] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [199] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 + // [200] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 lda #$80 sta.z bits jmp __b1 - // [199] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [200] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] __b1_from___b2: - // [199] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [199] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [200] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [200] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp __b1 // bitmap_init::@1 __b1: - // [200] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2 + // [201] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z bits ldy.z x sta bitmap_plot_bit,y - // [201] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [202] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z bits - // [202] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuz1_neq_0_then_la1 + // [203] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuz1_neq_0_then_la1 lda.z bits cmp #0 bne __b6_from___b1 - // [204] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [205] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] __b2_from___b1: - // [204] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 + // [205] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 lda #$80 sta.z bits jmp __b2 - // [203] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [204] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] __b6_from___b1: jmp __b6 // bitmap_init::@6 __b6: - // [204] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [205] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] __b2_from___b6: - // [204] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [205] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy jmp __b2 // bitmap_init::@2 __b2: - // [205] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuz1=_inc_vbuz1 + // [206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [206] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuz1_neq_0_then_la1 + // [207] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuz1_neq_0_then_la1 lda.z x cmp #0 bne __b1_from___b2 - // [207] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [208] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] __b3_from___b2: - // [207] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [208] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [207] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 + // [208] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b3 - // [207] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [208] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] __b3_from___b4: - // [207] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [207] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [208] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [208] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp __b3 // bitmap_init::@3 __b3: - // [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [209] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z y sta.z __7 - // [209] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuz1=_lo_pbuz2 + // [210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuz1=_lo_pbuz2 lda.z yoffs sta.z __4 - // [210] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuz1=vbuz2_bor_vbuz3 + // [211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuz1=vbuz2_bor_vbuz3 lda.z __7 ora.z __4 sta.z __5 - // [211] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuz1=vbuz2 + // [212] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __5 ldy.z y sta bitmap_plot_ylo,y - // [212] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuz1=_hi_pbuz2 + // [213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuz1=_hi_pbuz2 lda.z yoffs+1 sta.z __6 - // [213] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 + // [214] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z __6 ldy.z y sta bitmap_plot_yhi,y - // [214] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [215] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4_from___b3 jmp __b5 // bitmap_init::@5 __b5: - // [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -5526,23 +5491,23 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [216] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [217] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] __b4_from___b3: __b4_from___b5: - // [216] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [217] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy jmp __b4 // bitmap_init::@4 __b4: - // [217] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuz1=_inc_vbuz1 + // [218] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [218] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuz1_neq_0_then_la1 + // [219] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuz1_neq_0_then_la1 lda.z y cmp #0 bne __b3_from___b4 jmp __breturn // bitmap_init::@return __breturn: - // [219] return + // [220] return rts } // File Data @@ -5611,67 +5576,68 @@ Statement [91] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s Statement [92] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a Statement [93] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a Statement [95] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:35 [ sin16s::isUpper#2 ] Removing always clobbered register reg byte a as potential for zp[1]:46 [ mulu16_sel::select#5 ] -Statement [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [158] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [160] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [162] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [163] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [164] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::return#0 ] ) always clobbers reg byte a -Statement [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [154] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [159] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [161] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [163] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::return#0 ] ) always clobbers reg byte a +Statement [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:53 [ divr16u::i#2 divr16u::i#1 ] -Statement [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [182] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [190] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:16::memset:185 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:16::memset:187 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Statement [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [183] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [191] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:16::memset:186 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:16::memset:188 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:58 [ memset::c#4 ] -Statement [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:16::memset:185 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:16::memset:187 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#4 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:16::memset:186 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:16::memset:188 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::bitmap_clear:16::memset:186 [ memset::c#4 memset::end#0 memset::dst#4 ] main:2::bitmap_clear:16::memset:188 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:186 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:188 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:186 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:188 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:58 [ memset::c#4 ] -Statement [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:63 [ bitmap_init::y#2 bitmap_init::y#1 ] Statement [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] ) always clobbers reg byte a @@ -5722,63 +5688,64 @@ Statement [91] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s Statement [92] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a Statement [93] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a Statement [95] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::sin16s_gen2:18::mul16s:78 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a -Statement [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137::mul16u:150 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a -Statement [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a -Statement [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a -Statement [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a -Statement [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a -Statement [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a -Statement [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a -Statement [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a -Statement [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a -Statement [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a -Statement [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a -Statement [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a -Statement [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a -Statement [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a -Statement [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a -Statement [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a -Statement [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a -Statement [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a -Statement [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a -Statement [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a -Statement [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a -Statement [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a -Statement [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a -Statement [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a -Statement [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a -Statement [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a -Statement [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a -Statement [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a -Statement [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a -Statement [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a -Statement [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a -Statement [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a -Statement [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a -Statement [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a -Statement [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:126 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:132 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:137 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a -Statement [158] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a -Statement [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a -Statement [160] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a -Statement [162] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a -Statement [163] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a -Statement [164] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::return#0 ] ) always clobbers reg byte a -Statement [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [182] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:157 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:161 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a -Statement [190] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:16::memset:185 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:16::memset:187 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a -Statement [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:16::memset:185 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:16::memset:187 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a -Statement [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#4 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a -Statement [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a -Statement [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:185 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:187 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y -Statement [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a -Statement [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen2:18::mul16s:78::mul16u:87 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138::mul16u:151 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a +Statement [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a +Statement [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a +Statement [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a +Statement [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a +Statement [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a +Statement [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a +Statement [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a +Statement [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a +Statement [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a +Statement [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a +Statement [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a +Statement [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a +Statement [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a +Statement [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a +Statement [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a +Statement [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a +Statement [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a +Statement [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a +Statement [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a +Statement [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a +Statement [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a +Statement [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a +Statement [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a +Statement [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a +Statement [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a +Statement [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a +Statement [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a +Statement [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a +Statement [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen2:18::sin16s:75 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a +Statement [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a +Statement [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a +Statement [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a +Statement [154] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a +Statement [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:118 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:123 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:133 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen2:18::sin16s:75::mulu16_sel:138 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [159] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a +Statement [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a +Statement [161] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a +Statement [163] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a +Statement [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a +Statement [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen2:18::div32u16u:68 [ div32u16u::return#0 ] ) always clobbers reg byte a +Statement [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [183] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen2:18::div32u16u:68::divr16u:158 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen2:18::div32u16u:68::divr16u:162 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a +Statement [191] if((word) memset::num#2<=(byte) 0) goto memset::@return [ memset::num#2 memset::str#3 memset::c#4 ] ( main:2::bitmap_clear:16::memset:186 [ memset::num#2 memset::str#3 memset::c#4 ] main:2::bitmap_clear:16::memset:188 [ memset::num#2 memset::str#3 memset::c#4 ] ) always clobbers reg byte a +Statement [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:2::bitmap_clear:16::memset:186 [ memset::str#3 memset::c#4 memset::end#0 ] main:2::bitmap_clear:16::memset:188 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a +Statement [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:2::bitmap_clear:16::memset:186 [ memset::c#4 memset::end#0 memset::dst#4 ] main:2::bitmap_clear:16::memset:188 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a +Statement [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:186 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:188 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a +Statement [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:2::bitmap_clear:16::memset:186 [ memset::c#4 memset::end#0 memset::dst#2 ] main:2::bitmap_clear:16::memset:188 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [209] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a +Statement [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:14 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Potential registers zp[2]:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] : zp[2]:4 , Potential registers zp[1]:6 [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , @@ -5788,7 +5755,7 @@ Potential registers zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:11 , Potential registers zp[4]:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:13 , Potential registers zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:17 , Potential registers zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] : zp[4]:19 , -Potential registers zp[2]:23 [ mul16u::b#1 ] : zp[2]:23 , +Potential registers zp[2]:23 [ mul16u::b#2 mul16u::b#1 ] : zp[2]:23 , Potential registers zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:25 , Potential registers zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:27 , Potential registers zp[4]:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:31 , @@ -5871,7 +5838,7 @@ Potential registers zp[1]:191 [ bitmap_init::$5 ] : zp[1]:191 , reg byte a , reg Potential registers zp[1]:192 [ bitmap_init::$6 ] : zp[1]:192 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [mul16u] 346.86: zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:124 [ mul16u::$1 ] 180.67: zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 4: zp[2]:23 [ mul16u::b#1 ] 4: zp[4]:112 [ mul16u::return#2 ] 4: zp[4]:157 [ mul16u::return#3 ] +Uplift Scope [mul16u] 346.86: zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:124 [ mul16u::$1 ] 177.67: zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 6: zp[2]:23 [ mul16u::b#2 mul16u::b#1 ] 4: zp[4]:112 [ mul16u::return#2 ] 4: zp[4]:157 [ mul16u::return#3 ] Uplift Scope [wrap_y] 877: zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] 22: zp[1]:72 [ wrap_y::return#0 ] 22: zp[1]:80 [ wrap_y::return#1 ] 6: zp[1]:89 [ wrap_y::return#2 ] Uplift Scope [divr16u] 106.92: zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:183 [ divr16u::$1 ] 22: zp[1]:184 [ divr16u::$2 ] 18.19: zp[1]:53 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:171 [ divr16u::return#2 ] 4: zp[2]:175 [ divr16u::return#3 ] Uplift Scope [render_sine] 24.12: zp[2]:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] 24: zp[2]:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] 22: zp[2]:66 [ render_sine::$10 ] 22: zp[2]:68 [ render_sine::$1 ] 22: zp[2]:70 [ render_sine::sin_val#0 ] 22: zp[2]:74 [ render_sine::$11 ] 22: zp[2]:76 [ render_sine::$4 ] 22: zp[2]:78 [ render_sine::sin2_val#0 ] 11: zp[1]:73 [ render_sine::ypos#0 ] 11: zp[1]:81 [ render_sine::ypos2#0 ] @@ -5887,28 +5854,28 @@ Uplift Scope [] 0.8: zp[2]:185 [ rem16u#1 ] Uplift Scope [bitmap_clear] Uplift Scope [main] -Uplifting [mul16u] best 30973 combination zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:23 [ mul16u::b#1 ] zp[4]:112 [ mul16u::return#2 ] zp[4]:157 [ mul16u::return#3 ] -Uplifting [wrap_y] best 30790 combination zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] reg byte a [ wrap_y::return#0 ] reg byte a [ wrap_y::return#1 ] reg byte a [ wrap_y::return#2 ] -Uplifting [divr16u] best 30580 combination zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:171 [ divr16u::return#2 ] zp[2]:175 [ divr16u::return#3 ] -Uplifting [render_sine] best 30500 combination zp[2]:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] zp[2]:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] zp[2]:66 [ render_sine::$10 ] zp[2]:68 [ render_sine::$1 ] zp[2]:70 [ render_sine::sin_val#0 ] zp[2]:74 [ render_sine::$11 ] zp[2]:76 [ render_sine::$4 ] zp[2]:78 [ render_sine::sin2_val#0 ] reg byte x [ render_sine::ypos#0 ] reg byte x [ render_sine::ypos2#0 ] -Uplifting [bitmap_init] best 29990 combination zp[2]:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:191 [ bitmap_init::$5 ] zp[1]:192 [ bitmap_init::$6 ] zp[1]:189 [ bitmap_init::$7 ] +Uplifting [mul16u] best 31403 combination zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:31 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:23 [ mul16u::b#2 mul16u::b#1 ] zp[4]:112 [ mul16u::return#2 ] zp[4]:157 [ mul16u::return#3 ] +Uplifting [wrap_y] best 31220 combination zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 ] reg byte a [ wrap_y::return#0 ] reg byte a [ wrap_y::return#1 ] reg byte a [ wrap_y::return#2 ] +Uplifting [divr16u] best 31010 combination zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:171 [ divr16u::return#2 ] zp[2]:175 [ divr16u::return#3 ] +Uplifting [render_sine] best 30930 combination zp[2]:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] zp[2]:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] zp[2]:66 [ render_sine::$10 ] zp[2]:68 [ render_sine::$1 ] zp[2]:70 [ render_sine::sin_val#0 ] zp[2]:74 [ render_sine::$11 ] zp[2]:76 [ render_sine::$4 ] zp[2]:78 [ render_sine::sin2_val#0 ] reg byte x [ render_sine::ypos#0 ] reg byte x [ render_sine::ypos2#0 ] +Uplifting [bitmap_init] best 30420 combination zp[2]:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte a [ bitmap_init::$4 ] zp[1]:191 [ bitmap_init::$5 ] zp[1]:192 [ bitmap_init::$6 ] zp[1]:189 [ bitmap_init::$7 ] Limited combination testing to 100 combinations of 15360 possible. -Uplifting [bitmap_plot] best 29923 combination reg byte x [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] zp[2]:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] zp[2]:84 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:86 [ bitmap_plot::plotter#1 ] zp[2]:82 [ bitmap_plot::plotter#0 ] -Uplifting [sin16s] best 29914 combination zp[4]:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:98 [ sin16s::return#0 ] zp[2]:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:125 [ sin16s::$4 ] zp[2]:133 [ sin16s::x2#0 ] zp[2]:141 [ sin16s::x3_6#0 ] zp[2]:147 [ sin16s::x4#0 ] zp[2]:151 [ sin16s::x5#0 ] zp[2]:153 [ sin16s::x5_128#0 ] zp[2]:137 [ sin16s::x3#0 ] zp[2]:155 [ sin16s::usinx#1 ] zp[2]:129 [ sin16s::x1#0 ] zp[2]:143 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen2] best 29914 combination zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:106 [ sin16s_gen2::$6 ] zp[4]:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:110 [ sin16s_gen2::$9 ] zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:94 [ sin16s_gen2::step#0 ] -Uplifting [mulu16_sel] best 29898 combination zp[2]:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:131 [ mulu16_sel::return#0 ] zp[2]:135 [ mulu16_sel::return#1 ] zp[2]:139 [ mulu16_sel::return#2 ] zp[2]:145 [ mulu16_sel::return#10 ] zp[2]:149 [ mulu16_sel::return#11 ] zp[4]:161 [ mulu16_sel::$0 ] zp[4]:165 [ mulu16_sel::$1 ] zp[2]:169 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [mul16s] best 29898 combination zp[4]:102 [ mul16s::return#2 ] zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp[4]:120 [ mul16s::return#0 ] zp[2]:116 [ mul16s::$9 ] zp[2]:118 [ mul16s::$16 ] zp[2]:100 [ mul16s::a#0 ] -Uplifting [memset] best 29882 combination zp[2]:59 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:187 [ memset::end#0 ] zp[2]:54 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp[2]:56 [ memset::str#3 ] -Uplifting [div32u16u] best 29882 combination zp[4]:90 [ div32u16u::return#2 ] zp[2]:177 [ div32u16u::quotient_lo#0 ] zp[4]:179 [ div32u16u::return#0 ] zp[2]:173 [ div32u16u::quotient_hi#0 ] -Uplifting [] best 29882 combination zp[2]:185 [ rem16u#1 ] -Uplifting [bitmap_clear] best 29882 combination -Uplifting [main] best 29882 combination +Uplifting [bitmap_plot] best 30353 combination reg byte x [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ] zp[2]:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] zp[2]:84 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:86 [ bitmap_plot::plotter#1 ] zp[2]:82 [ bitmap_plot::plotter#0 ] +Uplifting [sin16s] best 30344 combination zp[4]:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:98 [ sin16s::return#0 ] zp[2]:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:125 [ sin16s::$4 ] zp[2]:133 [ sin16s::x2#0 ] zp[2]:141 [ sin16s::x3_6#0 ] zp[2]:147 [ sin16s::x4#0 ] zp[2]:151 [ sin16s::x5#0 ] zp[2]:153 [ sin16s::x5_128#0 ] zp[2]:137 [ sin16s::x3#0 ] zp[2]:155 [ sin16s::usinx#1 ] zp[2]:129 [ sin16s::x1#0 ] zp[2]:143 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16s_gen2] best 30344 combination zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:106 [ sin16s_gen2::$6 ] zp[4]:13 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:110 [ sin16s_gen2::$9 ] zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:94 [ sin16s_gen2::step#0 ] +Uplifting [mulu16_sel] best 30328 combination zp[2]:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:131 [ mulu16_sel::return#0 ] zp[2]:135 [ mulu16_sel::return#1 ] zp[2]:139 [ mulu16_sel::return#2 ] zp[2]:145 [ mulu16_sel::return#10 ] zp[2]:149 [ mulu16_sel::return#11 ] zp[4]:161 [ mulu16_sel::$0 ] zp[4]:165 [ mulu16_sel::$1 ] zp[2]:169 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [mul16s] best 30328 combination zp[4]:102 [ mul16s::return#2 ] zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp[4]:120 [ mul16s::return#0 ] zp[2]:116 [ mul16s::$9 ] zp[2]:118 [ mul16s::$16 ] zp[2]:100 [ mul16s::a#0 ] +Uplifting [memset] best 30312 combination zp[2]:59 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:187 [ memset::end#0 ] zp[2]:54 [ memset::num#2 ] reg byte x [ memset::c#4 ] zp[2]:56 [ memset::str#3 ] +Uplifting [div32u16u] best 30312 combination zp[4]:90 [ div32u16u::return#2 ] zp[2]:177 [ div32u16u::quotient_lo#0 ] zp[4]:179 [ div32u16u::return#0 ] zp[2]:173 [ div32u16u::quotient_hi#0 ] +Uplifting [] best 30312 combination zp[2]:185 [ rem16u#1 ] +Uplifting [bitmap_clear] best 30312 combination +Uplifting [main] best 30312 combination Attempting to uplift remaining variables inzp[1]:191 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 29822 combination reg byte a [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 30252 combination reg byte a [ bitmap_init::$5 ] Attempting to uplift remaining variables inzp[1]:192 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 29762 combination reg byte a [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 30192 combination reg byte a [ bitmap_init::$6 ] Attempting to uplift remaining variables inzp[1]:189 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 29762 combination zp[1]:189 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 30192 combination zp[1]:189 [ bitmap_init::$7 ] Coalescing zero page register [ zp[2]:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 ] ] with [ zp[2]:7 [ bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:155 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:137 [ sin16s::x3#0 ] ] - score: 2 @@ -5917,7 +5884,7 @@ Coalescing zero page register [ zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wr Coalescing zero page register [ zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 ] ] with [ zp[2]:78 [ render_sine::sin2_val#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] ] with [ zp[4]:112 [ mul16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 ] ] with [ zp[4]:120 [ mul16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:23 [ mul16u::b#1 ] ] with [ zp[2]:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:23 [ mul16u::b#2 mul16u::b#1 ] ] with [ zp[2]:44 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1 Coalescing zero page register [ zp[4]:27 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:157 [ mul16u::return#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:98 [ sin16s::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:42 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:133 [ sin16s::x2#0 ] ] - score: 1 @@ -5952,7 +5919,7 @@ Coalescing zero page register [ zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 m Coalescing zero page register [ zp[2]:131 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:153 [ sin16s::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 ] ] Coalescing zero page register [ zp[2]:17 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] with [ zp[2]:4 [ render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] ] -Coalescing zero page register [ zp[2]:23 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] ] +Coalescing zero page register [ zp[2]:23 [ mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:9 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] ] Coalescing zero page register [ zp[4]:36 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:19 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ] Coalescing zero page register [ zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:25 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] Coalescing zero page register [ zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:40 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] ] @@ -5964,7 +5931,7 @@ Coalescing zero page register [ zp[4]:125 [ sin16s::$4 ] ] with [ zp[4]:31 [ mul Coalescing zero page register [ zp[2]:129 [ sin16s::x1#0 ] ] with [ zp[2]:116 [ mul16s::$9 mul16s::$16 ] ] Coalescing zero page register [ zp[2]:173 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:131 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] Coalescing zero page register [ zp[2]:64 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 ] ] with [ zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ] ] -Coalescing zero page register [ zp[2]:82 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:23 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] ] +Coalescing zero page register [ zp[2]:82 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:23 [ mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] ] Coalescing zero page register [ zp[2]:110 [ sin16s_gen2::$9 bitmap_plot::$1 ] ] with [ zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] Allocated (was zp[4]:13) zp[4]:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] Allocated (was zp[2]:17) zp[2]:6 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ] @@ -5972,7 +5939,7 @@ Allocated (was zp[4]:36) zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x Allocated (was zp[2]:49) zp[2]:12 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] Allocated (was zp[2]:51) zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] Allocated (was zp[2]:64) zp[2]:16 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ] -Allocated (was zp[2]:82) zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] +Allocated (was zp[2]:82) zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] Allocated (was zp[4]:90) zp[4]:20 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] Allocated (was zp[2]:110) zp[2]:24 [ sin16s_gen2::$9 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] Allocated (was zp[4]:125) zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -6087,7 +6054,7 @@ main: { lda #toD0181_return sta D018 // [14] call bitmap_init - // [198] phi from main::@3 to bitmap_init [phi:main::@3->bitmap_init] + // [199] phi from main::@3 to bitmap_init [phi:main::@3->bitmap_init] bitmap_init_from___b3: jsr bitmap_init // [15] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -6096,7 +6063,7 @@ main: { // main::@4 __b4: // [16] call bitmap_clear - // [184] phi from main::@4 to bitmap_clear [phi:main::@4->bitmap_clear] + // [185] phi from main::@4 to bitmap_clear [phi:main::@4->bitmap_clear] bitmap_clear_from___b4: jsr bitmap_clear // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -6136,12 +6103,12 @@ render_sine: { .label sin_idx = $10 // [23] phi from render_sine to render_sine::@1 [phi:render_sine->render_sine::@1] __b1_from_render_sine: - // [23] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::xpos#3 = (word) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z xpos lda #>0 sta.z xpos+1 - // [23] phi (word) render_sine::sin_idx#2 = (byte) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::sin_idx#2 = (word) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z sin_idx lda #>0 @@ -6431,7 +6398,7 @@ sin16s_gen2: { .label x = 2 .label i = $10 // [68] call div32u16u - // [156] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [157] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] div32u16u_from_sin16s_gen2: jsr div32u16u // [69] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 @@ -6446,14 +6413,16 @@ sin16s_gen2: { sta.z sintab lda #>sin sta.z sintab+1 - // [71] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [71] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [71] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [71] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -6566,15 +6535,11 @@ mul16s: { // [97] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [97] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [97] phi (dword) mul16u::mb#0 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vduz1=vduc1 + // [97] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b4 @@ -6631,21 +6596,31 @@ mul16u: { .label res = 8 .label return = 8 .label b = $12 - // [98] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [99] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [98] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [98] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [99] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [99] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [98] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [99] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -6653,20 +6628,20 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [100] return + // [101] return rts // mul16u::@2 __b2: - // [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a - // [102] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [103] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -6680,26 +6655,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [104] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [105] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [104] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [105] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [105] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [106] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [106] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [107] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [98] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [99] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [98] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [98] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [98] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [99] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [99] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [99] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // sin16s @@ -6720,7 +6695,7 @@ sin16s: { .label x5 = $20 .label x5_128 = $20 .label sinx = $c - // [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s @@ -6740,7 +6715,7 @@ sin16s: { jmp __b4 // sin16s::@4 __b4: - // [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [109] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [110] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: - // [109] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [110] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [109] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [110] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [109] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [110] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: - // [109] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [110] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [109] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [110] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: - // [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 @@ -6788,7 +6763,7 @@ sin16s: { jmp __b5 // sin16s::@5 __b5: - // [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [112] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [113] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: - // [112] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [113] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: - // [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -6830,53 +6805,53 @@ sin16s: { rol.z __4+1 rol.z __4+2 rol.z __4+3 - // [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 - // [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [117] call mulu16_sel - // [147] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [118] call mulu16_sel + // [148] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 jmp __b7 // sin16s::@7 __b7: - // [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 - // [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [122] call mulu16_sel - // [147] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [123] call mulu16_sel + // [148] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -6884,26 +6859,26 @@ sin16s: { jmp __b8 // sin16s::@8 __b8: - // [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 - // [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [126] call mulu16_sel - // [147] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [127] call mulu16_sel + // [148] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [147] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [148] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 jmp __b9 // sin16s::@9 __b9: - // [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 - // [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -6911,21 +6886,21 @@ sin16s: { lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 - // [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [132] call mulu16_sel - // [147] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [133] call mulu16_sel + // [148] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 @@ -6933,27 +6908,27 @@ sin16s: { jmp __b10 // sin16s::@10 __b10: - // [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 - // [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [137] call mulu16_sel - // [147] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [138] call mulu16_sel + // [148] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel - // [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 jmp __b11 // sin16s::@11 __b11: - // [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 - // [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -6962,7 +6937,7 @@ sin16s: { ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 - // [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -6970,13 +6945,13 @@ sin16s: { lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 - // [142] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [143] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b12 jmp __b6 // sin16s::@6 __b6: - // [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -6984,21 +6959,21 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [144] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [145] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: - // [144] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [145] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: - // [145] return + // [146] return rts // sin16s::@12 __b12: - // [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 jmp __b3_from___b12 } // mulu16_sel @@ -7012,31 +6987,24 @@ mulu16_sel: { .label v2 = $12 .label return = $20 .label return_1 = $e - // [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [150] call mul16u + // [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [151] call mul16u // [97] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] mul16u_from_mulu16_sel: // [97] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [97] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [97] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u - // [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 jmp __b1 // mulu16_sel::@1 __b1: - // [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 - // [153] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx + // [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [154] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx cpx #0 beq !e+ !: @@ -7047,7 +7015,7 @@ mulu16_sel: { dex bne !- !e: - // [154] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 @@ -7055,7 +7023,7 @@ mulu16_sel: { jmp __breturn // mulu16_sel::@return __breturn: - // [155] return + // [156] return rts } // div32u16u @@ -7065,46 +7033,46 @@ div32u16u: { .label quotient_hi = $20 .label quotient_lo = $e .label return = $14 - // [157] call divr16u - // [166] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [158] call divr16u + // [167] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: - // [166] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [167] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [166] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [167] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u - // [158] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [159] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp __b1 // div32u16u::@1 __b1: - // [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 - // [160] (word) divr16u::rem#4 ← (word) rem16u#1 - // [161] call divr16u - // [166] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [161] (word) divr16u::rem#4 ← (word) rem16u#1 + // [162] call divr16u + // [167] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: - // [166] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [167] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [166] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [167] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u - // [162] (word) divr16u::return#3 ← (word) divr16u::return#0 + // [163] (word) divr16u::return#3 ← (word) divr16u::return#0 jmp __b2 // div32u16u::@2 __b2: - // [163] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 - // [164] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 + // [164] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 + // [165] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 @@ -7116,7 +7084,7 @@ div32u16u: { jmp __breturn // div32u16u::@return __breturn: - // [165] return + // [166] return rts } // divr16u @@ -7130,58 +7098,58 @@ divr16u: { .label dividend = $c .label quotient = $e .label return = $e - // [167] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [168] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [167] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [168] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [167] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [167] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [167] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 - // [167] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [168] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [167] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [167] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [167] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [167] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [168] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [168] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [168] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 - // [170] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 - // [171] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [173] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [174] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [173] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [174] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [174] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [175] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>SIN_SIZE bcc __b3_from___b2 @@ -7193,12 +7161,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [177] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 + // [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #SIN_SIZE sta.z rem+1 - // [179] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [180] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [179] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [179] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [180] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [180] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [180] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [181] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: - // [182] (word) rem16u#1 ← (word) divr16u::rem#11 + // [183] (word) rem16u#1 ← (word) divr16u::rem#11 jmp __breturn // divr16u::@return __breturn: - // [183] return + // [184] return rts } // bitmap_clear @@ -7235,38 +7203,38 @@ divr16u: { // fgcol - the foreground color to fill the screen with bitmap_clear: { .const col = WHITE*$10 - // [185] call memset - // [189] phi from bitmap_clear to memset [phi:bitmap_clear->memset] + // [186] call memset + // [190] phi from bitmap_clear to memset [phi:bitmap_clear->memset] memset_from_bitmap_clear: - // [189] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 + // [190] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 ldx #col - // [189] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [190] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [189] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [190] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [186] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [187] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] __b1_from_bitmap_clear: jmp __b1 // bitmap_clear::@1 __b1: - // [187] call memset - // [189] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [188] call memset + // [190] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] memset_from___b1: - // [189] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 + // [190] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 ldx #0 - // [189] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [190] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [189] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [190] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -7275,7 +7243,7 @@ bitmap_clear: { jmp __breturn // bitmap_clear::@return __breturn: - // [188] return + // [189] return rts } // memset @@ -7286,7 +7254,7 @@ memset: { .label dst = $12 .label num = $10 .label str = $12 - // [190] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [191] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -7295,7 +7263,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda.z end clc adc.z str @@ -7303,15 +7271,15 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [193] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [194] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: - // [193] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [194] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy jmp __b2 // memset::@2 __b2: - // [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -7321,15 +7289,15 @@ memset: { jmp __breturn // memset::@return __breturn: - // [195] return + // [196] return rts // memset::@3 __b3: - // [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y - // [197] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [198] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -7341,86 +7309,86 @@ memset: { bitmap_init: { .label __7 = $22 .label yoffs = $10 - // [199] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + // [200] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] __b1_from_bitmap_init: - // [199] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + // [200] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [199] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + // [200] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 jmp __b1 - // [199] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [200] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] __b1_from___b2: - // [199] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [199] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [200] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [200] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp __b1 // bitmap_init::@1 __b1: - // [200] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa + // [201] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x - // [201] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // [202] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 lsr - // [202] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 + // [203] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b6_from___b1 - // [204] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [205] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] __b2_from___b1: - // [204] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + // [205] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 jmp __b2 - // [203] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [204] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] __b6_from___b1: jmp __b6 // bitmap_init::@6 __b6: - // [204] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [205] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] __b2_from___b6: - // [204] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [205] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy jmp __b2 // bitmap_init::@2 __b2: - // [205] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx + // [206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx inx - // [206] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 + // [207] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1_from___b2 - // [207] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [208] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] __b3_from___b2: - // [207] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [208] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [207] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + // [208] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [207] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [208] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] __b3_from___b4: - // [207] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [207] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [208] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [208] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp __b3 // bitmap_init::@3 __b3: - // [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [209] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __7 - // [209] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1 + // [210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 -- vbuaa=_lo_pbuz1 lda.z yoffs - // [210] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa + // [211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4 -- vbuaa=vbuz1_bor_vbuaa ora.z __7 - // [211] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa + // [212] *((const byte*) bitmap_plot_ylo + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_ylo,x - // [212] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 + // [213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 lda.z yoffs+1 - // [213] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [214] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x - // [214] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [215] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4_from___b3 jmp __b5 // bitmap_init::@5 __b5: - // [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -7428,22 +7396,22 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [216] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [217] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] __b4_from___b3: __b4_from___b5: - // [216] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [217] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy jmp __b4 // bitmap_init::@4 __b4: - // [217] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx + // [218] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx inx - // [218] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 + // [219] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3_from___b4 jmp __breturn // bitmap_init::@return __breturn: - // [219] return + // [220] return rts } // File Data @@ -7541,10 +7509,9 @@ Removing instruction lda #<0 Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 @@ -7707,6 +7674,8 @@ Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Removing instruction __b12: Succesful ASM optimization Pass5UnusedLabelElimination @@ -7724,21 +7693,21 @@ FINAL SYMBOL TABLE (const byte*) D011 = (byte*) 53265 (const byte*) D016 = (byte*) 53270 (const byte*) D018 = (byte*) 53272 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) SCREEN = (byte*) 1024 -(const word) SIN_SIZE = (number) $200 +(const word) SIN_SIZE = (word) $200 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -7910,9 +7879,10 @@ FINAL SYMBOL TABLE (word) mul16u::a#1 a zp[2]:24 4.0 (word) mul16u::a#2 a zp[2]:24 2.0 (word) mul16u::a#3 a zp[2]:24 67.66666666666666 -(word) mul16u::a#6 a zp[2]:24 6.0 +(word) mul16u::a#6 a zp[2]:24 3.0 (word) mul16u::b (word) mul16u::b#1 b zp[2]:18 4.0 +(word) mul16u::b#2 b zp[2]:18 2.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp[4]:26 4.0 (dword) mul16u::mb#1 mb zp[4]:26 202.0 @@ -8099,7 +8069,7 @@ reg byte a [ wrap_y::return#0 ] reg byte x [ render_sine::ypos#0 ] reg byte a [ wrap_y::return#1 ] reg byte x [ render_sine::ypos2#0 ] -zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] +zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] reg byte a [ bitmap_plot::$2 ] reg byte a [ wrap_y::return#2 ] zp[4]:20 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] @@ -8117,7 +8087,7 @@ reg byte a [ bitmap_init::$6 ] FINAL ASSEMBLER -Score: 24786 +Score: 25036 // File Comments // Generate a big sinus and plot it on a bitmap @@ -8212,13 +8182,13 @@ main: { sta D018 // bitmap_init(BITMAP, SCREEN) // [14] call bitmap_init - // [198] phi from main::@3 to bitmap_init [phi:main::@3->bitmap_init] + // [199] phi from main::@3 to bitmap_init [phi:main::@3->bitmap_init] jsr bitmap_init // [15] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // bitmap_clear(BLACK, WHITE) // [16] call bitmap_clear - // [184] phi from main::@4 to bitmap_clear [phi:main::@4->bitmap_clear] + // [185] phi from main::@4 to bitmap_clear [phi:main::@4->bitmap_clear] jsr bitmap_clear // [17] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -8250,11 +8220,11 @@ render_sine: { .label xpos = 6 .label sin_idx = $10 // [23] phi from render_sine to render_sine::@1 [phi:render_sine->render_sine::@1] - // [23] phi (word) render_sine::xpos#3 = (byte) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::xpos#3 = (word) 0 [phi:render_sine->render_sine::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z xpos sta.z xpos+1 - // [23] phi (word) render_sine::sin_idx#2 = (byte) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vbuc1 + // [23] phi (word) render_sine::sin_idx#2 = (word) 0 [phi:render_sine->render_sine::@1#1] -- vwuz1=vwuc1 sta.z sin_idx sta.z sin_idx+1 // render_sine::@1 @@ -8535,7 +8505,7 @@ sin16s_gen2: { .label i = $10 // div32u16u(PI2_u4f28, wavelength) // [68] call div32u16u - // [156] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] + // [157] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u] jsr div32u16u // div32u16u(PI2_u4f28, wavelength) // [69] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 @@ -8548,13 +8518,16 @@ sin16s_gen2: { sta.z sintab lda #>sin sta.z sintab+1 - // [71] phi (dword) sin16s_gen2::x#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vbuc1 - lda #0 + // [71] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [71] phi (word) sin16s_gen2::i#2 = (byte) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vbuc1 + // [71] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -8666,15 +8639,11 @@ mul16s: { // [87] call mul16u // [97] phi from mul16s to mul16u [phi:mul16s->mul16u] // [97] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [97] phi (dword) mul16u::mb#0 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vduz1=vduc1 + // [97] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 lda #sin16s_gen2.ampl - sta.z mul16u.mb+1 - lda #>$10 - sta.z mul16u.mb+2 - lda #>sin16s_gen2.ampl>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // mul16u((word)a, (word) b) // [88] (dword) mul16u::return#2 ← (dword) mul16u::res#2 @@ -8727,40 +8696,50 @@ mul16u: { .label res = 8 .label return = 8 .label b = $12 - // [98] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [98] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [98] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + // mb = b + // [98] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 + // [99] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [99] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [99] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [98] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [99] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 __b1: // while(a!=0) - // [99] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [100] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 // mul16u::@return // } - // [100] return + // [101] return rts // mul16u::@2 __b2: // a&1 - // [101] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [102] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // if( (a&1) != 0) - // [102] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [103] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul16u::@4 // res = res + mb - // [103] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [104] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -8774,24 +8753,24 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [104] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - // [104] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [105] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [105] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy // mul16u::@3 __b3: // a = a>>1 - // [105] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [106] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // mb = mb<<1 - // [106] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [107] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [98] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - // [98] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [98] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [98] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [99] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [99] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [99] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [99] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // sin16s @@ -8813,7 +8792,7 @@ sin16s: { .label x5_128 = $20 .label sinx = $c // if(x >= PI_u4f28 ) - // [107] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 + // [108] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc b1 @@ -8832,7 +8811,7 @@ sin16s: { !: // sin16s::@4 // x = x - PI_u4f28 - // [108] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 + // [109] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 lda.z x sec sbc #PI_u4f28>>$10 sta.z x+3 - // [109] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] - // [109] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 + // [110] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] + // [110] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 - // [109] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy + // [110] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 - // [109] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] + // [110] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] b1: - // [109] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 + // [110] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 - // [109] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy + // [110] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy // sin16s::@1 __b1: // if(x >= PI_HALF_u4f28 ) - // [110] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 + // [111] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2 @@ -8878,7 +8857,7 @@ sin16s: { !: // sin16s::@5 // x = PI_u4f28 - x - // [111] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 + // [112] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 lda #PI_u4f28>>$10 sbc.z x+3 sta.z x+3 - // [112] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] - // [112] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy + // [113] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] + // [113] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy // sin16s::@2 __b2: // x<<3 - // [113] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 + // [114] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 @@ -8919,81 +8898,81 @@ sin16s: { rol.z __4+2 rol.z __4+3 // x1 = >x<<3 - // [114] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 + // [115] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // mulu16_sel(x1, x1, 0) - // [115] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [116] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 - // [116] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [117] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [117] call mulu16_sel - // [147] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 + // [118] call mulu16_sel + // [148] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x1, x1, 0) - // [118] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 + // [119] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 // sin16s::@7 // x2 = mulu16_sel(x1, x1, 0) - // [119] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 + // [120] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 // mulu16_sel(x2, x1, 1) - // [120] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 - // [121] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [121] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 + // [122] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [122] call mulu16_sel - // [147] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] - // [147] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 + // [123] call mulu16_sel + // [148] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] + // [148] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x2, x1, 1) - // [123] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [124] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@8 // x3 = mulu16_sel(x2, x1, 1) - // [124] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 + // [125] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 // mulu16_sel(x3, $10000/6, 1) - // [125] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 - // [126] call mulu16_sel - // [147] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] - // [147] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 + // [126] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 + // [127] call mulu16_sel + // [148] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] + // [148] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 - // [147] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 + // [148] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, $10000/6, 1) - // [127] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 + // [128] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 // sin16s::@9 // x3_6 = mulu16_sel(x3, $10000/6, 1) - // [128] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 + // [129] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 // usinx = x1 - x3_6 - // [129] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 + // [130] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 @@ -9002,49 +8981,49 @@ sin16s: { sbc.z x3_6+1 sta.z usinx+1 // mulu16_sel(x3, x1, 0) - // [130] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 - // [131] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [131] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 + // [132] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [132] call mulu16_sel - // [147] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 + // [133] call mulu16_sel + // [148] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, x1, 0) - // [133] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 + // [134] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z mulu16_sel.return_1 lda.z mulu16_sel.return+1 sta.z mulu16_sel.return_1+1 // sin16s::@10 // x4 = mulu16_sel(x3, x1, 0) - // [134] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 + // [135] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 // mulu16_sel(x4, x1, 0) - // [135] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 - // [136] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 + // [136] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 + // [137] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 - // [137] call mulu16_sel - // [147] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] - // [147] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 + // [138] call mulu16_sel + // [148] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] + // [148] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy - // [147] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy + // [148] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy + // [148] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x4, x1, 0) - // [138] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 + // [139] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 // sin16s::@11 // x5 = mulu16_sel(x4, x1, 0) - // [139] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 + // [140] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 // x5_128 = x5>>4 - // [140] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 + // [141] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 @@ -9054,7 +9033,7 @@ sin16s: { lsr.z x5_128+1 ror.z x5_128 // usinx = usinx + x5_128 - // [141] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 + // [142] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 @@ -9063,12 +9042,12 @@ sin16s: { adc.z x5_128+1 sta.z usinx+1 // if(isUpper!=0) - // [142] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 + // [143] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b3 // sin16s::@6 // sinx = -(signed word)usinx - // [143] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 + // [144] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx @@ -9076,16 +9055,16 @@ sin16s: { lda #0 sbc.z sinx+1 sta.z sinx+1 - // [144] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] - // [144] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy + // [145] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] + // [145] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy // sin16s::@3 __b3: // sin16s::@return // } - // [145] return + // [146] return rts // sin16s::@12 - // [146] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 + // [147] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 } // mulu16_sel // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. @@ -9099,30 +9078,23 @@ mulu16_sel: { .label return = $20 .label return_1 = $e // mul16u(v1, v2) - // [148] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 + // [149] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 - // [149] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 - // [150] call mul16u + // [150] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 + // [151] call mul16u // [97] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] // [97] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy - // [97] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [97] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy jsr mul16u // mul16u(v1, v2) - // [151] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [152] (dword) mul16u::return#3 ← (dword) mul16u::res#2 // mulu16_sel::@1 - // [152] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 + // [153] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 // mul16u(v1, v2)< (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 + // [155] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return lda.z __1+3 sta.z return+1 // mulu16_sel::@return // } - // [155] return + // [156] return rts } // div32u16u @@ -9152,45 +9124,45 @@ div32u16u: { .label quotient_lo = $e .label return = $14 // divr16u(>dividend, divisor, 0) - // [157] call divr16u - // [166] phi from div32u16u to divr16u [phi:div32u16u->divr16u] - // [166] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 + // [158] call divr16u + // [167] phi from div32u16u to divr16u [phi:div32u16u->divr16u] + // [167] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 - // [166] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 + // [167] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 jsr divr16u // divr16u(>dividend, divisor, 0) - // [158] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [159] (word) divr16u::return#2 ← (word) divr16u::return#0 // div32u16u::@1 // quotient_hi = divr16u(>dividend, divisor, 0) - // [159] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [160] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 // divr16u(divr16u] - // [166] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 + // [161] (word) divr16u::rem#4 ← (word) rem16u#1 + // [162] call divr16u + // [167] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] + // [167] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 - // [166] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy + // [167] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // divr16u(divr16u::@1] - // [167] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [168] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [168] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [167] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 - // [167] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy - // [167] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy - // [167] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [167] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [167] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [167] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [167] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy + // [168] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [168] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [168] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [168] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [168] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 __b1: // rem = rem << 1 - // [168] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [169] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // >dividend - // [169] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 + // [170] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // >dividend & $80 - // [170] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [171] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) - // [171] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [172] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2 // divr16u::@4 // rem = rem | 1 - // [172] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [173] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [173] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [173] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [174] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [174] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 __b2: // dividend = dividend << 1 - // [174] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [175] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // quotient = quotient << 1 - // [175] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [176] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // if(rem>=divisor) - // [176] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [177] if((word) divr16u::rem#6<(const word) SIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>SIN_SIZE bcc __b3 @@ -9275,13 +9247,13 @@ divr16u: { !: // divr16u::@5 // quotient++; - // [177] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [178] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: // rem = rem - divisor - // [178] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 + // [179] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #SIN_SIZE sta.z rem+1 - // [179] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - // [179] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [179] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [180] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [180] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [180] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 __b3: // for( byte i : 0..15) - // [180] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [181] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [181] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [182] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1 // divr16u::@6 // rem16u = rem - // [182] (word) rem16u#1 ← (word) divr16u::rem#11 + // [183] (word) rem16u#1 ← (word) divr16u::rem#11 // divr16u::@return // } - // [183] return + // [184] return rts } // bitmap_clear @@ -9315,34 +9287,34 @@ divr16u: { bitmap_clear: { .const col = WHITE*$10 // memset(bitmap_screen, col, 1000uw) - // [185] call memset - // [189] phi from bitmap_clear to memset [phi:bitmap_clear->memset] - // [189] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 + // [186] call memset + // [190] phi from bitmap_clear to memset [phi:bitmap_clear->memset] + // [190] phi (byte) memset::c#4 = (const byte) bitmap_clear::col#0 [phi:bitmap_clear->memset#0] -- vbuxx=vbuc1 ldx #col - // [189] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 + // [190] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:bitmap_clear->memset#1] -- pvoz1=pvoc1 lda #SCREEN sta.z memset.str+1 - // [189] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 + // [190] phi (word) memset::num#2 = (word) $3e8 [phi:bitmap_clear->memset#2] -- vwuz1=vwuc1 lda #<$3e8 sta.z memset.num lda #>$3e8 sta.z memset.num+1 jsr memset - // [186] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + // [187] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] // bitmap_clear::@1 // memset(bitmap_gfx, 0, 8000uw) - // [187] call memset - // [189] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] - // [189] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 + // [188] call memset + // [190] phi from bitmap_clear::@1 to memset [phi:bitmap_clear::@1->memset] + // [190] phi (byte) memset::c#4 = (byte) 0 [phi:bitmap_clear::@1->memset#0] -- vbuxx=vbuc1 ldx #0 - // [189] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 + // [190] phi (void*) memset::str#3 = (void*)(const byte*) BITMAP [phi:bitmap_clear::@1->memset#1] -- pvoz1=pvoc1 lda #BITMAP sta.z memset.str+1 - // [189] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 + // [190] phi (word) memset::num#2 = (word) $1f40 [phi:bitmap_clear::@1->memset#2] -- vwuz1=vwuc1 lda #<$1f40 sta.z memset.num lda #>$1f40 @@ -9350,7 +9322,7 @@ bitmap_clear: { jsr memset // bitmap_clear::@return // } - // [188] return + // [189] return rts } // memset @@ -9362,7 +9334,7 @@ memset: { .label num = $10 .label str = $12 // if(num>0) - // [190] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 + // [191] if((word) memset::num#2<=(byte) 0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ lda.z num+1 @@ -9370,7 +9342,7 @@ memset: { !: // memset::@1 // end = (char*)str + num - // [191] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 + // [192] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2 -- pbuz1=pbuz2_plus_vwuz1 lda.z end clc adc.z str @@ -9378,13 +9350,13 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [192] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 - // [193] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] - // [193] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // [193] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 + // [194] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [194] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 __b2: // for(char* dst = str; dst!=end; dst++) - // [194] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + // [195] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 lda.z dst+1 cmp.z end+1 bne __b3 @@ -9394,17 +9366,17 @@ memset: { // memset::@return __breturn: // } - // [195] return + // [196] return rts // memset::@3 __b3: // *dst = c - // [196] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx + // [197] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx txa ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [197] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [198] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 @@ -9416,81 +9388,81 @@ memset: { bitmap_init: { .label __7 = $22 .label yoffs = $10 - // [199] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] - // [199] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + // [200] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + // [200] phi (byte) bitmap_init::x#2 = (byte) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [199] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + // [200] phi (byte) bitmap_init::bits#3 = (byte) $80 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 - // [199] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] - // [199] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - // [199] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + // [200] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + // [200] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + // [200] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy // bitmap_init::@1 __b1: // bitmap_plot_bit[x] = bits - // [200] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa + // [201] *((const byte*) bitmap_plot_bit + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x // bits >>= 1 - // [201] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 + // [202] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1 -- vbuaa=vbuaa_ror_1 lsr // if(bits==0) - // [202] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 + // [203] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6 -- vbuaa_neq_0_then_la1 cmp #0 bne __b2 - // [204] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] - // [204] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + // [205] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + // [205] phi (byte) bitmap_init::bits#4 = (byte) $80 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 - // [203] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] + // [204] phi from bitmap_init::@1 to bitmap_init::@6 [phi:bitmap_init::@1->bitmap_init::@6] // bitmap_init::@6 - // [204] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] - // [204] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy + // [205] phi from bitmap_init::@6 to bitmap_init::@2 [phi:bitmap_init::@6->bitmap_init::@2] + // [205] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@6->bitmap_init::@2#0] -- register_copy // bitmap_init::@2 __b2: // for(byte x : 0..255) - // [205] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx + // [206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 -- vbuxx=_inc_vbuxx inx - // [206] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 + // [207] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1 -- vbuxx_neq_0_then_la1 cpx #0 bne __b1 - // [207] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] - // [207] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + // [208] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + // [208] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta.z yoffs+1 - // [207] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + // [208] phi (byte) bitmap_init::y#2 = (byte) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 - // [207] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] - // [207] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - // [207] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + // [208] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + // [208] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + // [208] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy // bitmap_init::@3 __b3: // y&$7 - // [208] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 + // [209] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7 -- vbuz1=vbuxx_band_vbuc1 lda #7 sax.z __7 // yoffs - // [212] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 + // [213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 -- vbuaa=_hi_pbuz1 lda.z yoffs+1 // bitmap_plot_yhi[y] = >yoffs - // [213] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa + // [214] *((const byte*) bitmap_plot_yhi + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x // if((y&$7)==7) - // [214] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 + // [215] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z __7 bne __b4 // bitmap_init::@5 // yoffs = yoffs + 40*8 - // [215] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 + // [216] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8 -- pbuz1=pbuz1_plus_vwuc1 clc lda.z yoffs adc #<$28*8 @@ -9498,19 +9470,19 @@ bitmap_init: { lda.z yoffs+1 adc #>$28*8 sta.z yoffs+1 - // [216] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] - // [216] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy + // [217] phi from bitmap_init::@3 bitmap_init::@5 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4] + // [217] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@5->bitmap_init::@4#0] -- register_copy // bitmap_init::@4 __b4: // for(byte y : 0..255) - // [217] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx + // [218] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 -- vbuxx=_inc_vbuxx inx - // [218] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 + // [219] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3 -- vbuxx_neq_0_then_la1 cpx #0 bne __b3 // bitmap_init::@return // } - // [219] return + // [220] return rts } // File Data diff --git a/src/test/ref/examples/sinplotter/sine-plotter.sym b/src/test/ref/examples/sinplotter/sine-plotter.sym index bdf44d7ef..e788e6d1e 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.sym +++ b/src/test/ref/examples/sinplotter/sine-plotter.sym @@ -8,21 +8,21 @@ (const byte*) D011 = (byte*) 53265 (const byte*) D016 = (byte*) 53270 (const byte*) D018 = (byte*) 53272 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) SCREEN = (byte*) 1024 -(const word) SIN_SIZE = (number) $200 +(const word) SIN_SIZE = (word) $200 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_CSEL = (number) 8 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_CSEL = (byte) 8 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (label) bitmap_clear::@1 (label) bitmap_clear::@return @@ -194,9 +194,10 @@ (word) mul16u::a#1 a zp[2]:24 4.0 (word) mul16u::a#2 a zp[2]:24 2.0 (word) mul16u::a#3 a zp[2]:24 67.66666666666666 -(word) mul16u::a#6 a zp[2]:24 6.0 +(word) mul16u::a#6 a zp[2]:24 3.0 (word) mul16u::b (word) mul16u::b#1 b zp[2]:18 4.0 +(word) mul16u::b#2 b zp[2]:18 2.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp[4]:26 4.0 (dword) mul16u::mb#1 mb zp[4]:26 202.0 @@ -383,7 +384,7 @@ reg byte a [ wrap_y::return#0 ] reg byte x [ render_sine::ypos#0 ] reg byte a [ wrap_y::return#1 ] reg byte x [ render_sine::ypos2#0 ] -zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] +zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ] reg byte a [ bitmap_plot::$2 ] reg byte a [ wrap_y::return#2 ] zp[4]:20 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ] diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index 38cda6c70..4042ae5d9 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -143,7 +143,7 @@ setFAC::@return: scope:[setFAC] from setFAC::@1 (word()) getFAC() getFAC: scope:[getFAC] from gen_sintab::@25 asm { jsr$b1aa stymemLo stamemHi } - (word) getFAC::w#0 ← ((word)) { *((const byte*) memHi), *((const byte*) memLo) } + (word) getFAC::w#0 ← (word){ *((const byte*) memHi), *((const byte*) memLo) } (word) getFAC::return#0 ← (word) getFAC::w#0 to:getFAC::@return getFAC::@return: scope:[getFAC] from getFAC @@ -414,7 +414,7 @@ clear_screen::@return: scope:[clear_screen] from clear_screen::@1 to:@return @71: scope:[] from @begin (byte*) progress_cursor#7 ← (const byte*) SCREEN - (byte) progress_idx#7 ← (number) 0 + (byte) progress_idx#7 ← (byte) 0 to:@73 (void()) progress_init((byte*) progress_init::line) @@ -461,8 +461,8 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1 @73: scope:[] from @71 (byte) progress_idx#41 ← phi( @71/(byte) progress_idx#7 ) (byte*) progress_cursor#41 ← phi( @71/(byte*) progress_cursor#7 ) - (byte) sin_idx_x#2 ← (number) 0 - (byte) sin_idx_y#2 ← (number) 0 + (byte) sin_idx_x#2 ← (byte) 0 + (byte) sin_idx_y#2 ← (byte) 0 to:@78 (void()) anim() @@ -472,8 +472,8 @@ anim: scope:[anim] from main::@3 *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) (byte) anim::xidx#0 ← (byte) sin_idx_x#9 (byte) anim::yidx#0 ← (byte) sin_idx_y#9 - (byte) anim::j2#0 ← (number) $c - (byte) anim::x_msb#0 ← (number) 0 + (byte) anim::j2#0 ← (byte) $c + (byte) anim::x_msb#0 ← (byte) 0 (byte) anim::j#0 ← (byte) 0 to:anim::@4 anim::@4: scope:[anim] from anim anim::@6 @@ -594,9 +594,9 @@ place_sprites: scope:[place_sprites] from init::@2 *((const byte*) SPRITES_EXPAND_X) ← (number) $7f *((const byte*) SPRITES_EXPAND_Y) ← (number) $7f (byte) place_sprites::spr_id#0 ← (byte)(word)(const byte*) sprites/(number) $40 - (byte) place_sprites::spr_x#0 ← (number) $3c - (byte) place_sprites::j2#0 ← (number) 0 - (byte) place_sprites::col#0 ← (number) 5 + (byte) place_sprites::spr_x#0 ← (byte) $3c + (byte) place_sprites::j2#0 ← (byte) 0 + (byte) place_sprites::col#0 ← (byte) 5 (byte) place_sprites::j#0 ← (byte) 0 to:place_sprites::@1 place_sprites::@1: scope:[place_sprites] from place_sprites place_sprites::@1 @@ -666,8 +666,8 @@ gen_chargen_sprite::@1: scope:[gen_chargen_sprite] from gen_chargen_sprite gen_ (byte) gen_chargen_sprite::y#2 ← phi( gen_chargen_sprite/(byte) gen_chargen_sprite::y#0 gen_chargen_sprite::@8/(byte) gen_chargen_sprite::y#1 ) (byte*) gen_chargen_sprite::chargen#1 ← phi( gen_chargen_sprite/(byte*) gen_chargen_sprite::chargen#0 gen_chargen_sprite::@8/(byte*) gen_chargen_sprite::chargen#2 ) (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#1 + (byte) gen_chargen_sprite::y#2) - (byte) gen_chargen_sprite::s_gen#0 ← (number) 0 - (byte) gen_chargen_sprite::s_gen_cnt#0 ← (number) 0 + (byte) gen_chargen_sprite::s_gen#0 ← (byte) 0 + (byte) gen_chargen_sprite::s_gen_cnt#0 ← (byte) 0 (byte) gen_chargen_sprite::x#0 ← (byte) 0 to:gen_chargen_sprite::@2 gen_chargen_sprite::@2: scope:[gen_chargen_sprite] from gen_chargen_sprite::@1 gen_chargen_sprite::@7 @@ -678,7 +678,7 @@ gen_chargen_sprite::@2: scope:[gen_chargen_sprite] from gen_chargen_sprite::@1 (byte) gen_chargen_sprite::s_gen_cnt#7 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::s_gen_cnt#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen_cnt#8 ) (byte) gen_chargen_sprite::s_gen#8 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::s_gen#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen#9 ) (byte) gen_chargen_sprite::bits#2 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::bits#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::bits#1 ) - (byte) gen_chargen_sprite::c#0 ← (number) 0 + (byte) gen_chargen_sprite::c#0 ← (byte) 0 (number~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (number) $80 (bool~) gen_chargen_sprite::$4 ← (number~) gen_chargen_sprite::$3 != (number) 0 (bool~) gen_chargen_sprite::$5 ← ! (bool~) gen_chargen_sprite::$4 @@ -883,7 +883,7 @@ gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 (byte*) progress_cursor#39 ← phi( gen_sintab::@16/(byte*) progress_cursor#44 ) (byte) progress_idx#39 ← phi( gen_sintab::@16/(byte) progress_idx#44 ) (byte) gen_sintab::length#4 ← phi( gen_sintab::@16/(byte) gen_sintab::length#7 ) - (byte) gen_sintab::i#0 ← (number) 0 + (byte) gen_sintab::i#0 ← (byte) 0 to:gen_sintab::@1 gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@17 gen_sintab::@27 (byte*) gen_sintab::sintab#12 ← phi( gen_sintab::@17/(byte*) gen_sintab::sintab#13 gen_sintab::@27/(byte*) gen_sintab::sintab#14 ) @@ -1316,9 +1316,9 @@ SYMBOL TABLE SSA (label) gen_sintab::@9 (label) gen_sintab::@return (const byte*) gen_sintab::f_2pi = (byte*)(number) $e2e5 -(const byte*) gen_sintab::f_amp[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) gen_sintab::f_i[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } -(const byte*) gen_sintab::f_min[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } +(const byte*) gen_sintab::f_amp[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) gen_sintab::f_i[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } +(const byte*) gen_sintab::f_min[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (byte) gen_sintab::i (byte) gen_sintab::i#0 (byte) gen_sintab::i#1 @@ -1634,7 +1634,7 @@ SYMBOL TABLE SSA (label) progress_inc::@1 (label) progress_inc::@2 (label) progress_inc::@return -(const byte*) progress_inc::progress_chars[] = { (byte)(number) $20, (byte)(number) $65, (byte)(number) $74, (byte)(number) $75, (byte)(number) $61, (byte)(number) $f6, (byte)(number) $e7, (byte)(number) $ea, (byte)(number) $e0 } +(const byte*) progress_inc::progress_chars[] = { (byte) $20, (byte) $65, (byte) $74, (byte) $75, (byte) $61, (byte) $f6, (byte) $e7, (byte) $ea, (byte) $e0 } (void()) progress_init((byte*) progress_init::line) (label) progress_init::@return (byte*) progress_init::line @@ -1732,8 +1732,8 @@ SYMBOL TABLE SSA (byte) sin_idx_y#7 (byte) sin_idx_y#8 (byte) sin_idx_y#9 -(const byte) sinlen_x = (number) $dd -(const byte) sinlen_y = (number) $c5 +(const byte) sinlen_x = (byte) $dd +(const byte) sinlen_y = (byte) $c5 (const byte*) sintab_x[(number) $dd] = { fill( $dd, 0) } (const byte*) sintab_y[(number) $c5] = { fill( $c5, 0) } (const byte*) sprites = (byte*)(number) $2000 @@ -1754,15 +1754,10 @@ Adding number conversion cast (unumber) $28 in (byte*) progress_init::line#1 ← Adding number conversion cast (unumber) $32 in (byte) gen_sintab::min#1 ← (number) $32 Adding number conversion cast (unumber) $d0 in (byte) gen_sintab::max#1 ← (number) $d0 Adding number conversion cast (unumber) $3e8 in (bool~) clear_screen::$0 ← (byte*) clear_screen::sc#2 < (const byte*) SCREEN+(number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) progress_idx#7 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) progress_idx#8 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) progress_inc::$0 ← (byte) progress_idx#10 == (number) 8 Adding number conversion cast (unumber) 8 in *((byte*) progress_cursor#24) ← *((const byte*) progress_inc::progress_chars + (number) 8) Adding number conversion cast (unumber) 0 in (byte) progress_idx#11 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin_idx_x#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin_idx_y#2 ← (number) 0 -Adding number conversion cast (unumber) $c in (byte) anim::j2#0 ← (number) $c -Adding number conversion cast (unumber) 0 in (byte) anim::x_msb#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) anim::$7 ← (byte) anim::x_msb#2 * (number) 2 Adding number conversion cast (unumber) anim::$7 in (number~) anim::$7 ← (byte) anim::x_msb#2 * (unumber)(number) 2 Adding number conversion cast (unumber) anim::$9 in (number~) anim::$9 ← (unumber~) anim::$7 | (byte~) anim::$8 @@ -1778,9 +1773,6 @@ Adding number conversion cast (unumber) $7f in *((const byte*) SPRITES_ENABLE) Adding number conversion cast (unumber) $7f in *((const byte*) SPRITES_EXPAND_X) ← (number) $7f Adding number conversion cast (unumber) $7f in *((const byte*) SPRITES_EXPAND_Y) ← (number) $7f Adding number conversion cast (unumber) $40 in (byte) place_sprites::spr_id#0 ← (byte)(word)(const byte*) sprites/(number) $40 -Adding number conversion cast (unumber) $3c in (byte) place_sprites::spr_x#0 ← (number) $3c -Adding number conversion cast (unumber) 0 in (byte) place_sprites::j2#0 ← (number) 0 -Adding number conversion cast (unumber) 5 in (byte) place_sprites::col#0 ← (number) 5 Adding number conversion cast (unumber) $50 in *((const byte*) SPRITES_YPOS + (byte) place_sprites::j2#3) ← (number) $50 Adding number conversion cast (unumber) $20 in (number~) place_sprites::$0 ← (byte) place_sprites::spr_x#2 + (number) $20 Adding number conversion cast (unumber) place_sprites::$0 in (number~) place_sprites::$0 ← (byte) place_sprites::spr_x#2 + (unumber)(number) $20 @@ -1790,9 +1782,6 @@ Adding number conversion cast (unumber) $40 in (byte*~) gen_sprites::$1 ← (byt Adding number conversion cast (unumber) 8 in (number~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (number) 8 Adding number conversion cast (unumber) gen_chargen_sprite::$1 in (number~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (unumber)(number) 8 Adding number conversion cast (unumber) $32 in *((const byte*) PROCPORT) ← (number) $32 -Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::s_gen#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::s_gen_cnt#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (number) $80 Adding number conversion cast (unumber) gen_chargen_sprite::$3 in (number~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) gen_chargen_sprite::$4 ← (unumber~) gen_chargen_sprite::$3 != (number) 0 @@ -1811,7 +1800,6 @@ Adding number conversion cast (unumber) gen_chargen_sprite::$11 in (number~) gen Adding number conversion cast (unumber) 6 in (byte*~) gen_chargen_sprite::$13 ← (byte*) gen_chargen_sprite::sprite#4 + (number) 6 Adding number conversion cast (unumber) $37 in *((const byte*) PROCPORT) ← (number) $37 Adding number conversion cast (unumber) 2 in (word) setFAC::w#2 ← (number) 2 -Adding number conversion cast (unumber) 0 in (byte) gen_sintab::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word~) setMEMtoFAC::$0 ← (word)(byte*) setMEMtoFAC::mem#5 Inlining cast (word~) addMEMtoFAC::$0 ← (word)(byte*) addMEMtoFAC::mem#2 @@ -1823,27 +1811,16 @@ Inlining cast (byte) gen_sintab::min#0 ← (unumber)(number) 0 Inlining cast (byte) gen_sintab::max#0 ← (unumber)(number) $ff Inlining cast (byte) gen_sintab::min#1 ← (unumber)(number) $32 Inlining cast (byte) gen_sintab::max#1 ← (unumber)(number) $d0 -Inlining cast (byte) progress_idx#7 ← (unumber)(number) 0 Inlining cast (byte) progress_idx#8 ← (unumber)(number) 0 Inlining cast (byte) progress_idx#11 ← (unumber)(number) 0 -Inlining cast (byte) sin_idx_x#2 ← (unumber)(number) 0 -Inlining cast (byte) sin_idx_y#2 ← (unumber)(number) 0 -Inlining cast (byte) anim::j2#0 ← (unumber)(number) $c -Inlining cast (byte) anim::x_msb#0 ← (unumber)(number) 0 Inlining cast (byte) sin_idx_x#4 ← (unumber)(number) 0 Inlining cast (byte) sin_idx_y#4 ← (unumber)(number) 0 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $7f Inlining cast *((const byte*) SPRITES_EXPAND_X) ← (unumber)(number) $7f Inlining cast *((const byte*) SPRITES_EXPAND_Y) ← (unumber)(number) $7f -Inlining cast (byte) place_sprites::spr_x#0 ← (unumber)(number) $3c -Inlining cast (byte) place_sprites::j2#0 ← (unumber)(number) 0 -Inlining cast (byte) place_sprites::col#0 ← (unumber)(number) 5 Inlining cast *((const byte*) SPRITES_YPOS + (byte) place_sprites::j2#3) ← (unumber)(number) $50 Inlining cast (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#1 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $32 -Inlining cast (byte) gen_chargen_sprite::s_gen#0 ← (unumber)(number) 0 -Inlining cast (byte) gen_chargen_sprite::s_gen_cnt#0 ← (unumber)(number) 0 -Inlining cast (byte) gen_chargen_sprite::c#0 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::c#1 ← (unumber)(number) 1 Inlining cast (byte) gen_chargen_sprite::s_gen#2 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::s_gen_cnt#2 ← (unumber)(number) 0 @@ -1851,7 +1828,6 @@ Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $37 Inlining cast (word~) gen_sintab::$0 ← (word)(byte) gen_sintab::max#2 Inlining cast (word~) gen_sintab::$3 ← (word)(byte) gen_sintab::min#2 Inlining cast (word) setFAC::w#2 ← (unumber)(number) 2 -Inlining cast (byte) gen_sintab::i#0 ← (unumber)(number) 0 Inlining cast (word~) gen_sintab::$14 ← (word)(byte) gen_sintab::i#3 Inlining cast (word~) gen_sintab::$18 ← (word)(byte) gen_sintab::length#3 Inlining cast (byte~) gen_sintab::$25 ← (byte)(word~) gen_sintab::$24 @@ -1872,31 +1848,7 @@ Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $20 -Simplifying constant integer cast $65 -Simplifying constant integer cast $74 -Simplifying constant integer cast $75 -Simplifying constant integer cast $61 -Simplifying constant integer cast $f6 -Simplifying constant integer cast $e7 -Simplifying constant integer cast $ea -Simplifying constant integer cast $e0 Simplifying constant integer cast $3f8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 58085 Simplifying constant integer cast *((const byte*) memHi) Simplifying constant integer cast *((const byte*) memLo) @@ -1911,14 +1863,9 @@ Simplifying constant integer cast $32 Simplifying constant integer cast $d0 Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $c -Simplifying constant integer cast 0 Simplifying constant integer cast $1e Simplifying constant integer cast 2 Simplifying constant integer cast $a @@ -1930,17 +1877,11 @@ Simplifying constant integer cast $7f Simplifying constant integer cast $7f Simplifying constant integer cast $7f Simplifying constant integer cast $40 -Simplifying constant integer cast $3c -Simplifying constant integer cast 0 -Simplifying constant integer cast 5 Simplifying constant integer cast $50 Simplifying constant integer cast $20 Simplifying constant integer cast $40 Simplifying constant integer cast 8 Simplifying constant integer cast $32 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -1955,7 +1896,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 6 Simplifying constant integer cast $37 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) $ff @@ -1969,14 +1909,9 @@ Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) $d0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $c -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 8 @@ -1987,17 +1922,11 @@ Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) $3c -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $32 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -2012,7 +1941,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $37 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) init::$8 ← (byte) $28 + (byte) init::i#2 Inferred type updated to byte in (unumber~) anim::$7 ← (byte) anim::x_msb#2 * (byte) 2 @@ -7430,8 +7358,8 @@ FINAL SYMBOL TABLE (byte) sin_idx_y#11 sin_idx_y zp[1]:8 3.25 (byte) sin_idx_y#13 sin_idx_y zp[1]:8 7.2333333333333325 (byte) sin_idx_y#3 sin_idx_y zp[1]:8 2.0 -(const byte) sinlen_x = (number) $dd -(const byte) sinlen_y = (number) $c5 +(const byte) sinlen_x = (byte) $dd +(const byte) sinlen_y = (byte) $c5 (const byte*) sintab_x[(number) $dd] = { fill( $dd, 0) } (const byte*) sintab_y[(number) $c5] = { fill( $c5, 0) } (const byte*) sprites = (byte*) 8192 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.sym b/src/test/ref/examples/sinsprites/sinus-sprites.sym index e691fe958..b5aa98c04 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.sym +++ b/src/test/ref/examples/sinsprites/sinus-sprites.sym @@ -287,8 +287,8 @@ (byte) sin_idx_y#11 sin_idx_y zp[1]:8 3.25 (byte) sin_idx_y#13 sin_idx_y zp[1]:8 7.2333333333333325 (byte) sin_idx_y#3 sin_idx_y zp[1]:8 2.0 -(const byte) sinlen_x = (number) $dd -(const byte) sinlen_y = (number) $c5 +(const byte) sinlen_x = (byte) $dd +(const byte) sinlen_y = (byte) $c5 (const byte*) sintab_x[(number) $dd] = { fill( $dd, 0) } (const byte*) sintab_y[(number) $c5] = { fill( $c5, 0) } (const byte*) sprites = (byte*) 8192 diff --git a/src/test/ref/examples/zpcode/zpcode.log b/src/test/ref/examples/zpcode/zpcode.log index 10c52c5be..acc4128d1 100644 --- a/src/test/ref/examples/zpcode/zpcode.log +++ b/src/test/ref/examples/zpcode/zpcode.log @@ -29,7 +29,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @3 asm { sei } - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -140,22 +140,18 @@ SYMBOL TABLE SSA (byte) zpLoop::i#1 (byte) zpLoop::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $14 in (bool~) main::$0 ← (byte) main::i#2 < (number) $14 Adding number conversion cast (unumber) $ff in (bool~) main::$1 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in *((const byte*) BGCOL) ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 -Simplifying constant integer cast 0 Simplifying constant integer cast $14 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $14 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/fibmem.log b/src/test/ref/fibmem.log index b93da3e6c..ee4b05f82 100644 --- a/src/test/ref/fibmem.log +++ b/src/test/ref/fibmem.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 *((const byte*) fibs + (number) 0) ← (number) 0 *((const byte*) fibs + (number) 1) ← (number) 1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -52,7 +52,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) fibs + (number) 0) Adding number conversion cast (unumber) 0 in *((const byte*) fibs + (number) 0) ← ((unumber)) (number) 0 Adding number conversion cast (unumber) 1 in *((const byte*) fibs + (number) 1) ← (number) 1 Adding number conversion cast (unumber) 1 in *((const byte*) fibs + (number) 1) ← ((unumber)) (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) main::$0 ← (byte) main::i#2 + (number) 2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 + (unumber)(number) 2 Adding number conversion cast (unumber) 1 in (number~) main::$1 ← (byte) main::i#2 + (number) 1 @@ -61,13 +60,11 @@ Adding number conversion cast (unumber) $f in (bool~) main::$3 ← (byte) main:: Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const byte*) fibs + (unumber)(number) 0) ← (unumber)(number) 0 Inlining cast *((const byte*) fibs + (unumber)(number) 1) ← (unumber)(number) 1 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast $f @@ -76,7 +73,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $f diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index 2771f2bd9..a5c9e0940 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -72,8 +72,8 @@ prepare::@return: scope:[prepare] from prepare::@1 (void()) flip() flip: scope:[flip] from main::@7 - (byte) flip::srcIdx#0 ← (number) 0 - (byte) flip::dstIdx#0 ← (number) $f + (byte) flip::srcIdx#0 ← (byte) 0 + (byte) flip::dstIdx#0 ← (byte) $f (byte) flip::r#0 ← (byte) $10 to:flip::@1 flip::@1: scope:[flip] from flip flip::@3 @@ -123,14 +123,14 @@ plot: scope:[plot] from main::@10 (byte*~) plot::$0 ← (const byte*) SCREEN + (number) 5*(number) $28 (byte*~) plot::$1 ← (byte*~) plot::$0 + (number) $c (byte*) plot::line#0 ← (byte*~) plot::$1 - (byte) plot::i#0 ← (number) 0 + (byte) plot::i#0 ← (byte) 0 (byte) plot::y#0 ← (byte) $10 to:plot::@1 plot::@1: scope:[plot] from plot plot::@4 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@4/(byte) plot::y#1 ) (byte*) plot::line#5 ← phi( plot/(byte*) plot::line#0 plot::@4/(byte*) plot::line#1 ) (byte) plot::i#4 ← phi( plot/(byte) plot::i#0 plot::@4/(byte) plot::i#5 ) - (byte) plot::x#0 ← (number) 0 + (byte) plot::x#0 ← (byte) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@3 (byte) plot::y#3 ← phi( plot::@1/(byte) plot::y#4 plot::@3/(byte) plot::y#5 ) @@ -283,43 +283,26 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $fe in (bool~) main::$1 ← *((const byte*) RASTER) != (number) $fe Adding number conversion cast (unumber) $ff in (bool~) main::$2 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) flip::srcIdx#0 ← (number) 0 -Adding number conversion cast (unumber) $f in (byte) flip::dstIdx#0 ← (number) $f Adding number conversion cast (unumber) $10 in (number~) flip::$0 ← (byte) flip::dstIdx#3 + (number) $10 Adding number conversion cast (unumber) flip::$0 in (number~) flip::$0 ← (byte) flip::dstIdx#3 + (unumber)(number) $10 Adding number conversion cast (unumber) 5*$28 in (byte*~) plot::$0 ← (const byte*) SCREEN + (number) 5*(number) $28 Adding number conversion cast (unumber) $c in (byte*~) plot::$1 ← (byte*~) plot::$0 + (number) $c -Adding number conversion cast (unumber) 0 in (byte) plot::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) plot::x#0 ← (number) 0 Adding number conversion cast (unumber) $10 in (bool~) plot::$2 ← (byte) plot::x#2 < (number) $10 Adding number conversion cast (unumber) $28 in (byte*~) plot::$3 ← (byte*) plot::line#3 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) flip::srcIdx#0 ← (unumber)(number) 0 -Inlining cast (byte) flip::dstIdx#0 ← (unumber)(number) $f -Inlining cast (byte) plot::i#0 ← (unumber)(number) 0 -Inlining cast (byte) plot::x#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $fe Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $c -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $c -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index 1a331e37e..268f28f0f 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -43,7 +43,7 @@ init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex:: (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) (byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - (byte) init_font_hex::idx#0 ← (number) 0 + (byte) init_font_hex::idx#0 ← (byte) 0 *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 (byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0 (byte) init_font_hex::i#0 ← (byte) 0 @@ -152,7 +152,7 @@ SYMBOL TABLE SSA (label) @end (const byte*) CHARSET = (byte*)(number) $2000 (const byte*) D018 = (byte*)(number) $d018 -(const byte*) FONT_HEX_PROTO[] = { (byte)(number) 2, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 2, (byte)(number) 2, (byte)(number) 2, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 7, (byte)(number) 6, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 1, (byte)(number) 6, (byte)(number) 3, (byte)(number) 4, (byte)(number) 6, (byte)(number) 5, (byte)(number) 2, (byte)(number) 7, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 5, (byte)(number) 2, (byte)(number) 2, (byte)(number) 5, (byte)(number) 3, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 5, (byte)(number) 7, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 5, (byte)(number) 6, (byte)(number) 2, (byte)(number) 5, (byte)(number) 4, (byte)(number) 5, (byte)(number) 2, (byte)(number) 6, (byte)(number) 5, (byte)(number) 5, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 7, (byte)(number) 7, (byte)(number) 4, (byte)(number) 6, (byte)(number) 4, (byte)(number) 4 } +(const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) SCREEN = (byte*)(number) $400 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 @@ -250,7 +250,6 @@ SYMBOL TABLE SSA (byte*) main::toD0181_screen#0 (byte*) main::toD0181_screen#1 -Adding number conversion cast (unumber) 0 in (byte) init_font_hex::idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 Adding number conversion cast (unumber) 4 in (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#2 + (byte) init_font_hex::i#2) << (number) 4 Adding number conversion cast (unumber) 1 in (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#2 + (byte) init_font_hex::i#2) << (number) 1 @@ -270,7 +269,6 @@ Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (un Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 @@ -278,90 +276,9 @@ Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -375,7 +292,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/for-empty-increment.log b/src/test/ref/for-empty-increment.log index b276345d6..30c7b24da 100644 --- a/src/test/ref/for-empty-increment.log +++ b/src/test/ref/for-empty-increment.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -48,16 +48,11 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) main::i#2 < (number) $a Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/for-empty-init.log b/src/test/ref/for-empty-init.log index d527556f8..3fc375e3a 100644 --- a/src/test/ref/for-empty-init.log +++ b/src/test/ref/for-empty-init.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -48,16 +48,11 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) main::i#2 < (number) $a Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/for-two-vars.log b/src/test/ref/for-two-vars.log index 8a6abcb77..16ea9de81 100644 --- a/src/test/ref/for-two-vars.log +++ b/src/test/ref/for-two-vars.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 (byte*) main::sc#0 ← (const byte*) main::SCREEN+(number) $27 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte*) main::sc#3 ← phi( main/(byte*) main::sc#0 main::@2/(byte*) main::sc#1 ) @@ -58,18 +58,13 @@ SYMBOL TABLE SSA (byte*) main::sc#3 Adding number conversion cast (unumber) $27 in (byte*) main::sc#0 ← (const byte*) main::SCREEN+(number) $27 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) main::$0 ← (byte) main::i#2 < (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $27 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $27 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/forced-zeropage.log b/src/test/ref/forced-zeropage.log index 6ac0975ba..e95973fee 100644 --- a/src/test/ref/forced-zeropage.log +++ b/src/test/ref/forced-zeropage.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (word) main::u#0 ← (number) $22b + (word) main::u#0 ← (word) $22b (word~) main::$0 ← *((word*)(number) $a0) - (word) main::u#0 (word) main::u#1 ← (word~) main::$0 *((word*)(number) $400) ← (word) main::u#1 @@ -35,19 +35,14 @@ SYMBOL TABLE SSA (word) main::u#0 (word) main::u#1 -Adding number conversion cast (unumber) $22b in (word) main::u#0 ← (number) $22b Adding number conversion cast (unumber) $d400 in (byte*~) main::$1 ← *((byte**)(number) $d1) + (number) $d400 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) main::u#0 ← (unumber)(number) $22b -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $22b Simplifying constant pointer cast (word*) 160 Simplifying constant pointer cast (word*) 1024 Simplifying constant pointer cast (byte**) 209 Simplifying constant integer cast $d400 Simplifying constant pointer cast (byte**) 243 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (word) $22b Finalized unsigned number type (word) $d400 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (word) main::u#1 = (word~) main::$0 diff --git a/src/test/ref/forclassicmin.log b/src/test/ref/forclassicmin.log index 567f0e60a..061c2b45d 100644 --- a/src/test/ref/forclassicmin.log +++ b/src/test/ref/forclassicmin.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -49,16 +49,11 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $64 in (bool~) main::$0 ← (byte) main::i#2 != (number) $64 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $64 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $64 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/forincrementassign.log b/src/test/ref/forincrementassign.log index 01aca424e..02a13de1c 100644 --- a/src/test/ref/forincrementassign.log +++ b/src/test/ref/forincrementassign.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -51,19 +51,14 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) main::$0 ← (byte) main::i#2 < (number) $28 Adding number conversion cast (unumber) 2 in (number~) main::$1 ← (byte) main::i#3 + (number) 2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::i#3 + (unumber)(number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/fragment-synth.log b/src/test/ref/fragment-synth.log index ab9a995cd..9c9e0b845 100644 --- a/src/test/ref/fragment-synth.log +++ b/src/test/ref/fragment-synth.log @@ -11,7 +11,7 @@ main: scope:[main] from @2 (byte*) main::z#0 ← (byte*)(number) $450 *((byte*) main::z#0 + (number) 2) ← (number) $f0 *((byte*) main::z#0 + (number) 3) ← (number) $f - (byte) main::x#0 ← (number) $aa + (byte) main::x#0 ← (byte) $aa (byte) fct::x#0 ← (byte) main::x#0 (byte*) fct::z#0 ← (byte*) main::z#0 call fct @@ -109,7 +109,6 @@ Adding number conversion cast (unumber) $f0 in *((byte*) main::z#0 + (number) 2) Adding number conversion cast (unumber) 2 in *((byte*) main::z#0 + (number) 2) ← ((unumber)) (number) $f0 Adding number conversion cast (unumber) $f in *((byte*) main::z#0 + (number) 3) ← (number) $f Adding number conversion cast (unumber) 3 in *((byte*) main::z#0 + (number) 3) ← ((unumber)) (number) $f -Adding number conversion cast (unumber) $aa in (byte) main::x#0 ← (number) $aa Adding number conversion cast (unumber) 0 in *((const byte*) main::screen + (number) 0) ← (byte) main::a1#0 Adding number conversion cast (unumber) $55 in (byte) main::x#1 ← (number) $55 Adding number conversion cast (unumber) 1 in *((const byte*) main::screen + (number) 1) ← (byte) main::a2#0 @@ -117,7 +116,6 @@ Adding number conversion cast (unumber) 2 in (byte~) fct::$0 ← (byte) fct::x#2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((byte*) main::z#0 + (unumber)(number) 2) ← (unumber)(number) $f0 Inlining cast *((byte*) main::z#0 + (unumber)(number) 3) ← (unumber)(number) $f -Inlining cast (byte) main::x#0 ← (unumber)(number) $aa Inlining cast (byte) main::x#1 ← (unumber)(number) $55 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 @@ -126,7 +124,6 @@ Simplifying constant integer cast $f0 Simplifying constant integer cast 2 Simplifying constant integer cast $f Simplifying constant integer cast 3 -Simplifying constant integer cast $aa Simplifying constant integer cast 0 Simplifying constant integer cast $55 Simplifying constant integer cast 1 @@ -136,7 +133,6 @@ Finalized unsigned number type (byte) $f0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) $aa Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $55 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/fragment-variations.asm b/src/test/ref/fragment-variations.asm index 05dd39c9d..5e450573e 100644 --- a/src/test/ref/fragment-variations.asm +++ b/src/test/ref/fragment-variations.asm @@ -6,18 +6,16 @@ .const SIZEOF_DWORD = 4 main: { .label screen = $400 - .label __0 = 2 - .label __1 = 2 + .label __0 = 6 + .label __1 = 6 lda #<$a sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - lda #$a - sta.z mul16u.mb - lda #0 - sta.z mul16u.mb+1 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + lda #<$a + sta.z mul16u.b + lda #>$a + sta.z mul16u.b+1 jsr mul16u lda.z __0 sta screen @@ -32,13 +30,9 @@ main: { lda #>$3e8 sta.z mul16u.a+1 lda #<$3e8 - sta.z mul16u.mb + sta.z mul16u.b lda #>$3e8 - sta.z mul16u.mb+1 - lda #<$3e8>>$10 - sta.z mul16u.mb+2 - lda #>$3e8>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u lda.z __1 sta screen+1*SIZEOF_DWORD @@ -50,11 +44,19 @@ main: { sta screen+1*SIZEOF_DWORD+3 rts } -// mul16u(word zp(6) a) +// mul16u(word zp(2) b, word zp(4) a) mul16u: { - .label return = 2 - .label mb = 2 - .label a = 6 + .label return = 6 + .label mb = 6 + .label b = 2 + .label a = 4 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 lda.z return clc adc.z a diff --git a/src/test/ref/fragment-variations.cfg b/src/test/ref/fragment-variations.cfg index 747c707cc..c1c813e1e 100644 --- a/src/test/ref/fragment-variations.cfg +++ b/src/test/ref/fragment-variations.cfg @@ -30,10 +30,11 @@ main::@return: scope:[main] from main::@2 (dword()) mul16u((word) mul16u::b , (word) mul16u::a) mul16u: scope:[mul16u] from main main::@1 - [14] (word) mul16u::a#2 ← phi( main/(byte) $a main::@1/(word) $3e8 ) - [14] (dword) mul16u::mb#0 ← phi( main/(byte) $a main::@1/(word) $3e8 ) - [15] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 + [14] (word) mul16u::a#2 ← phi( main/(word) $a main::@1/(word) $3e8 ) + [14] (word) mul16u::b#2 ← phi( main/(word) $a main::@1/(word) $3e8 ) + [15] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 + [16] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u - [16] return + [17] return to:@return diff --git a/src/test/ref/fragment-variations.log b/src/test/ref/fragment-variations.log index 0f5494ced..db4561316 100644 --- a/src/test/ref/fragment-variations.log +++ b/src/test/ref/fragment-variations.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - (word) main::w#0 ← (number) $a + (word) main::w#0 ← (word) $a (word) mul16u::b#0 ← (word) main::w#0 (word) mul16u::a#0 ← (word) main::w#0 call mul16u @@ -41,7 +41,7 @@ main::@return: scope:[main] from main::@2 mul16u: scope:[mul16u] from main main::@1 (word) mul16u::a#2 ← phi( main/(word) mul16u::a#0 main::@1/(word) mul16u::a#1 ) (word) mul16u::b#2 ← phi( main/(word) mul16u::b#0 main::@1/(word) mul16u::b#1 ) - (dword) mul16u::mb#0 ← (word) mul16u::b#2 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 (dword~) mul16u::$0 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 (dword) mul16u::return#2 ← (dword~) mul16u::$0 to:mul16u::@return @@ -97,23 +97,19 @@ SYMBOL TABLE SSA (dword) mul16u::return#5 (dword) mul16u::return#6 -Adding number conversion cast (unumber) $a in (word) main::w#0 ← (number) $a Adding number conversion cast (unumber) 0 in (number~) main::$2 ← (number) 0 * (const byte) SIZEOF_DWORD Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (unumber)(number) 0 * (const byte) SIZEOF_DWORD Adding number conversion cast (unumber) $3e8 in (word) main::w#1 ← (number) $3e8 Adding number conversion cast (unumber) 1 in (number~) main::$3 ← (number) 1 * (const byte) SIZEOF_DWORD Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (unumber)(number) 1 * (const byte) SIZEOF_DWORD Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) main::w#0 ← (unumber)(number) $a Inlining cast (word) main::w#1 ← (unumber)(number) $3e8 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (dword*) 1024 -Simplifying constant integer cast $a Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 1 @@ -122,7 +118,6 @@ Inferred type updated to byte in (unumber~) main::$2 ← (byte) 0 * (const byte) Inferred type updated to byte in (unumber~) main::$3 ← (byte) 1 * (const byte) SIZEOF_DWORD Alias (dword) mul16u::return#0 = (dword) mul16u::return#4 Alias (dword) mul16u::return#1 = (dword) mul16u::return#5 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#2 Alias (dword) mul16u::return#2 = (dword~) mul16u::$0 (dword) mul16u::return#6 (dword) mul16u::return#3 Successful SSA optimization Pass2AliasElimination Constant right-side identified [7] (byte~) main::$2 ← (byte) 0 * (const byte) SIZEOF_DWORD @@ -146,15 +141,17 @@ Eliminating unused constant (const byte) main::$2 Successful SSA optimization PassNEliminateUnusedVars Inlining constant with different constant siblings (const word) main::w#0 Inlining constant with different constant siblings (const word) main::w#1 +Inlining constant with var siblings (const word) mul16u::b#0 Inlining constant with var siblings (const word) mul16u::a#0 +Inlining constant with var siblings (const word) mul16u::b#1 Inlining constant with var siblings (const word) mul16u::a#1 Constant inlined mul16u::b#1 = (word) $3e8 Constant inlined main::$3 = (byte) 1*(const byte) SIZEOF_DWORD Constant inlined main::w#1 = (word) $3e8 -Constant inlined main::w#0 = (byte) $a -Constant inlined mul16u::b#0 = (byte) $a +Constant inlined main::w#0 = (word) $a +Constant inlined mul16u::b#0 = (word) $a Constant inlined mul16u::a#1 = (word) $3e8 -Constant inlined mul16u::a#0 = (byte) $a +Constant inlined mul16u::a#0 = (word) $a Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(main::screen+1*SIZEOF_DWORD) Successful SSA optimization Pass2ConstantAdditionElimination @@ -209,12 +206,13 @@ main::@return: scope:[main] from main::@2 (dword()) mul16u((word) mul16u::b , (word) mul16u::a) mul16u: scope:[mul16u] from main main::@1 - [14] (word) mul16u::a#2 ← phi( main/(byte) $a main::@1/(word) $3e8 ) - [14] (dword) mul16u::mb#0 ← phi( main/(byte) $a main::@1/(word) $3e8 ) - [15] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 + [14] (word) mul16u::a#2 ← phi( main/(word) $a main::@1/(word) $3e8 ) + [14] (word) mul16u::b#2 ← phi( main/(word) $a main::@1/(word) $3e8 ) + [15] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 + [16] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u - [16] return + [17] return to:@return @@ -225,38 +223,42 @@ VARIABLE REGISTER WEIGHTS (word) main::w (dword()) mul16u((word) mul16u::b , (word) mul16u::a) (word) mul16u::a -(word) mul16u::a#2 2.0 +(word) mul16u::a#2 1.0 (word) mul16u::b +(word) mul16u::b#2 (dword) mul16u::mb -(dword) mul16u::mb#0 2.0 +(dword) mul16u::mb#0 4.0 (dword) mul16u::return (dword) mul16u::return#0 4.0 (dword) mul16u::return#1 4.0 (dword) mul16u::return#2 1.5 Initial phi equivalence classes -[ mul16u::mb#0 ] +[ mul16u::b#2 ] [ mul16u::a#2 ] Added variable mul16u::return#0 to live range equivalence class [ mul16u::return#0 ] Added variable main::$0 to live range equivalence class [ main::$0 ] Added variable mul16u::return#1 to live range equivalence class [ mul16u::return#1 ] Added variable main::$1 to live range equivalence class [ main::$1 ] +Added variable mul16u::mb#0 to live range equivalence class [ mul16u::mb#0 ] Added variable mul16u::return#2 to live range equivalence class [ mul16u::return#2 ] Complete equivalence classes -[ mul16u::mb#0 ] +[ mul16u::b#2 ] [ mul16u::a#2 ] [ mul16u::return#0 ] [ main::$0 ] [ mul16u::return#1 ] [ main::$1 ] +[ mul16u::mb#0 ] [ mul16u::return#2 ] -Allocated zp[4]:2 [ mul16u::mb#0 ] -Allocated zp[2]:6 [ mul16u::a#2 ] -Allocated zp[4]:8 [ mul16u::return#0 ] -Allocated zp[4]:12 [ main::$0 ] -Allocated zp[4]:16 [ mul16u::return#1 ] -Allocated zp[4]:20 [ main::$1 ] -Allocated zp[4]:24 [ mul16u::return#2 ] +Allocated zp[2]:2 [ mul16u::b#2 ] +Allocated zp[2]:4 [ mul16u::a#2 ] +Allocated zp[4]:6 [ mul16u::return#0 ] +Allocated zp[4]:10 [ main::$0 ] +Allocated zp[4]:14 [ mul16u::return#1 ] +Allocated zp[4]:18 [ main::$1 ] +Allocated zp[4]:22 [ mul16u::mb#0 ] +Allocated zp[4]:26 [ mul16u::return#2 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -288,23 +290,21 @@ __bend: // main main: { .label screen = $400 - .label __0 = $c - .label __1 = $14 + .label __0 = $a + .label __1 = $12 // [5] call mul16u // [14] phi from main to mul16u [phi:main->mul16u] mul16u_from_main: - // [14] phi (word) mul16u::a#2 = (byte) $a [phi:main->mul16u#0] -- vwuz1=vbuc1 + // [14] phi (word) mul16u::a#2 = (word) $a [phi:main->mul16u#0] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [14] phi (dword) mul16u::mb#0 = (byte) $a [phi:main->mul16u#1] -- vduz1=vbuc1 - lda #$a - sta.z mul16u.mb - lda #0 - sta.z mul16u.mb+1 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [14] phi (word) mul16u::b#2 = (word) $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + lda #<$a + sta.z mul16u.b + lda #>$a + sta.z mul16u.b+1 jsr mul16u // [6] (dword) mul16u::return#0 ← (dword) mul16u::return#2 -- vduz1=vduz2 lda.z mul16u.return_2 @@ -344,15 +344,11 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [14] phi (dword) mul16u::mb#0 = (word) $3e8 [phi:main::@1->mul16u#1] -- vduz1=vduc1 + // [14] phi (word) mul16u::b#2 = (word) $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 - sta.z mul16u.mb + sta.z mul16u.b lda #>$3e8 - sta.z mul16u.mb+1 - lda #<$3e8>>$10 - sta.z mul16u.mb+2 - lda #>$3e8>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // [10] (dword) mul16u::return#1 ← (dword) mul16u::return#2 -- vduz1=vduz2 lda.z mul16u.return_2 @@ -391,14 +387,23 @@ main: { rts } // mul16u -// mul16u(word zp(6) a) +// mul16u(word zp(2) b, word zp(4) a) mul16u: { - .label return = 8 - .label return_1 = $10 - .label mb = 2 - .label return_2 = $18 - .label a = 6 - // [15] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 -- vduz1=vduz2_plus_vwuz3 + .label return = 6 + .label return_1 = $e + .label mb = $16 + .label return_2 = $1a + .label b = 2 + .label a = 4 + // [15] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [16] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 -- vduz1=vduz2_plus_vwuz3 lda.z mb clc adc.z a @@ -415,7 +420,7 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [16] return + // [17] return rts } // File Data @@ -427,28 +432,30 @@ Statement [8] *((const dword*) main::screen) ← (dword~) main::$0 [ ] ( main:2 Statement [10] (dword) mul16u::return#1 ← (dword) mul16u::return#2 [ mul16u::return#1 ] ( main:2 [ mul16u::return#1 ] ) always clobbers reg byte a Statement [11] (dword~) main::$1 ← (dword) mul16u::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) always clobbers reg byte a Statement [12] *((const dword*) main::screen+(byte) 1*(const byte) SIZEOF_DWORD) ← (dword~) main::$1 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [15] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 [ mul16u::return#2 ] ( main:2::mul16u:5 [ mul16u::return#2 ] main:2::mul16u:9 [ mul16u::return#2 ] ) always clobbers reg byte a -Potential registers zp[4]:2 [ mul16u::mb#0 ] : zp[4]:2 , -Potential registers zp[2]:6 [ mul16u::a#2 ] : zp[2]:6 , -Potential registers zp[4]:8 [ mul16u::return#0 ] : zp[4]:8 , -Potential registers zp[4]:12 [ main::$0 ] : zp[4]:12 , -Potential registers zp[4]:16 [ mul16u::return#1 ] : zp[4]:16 , -Potential registers zp[4]:20 [ main::$1 ] : zp[4]:20 , -Potential registers zp[4]:24 [ mul16u::return#2 ] : zp[4]:24 , +Statement [15] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#2 mul16u::mb#0 ] ( main:2::mul16u:5 [ mul16u::a#2 mul16u::mb#0 ] main:2::mul16u:9 [ mul16u::a#2 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [16] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 [ mul16u::return#2 ] ( main:2::mul16u:5 [ mul16u::return#2 ] main:2::mul16u:9 [ mul16u::return#2 ] ) always clobbers reg byte a +Potential registers zp[2]:2 [ mul16u::b#2 ] : zp[2]:2 , +Potential registers zp[2]:4 [ mul16u::a#2 ] : zp[2]:4 , +Potential registers zp[4]:6 [ mul16u::return#0 ] : zp[4]:6 , +Potential registers zp[4]:10 [ main::$0 ] : zp[4]:10 , +Potential registers zp[4]:14 [ mul16u::return#1 ] : zp[4]:14 , +Potential registers zp[4]:18 [ main::$1 ] : zp[4]:18 , +Potential registers zp[4]:22 [ mul16u::mb#0 ] : zp[4]:22 , +Potential registers zp[4]:26 [ mul16u::return#2 ] : zp[4]:26 , REGISTER UPLIFT SCOPES -Uplift Scope [mul16u] 4: zp[4]:8 [ mul16u::return#0 ] 4: zp[4]:16 [ mul16u::return#1 ] 2: zp[4]:2 [ mul16u::mb#0 ] 2: zp[2]:6 [ mul16u::a#2 ] 1.5: zp[4]:24 [ mul16u::return#2 ] -Uplift Scope [main] 4: zp[4]:12 [ main::$0 ] 4: zp[4]:20 [ main::$1 ] +Uplift Scope [mul16u] 4: zp[4]:6 [ mul16u::return#0 ] 4: zp[4]:14 [ mul16u::return#1 ] 4: zp[4]:22 [ mul16u::mb#0 ] 1.5: zp[4]:26 [ mul16u::return#2 ] 1: zp[2]:4 [ mul16u::a#2 ] 0: zp[2]:2 [ mul16u::b#2 ] +Uplift Scope [main] 4: zp[4]:10 [ main::$0 ] 4: zp[4]:18 [ main::$1 ] Uplift Scope [] -Uplifting [mul16u] best 292 combination zp[4]:8 [ mul16u::return#0 ] zp[4]:16 [ mul16u::return#1 ] zp[4]:2 [ mul16u::mb#0 ] zp[2]:6 [ mul16u::a#2 ] zp[4]:24 [ mul16u::return#2 ] -Uplifting [main] best 292 combination zp[4]:12 [ main::$0 ] zp[4]:20 [ main::$1 ] -Uplifting [] best 292 combination -Coalescing zero page register [ zp[4]:2 [ mul16u::mb#0 ] ] with [ zp[4]:24 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:8 [ mul16u::return#0 ] ] with [ zp[4]:12 [ main::$0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:16 [ mul16u::return#1 ] ] with [ zp[4]:20 [ main::$1 ] ] - score: 1 -Coalescing zero page register [ zp[4]:2 [ mul16u::mb#0 mul16u::return#2 ] ] with [ zp[4]:8 [ mul16u::return#0 main::$0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:2 [ mul16u::mb#0 mul16u::return#2 mul16u::return#0 main::$0 ] ] with [ zp[4]:16 [ mul16u::return#1 main::$1 ] ] - score: 1 +Uplifting [mul16u] best 296 combination zp[4]:6 [ mul16u::return#0 ] zp[4]:14 [ mul16u::return#1 ] zp[4]:22 [ mul16u::mb#0 ] zp[4]:26 [ mul16u::return#2 ] zp[2]:4 [ mul16u::a#2 ] zp[2]:2 [ mul16u::b#2 ] +Uplifting [main] best 296 combination zp[4]:10 [ main::$0 ] zp[4]:18 [ main::$1 ] +Uplifting [] best 296 combination +Coalescing zero page register [ zp[4]:6 [ mul16u::return#0 ] ] with [ zp[4]:10 [ main::$0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:6 [ mul16u::return#0 main::$0 ] ] with [ zp[4]:26 [ mul16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:14 [ mul16u::return#1 ] ] with [ zp[4]:18 [ main::$1 ] ] - score: 1 +Coalescing zero page register [ zp[4]:6 [ mul16u::return#0 main::$0 mul16u::return#2 ] ] with [ zp[4]:14 [ mul16u::return#1 main::$1 ] ] - score: 1 +Coalescing zero page register [ zp[4]:6 [ mul16u::return#0 main::$0 mul16u::return#2 mul16u::return#1 main::$1 ] ] with [ zp[4]:22 [ mul16u::mb#0 ] ] - score: 1 ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -479,23 +486,21 @@ __bend: // main main: { .label screen = $400 - .label __0 = 2 - .label __1 = 2 + .label __0 = 6 + .label __1 = 6 // [5] call mul16u // [14] phi from main to mul16u [phi:main->mul16u] mul16u_from_main: - // [14] phi (word) mul16u::a#2 = (byte) $a [phi:main->mul16u#0] -- vwuz1=vbuc1 + // [14] phi (word) mul16u::a#2 = (word) $a [phi:main->mul16u#0] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [14] phi (dword) mul16u::mb#0 = (byte) $a [phi:main->mul16u#1] -- vduz1=vbuc1 - lda #$a - sta.z mul16u.mb - lda #0 - sta.z mul16u.mb+1 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [14] phi (word) mul16u::b#2 = (word) $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + lda #<$a + sta.z mul16u.b + lda #>$a + sta.z mul16u.b+1 jsr mul16u // [6] (dword) mul16u::return#0 ← (dword) mul16u::return#2 jmp __b1 @@ -519,15 +524,11 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [14] phi (dword) mul16u::mb#0 = (word) $3e8 [phi:main::@1->mul16u#1] -- vduz1=vduc1 + // [14] phi (word) mul16u::b#2 = (word) $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 - sta.z mul16u.mb + sta.z mul16u.b lda #>$3e8 - sta.z mul16u.mb+1 - lda #<$3e8>>$10 - sta.z mul16u.mb+2 - lda #>$3e8>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // [10] (dword) mul16u::return#1 ← (dword) mul16u::return#2 jmp __b2 @@ -550,12 +551,21 @@ main: { rts } // mul16u -// mul16u(word zp(6) a) +// mul16u(word zp(2) b, word zp(4) a) mul16u: { - .label return = 2 - .label mb = 2 - .label a = 6 - // [15] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 -- vduz1=vduz1_plus_vwuz2 + .label return = 6 + .label mb = 6 + .label b = 2 + .label a = 4 + // [15] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [16] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 -- vduz1=vduz1_plus_vwuz2 lda.z return clc adc.z a @@ -572,7 +582,7 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [16] return + // [17] return rts } // File Data @@ -611,8 +621,8 @@ FINAL SYMBOL TABLE (label) @end (const byte) SIZEOF_DWORD = (byte) 4 (void()) main() -(dword~) main::$0 zp[4]:2 4.0 -(dword~) main::$1 zp[4]:2 4.0 +(dword~) main::$0 zp[4]:6 4.0 +(dword~) main::$1 zp[4]:6 4.0 (label) main::@1 (label) main::@2 (label) main::@return @@ -621,21 +631,23 @@ FINAL SYMBOL TABLE (dword()) mul16u((word) mul16u::b , (word) mul16u::a) (label) mul16u::@return (word) mul16u::a -(word) mul16u::a#2 a zp[2]:6 2.0 +(word) mul16u::a#2 a zp[2]:4 1.0 (word) mul16u::b +(word) mul16u::b#2 b zp[2]:2 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:2 2.0 +(dword) mul16u::mb#0 mb zp[4]:6 4.0 (dword) mul16u::return -(dword) mul16u::return#0 return zp[4]:2 4.0 -(dword) mul16u::return#1 return zp[4]:2 4.0 -(dword) mul16u::return#2 return zp[4]:2 1.5 +(dword) mul16u::return#0 return zp[4]:6 4.0 +(dword) mul16u::return#1 return zp[4]:6 4.0 +(dword) mul16u::return#2 return zp[4]:6 1.5 -zp[4]:2 [ mul16u::mb#0 mul16u::return#2 mul16u::return#0 main::$0 mul16u::return#1 main::$1 ] -zp[2]:6 [ mul16u::a#2 ] +zp[2]:2 [ mul16u::b#2 ] +zp[2]:4 [ mul16u::a#2 ] +zp[4]:6 [ mul16u::return#0 main::$0 mul16u::return#2 mul16u::return#1 main::$1 mul16u::mb#0 ] FINAL ASSEMBLER -Score: 172 +Score: 176 // File Comments // Tests that ASM fragment variations works @@ -656,23 +668,21 @@ Score: 172 // main main: { .label screen = $400 - .label __0 = 2 - .label __1 = 2 + .label __0 = 6 + .label __1 = 6 // mul16u(w, w) // [5] call mul16u // [14] phi from main to mul16u [phi:main->mul16u] - // [14] phi (word) mul16u::a#2 = (byte) $a [phi:main->mul16u#0] -- vwuz1=vbuc1 + // [14] phi (word) mul16u::a#2 = (word) $a [phi:main->mul16u#0] -- vwuz1=vwuc1 lda #<$a sta.z mul16u.a lda #>$a sta.z mul16u.a+1 - // [14] phi (dword) mul16u::mb#0 = (byte) $a [phi:main->mul16u#1] -- vduz1=vbuc1 - lda #$a - sta.z mul16u.mb - lda #0 - sta.z mul16u.mb+1 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [14] phi (word) mul16u::b#2 = (word) $a [phi:main->mul16u#1] -- vwuz1=vwuc1 + lda #<$a + sta.z mul16u.b + lda #>$a + sta.z mul16u.b+1 jsr mul16u // mul16u(w, w) // [6] (dword) mul16u::return#0 ← (dword) mul16u::return#2 @@ -696,15 +706,11 @@ main: { sta.z mul16u.a lda #>$3e8 sta.z mul16u.a+1 - // [14] phi (dword) mul16u::mb#0 = (word) $3e8 [phi:main::@1->mul16u#1] -- vduz1=vduc1 + // [14] phi (word) mul16u::b#2 = (word) $3e8 [phi:main::@1->mul16u#1] -- vwuz1=vwuc1 lda #<$3e8 - sta.z mul16u.mb + sta.z mul16u.b lda #>$3e8 - sta.z mul16u.mb+1 - lda #<$3e8>>$10 - sta.z mul16u.mb+2 - lda #>$3e8>>$10 - sta.z mul16u.mb+3 + sta.z mul16u.b+1 jsr mul16u // mul16u(w, w) // [10] (dword) mul16u::return#1 ← (dword) mul16u::return#2 @@ -726,13 +732,23 @@ main: { rts } // mul16u -// mul16u(word zp(6) a) +// mul16u(word zp(2) b, word zp(4) a) mul16u: { - .label return = 2 - .label mb = 2 - .label a = 6 + .label return = 6 + .label mb = 6 + .label b = 2 + .label a = 4 + // mb = b + // [15] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 // mb+a - // [15] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 -- vduz1=vduz1_plus_vwuz2 + // [16] (dword) mul16u::return#2 ← (dword) mul16u::mb#0 + (word) mul16u::a#2 -- vduz1=vduz1_plus_vwuz2 lda.z return clc adc.z a @@ -748,7 +764,7 @@ mul16u: { sta.z return+3 // mul16u::@return // } - // [16] return + // [17] return rts } // File Data diff --git a/src/test/ref/fragment-variations.sym b/src/test/ref/fragment-variations.sym index 3d9ac4487..a469cc9b3 100644 --- a/src/test/ref/fragment-variations.sym +++ b/src/test/ref/fragment-variations.sym @@ -3,8 +3,8 @@ (label) @end (const byte) SIZEOF_DWORD = (byte) 4 (void()) main() -(dword~) main::$0 zp[4]:2 4.0 -(dword~) main::$1 zp[4]:2 4.0 +(dword~) main::$0 zp[4]:6 4.0 +(dword~) main::$1 zp[4]:6 4.0 (label) main::@1 (label) main::@2 (label) main::@return @@ -13,14 +13,16 @@ (dword()) mul16u((word) mul16u::b , (word) mul16u::a) (label) mul16u::@return (word) mul16u::a -(word) mul16u::a#2 a zp[2]:6 2.0 +(word) mul16u::a#2 a zp[2]:4 1.0 (word) mul16u::b +(word) mul16u::b#2 b zp[2]:2 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:2 2.0 +(dword) mul16u::mb#0 mb zp[4]:6 4.0 (dword) mul16u::return -(dword) mul16u::return#0 return zp[4]:2 4.0 -(dword) mul16u::return#1 return zp[4]:2 4.0 -(dword) mul16u::return#2 return zp[4]:2 1.5 +(dword) mul16u::return#0 return zp[4]:6 4.0 +(dword) mul16u::return#1 return zp[4]:6 4.0 +(dword) mul16u::return#2 return zp[4]:6 1.5 -zp[4]:2 [ mul16u::mb#0 mul16u::return#2 mul16u::return#0 main::$0 mul16u::return#1 main::$1 ] -zp[2]:6 [ mul16u::a#2 ] +zp[2]:2 [ mul16u::b#2 ] +zp[2]:4 [ mul16u::a#2 ] +zp[4]:6 [ mul16u::return#0 main::$0 mul16u::return#2 mul16u::return#1 main::$1 mul16u::mb#0 ] diff --git a/src/test/ref/function-as-array.asm b/src/test/ref/function-as-array.asm index 53c49e7cc..c865c4d49 100644 --- a/src/test/ref/function-as-array.asm +++ b/src/test/ref/function-as-array.asm @@ -1,5 +1,6 @@ // Tests treating a function like an array // Should produce an error +// https://gitlab.com/camelot/kickc/issues/276 .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" diff --git a/src/test/ref/function-as-array.cfg b/src/test/ref/function-as-array.cfg index 6009b8f9b..129c214d7 100644 --- a/src/test/ref/function-as-array.cfg +++ b/src/test/ref/function-as-array.cfg @@ -7,6 +7,8 @@ to:@end @end: scope:[] from @1 [3] phi() + +(void()) main() main: scope:[main] from @1 [4] phi() [5] call new_ball @@ -14,8 +16,10 @@ main: scope:[main] from @1 main::@return: scope:[main] from main [6] return to:@return + +(void()) new_ball((byte) new_ball::i) new_ball: scope:[new_ball] from main - [7] *((const byte[$10]) BALLS#0) ← ++ *((const byte[$10]) BALLS#0) + [7] *((const byte*) BALLS) ← ++ *((const byte*) BALLS) to:new_ball::@return new_ball::@return: scope:[new_ball] from new_ball [8] return diff --git a/src/test/ref/function-as-array.log b/src/test/ref/function-as-array.log index 1aef7a84e..12d92dbca 100644 --- a/src/test/ref/function-as-array.log +++ b/src/test/ref/function-as-array.log @@ -1,7 +1,11 @@ +Resolved forward reference new_ball to (void()) new_ball((byte) new_ball::i) +Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - to:@1 + to:@2 + +(void()) main() main: scope:[main] from @2 (byte) new_ball::i#0 ← (number) 0 call new_ball @@ -11,17 +15,16 @@ main::@1: scope:[main] from main main::@return: scope:[main] from main::@1 return to:@return -@1: scope:[] from @begin - (byte[$10]) BALLS#0 ← { fill( $10, 0) } - to:@2 + +(void()) new_ball((byte) new_ball::i) new_ball: scope:[new_ball] from main (byte) new_ball::i#1 ← phi( main/(byte) new_ball::i#0 ) - *((byte[$10]) BALLS#0 + (byte) new_ball::i#1) ← ++ *((byte[$10]) BALLS#0 + (byte) new_ball::i#1) + *((const byte*) BALLS + (byte) new_ball::i#1) ← ++ *((const byte*) BALLS + (byte) new_ball::i#1) to:new_ball::@return new_ball::@return: scope:[new_ball] from new_ball return to:@return -@2: scope:[] from @1 +@2: scope:[] from @begin call main to:@3 @3: scope:[] from @2 @@ -29,13 +32,11 @@ new_ball::@return: scope:[new_ball] from new_ball @end: scope:[] from @3 SYMBOL TABLE SSA -(label) @1 (label) @2 (label) @3 (label) @begin (label) @end -(byte[$10]) BALLS -(byte[$10]) BALLS#0 +(const byte*) BALLS[(number) $10] = { fill( $10, 0) } (void()) main() (label) main::@1 (label) main::@return @@ -55,30 +56,25 @@ Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Identical Phi Values (byte) new_ball::i#1 (byte) new_ball::i#0 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [3] (byte[$10]) BALLS#0 ← { fill( $10, 0) } -Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) new_ball::i#0 = 0 -Constant (const byte[$10]) BALLS#0 = { fill( $10, 0) } Successful SSA optimization Pass2ConstantIdentification -Simplifying expression containing zero BALLS#0 in [5] *((const byte[$10]) BALLS#0 + (const byte) new_ball::i#0) ← ++ *((const byte[$10]) BALLS#0 + (const byte) new_ball::i#0) -Simplifying expression containing zero BALLS#0 in [5] *((const byte[$10]) BALLS#0 + (const byte) new_ball::i#0) ← ++ *((const byte[$10]) BALLS#0) +Simplifying expression containing zero BALLS in [4] *((const byte*) BALLS + (const byte) new_ball::i#0) ← ++ *((const byte*) BALLS + (const byte) new_ball::i#0) +Simplifying expression containing zero BALLS in [4] *((const byte*) BALLS + (const byte) new_ball::i#0) ← ++ *((const byte*) BALLS) Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) new_ball::i#0 Successful SSA optimization PassNEliminateUnusedVars Adding NOP phi() at start of @begin -Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 CALL GRAPH -Calls in [] to main:3 -Calls in [main] to new_ball:7 +Calls in [] to main:2 +Calls in [main] to new_ball:6 Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Culled Empty Block (label) @1 Culled Empty Block (label) @3 Culled Empty Block (label) main::@1 Renumbering block @2 to @1 @@ -97,6 +93,8 @@ FINAL CONTROL FLOW GRAPH to:@end @end: scope:[] from @1 [3] phi() + +(void()) main() main: scope:[main] from @1 [4] phi() [5] call new_ball @@ -104,8 +102,10 @@ main: scope:[main] from @1 main::@return: scope:[main] from main [6] return to:@return + +(void()) new_ball((byte) new_ball::i) new_ball: scope:[new_ball] from main - [7] *((const byte[$10]) BALLS#0) ← ++ *((const byte[$10]) BALLS#0) + [7] *((const byte*) BALLS) ← ++ *((const byte*) BALLS) to:new_ball::@return new_ball::@return: scope:[new_ball] from new_ball [8] return @@ -113,7 +113,6 @@ new_ball::@return: scope:[new_ball] from new_ball VARIABLE REGISTER WEIGHTS -(byte[$10]) BALLS (void()) main() (void()) new_ball((byte) new_ball::i) (byte) new_ball::i @@ -122,48 +121,49 @@ Initial phi equivalence classes Complete equivalence classes INITIAL ASM -Target platform is c64basic +Target platform is c64basic / MOS6502X // File Comments // Tests treating a function like an array // Should produce an error +// https://gitlab.com/camelot/kickc/issues/276 // Upstart .pc = $801 "Basic" -:BasicUpstart(bbegin) +:BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels // @begin -bbegin: +__bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] -b1_from_bbegin: - jmp b1 +__b1_from___bbegin: + jmp __b1 // @1 -b1: +__b1: // [2] call main // [4] phi from @1 to main [phi:@1->main] -main_from_b1: +main_from___b1: jsr main // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: - jmp bend +__bend_from___b1: + jmp __bend // @end -bend: +__bend: // main main: { // [5] call new_ball jsr new_ball - jmp breturn + jmp __breturn // main::@return - breturn: + __breturn: // [6] return rts } // new_ball new_ball: { - // [7] *((const byte[$10]) BALLS#0) ← ++ *((const byte[$10]) BALLS#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [7] *((const byte*) BALLS) ← ++ *((const byte*) BALLS) -- _deref_pbuc1=_inc__deref_pbuc1 inc BALLS - jmp breturn + jmp __breturn // new_ball::@return - breturn: + __breturn: // [8] return rts } @@ -185,44 +185,45 @@ ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests treating a function like an array // Should produce an error +// https://gitlab.com/camelot/kickc/issues/276 // Upstart .pc = $801 "Basic" -:BasicUpstart(bbegin) +:BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels // @begin -bbegin: +__bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] -b1_from_bbegin: - jmp b1 +__b1_from___bbegin: + jmp __b1 // @1 -b1: +__b1: // [2] call main // [4] phi from @1 to main [phi:@1->main] -main_from_b1: +main_from___b1: jsr main // [3] phi from @1 to @end [phi:@1->@end] -bend_from_b1: - jmp bend +__bend_from___b1: + jmp __bend // @end -bend: +__bend: // main main: { // [5] call new_ball jsr new_ball - jmp breturn + jmp __breturn // main::@return - breturn: + __breturn: // [6] return rts } // new_ball new_ball: { - // [7] *((const byte[$10]) BALLS#0) ← ++ *((const byte[$10]) BALLS#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [7] *((const byte*) BALLS) ← ++ *((const byte*) BALLS) -- _deref_pbuc1=_inc__deref_pbuc1 inc BALLS - jmp breturn + jmp __breturn // new_ball::@return - breturn: + __breturn: // [8] return rts } @@ -230,32 +231,32 @@ new_ball: { BALLS: .fill $10, 0 ASSEMBLER OPTIMIZATIONS -Removing instruction jmp b1 -Removing instruction jmp bend -Removing instruction jmp breturn -Removing instruction jmp breturn +Removing instruction jmp __b1 +Removing instruction jmp __bend +Removing instruction jmp __breturn +Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination -Removing instruction b1_from_bbegin: -Removing instruction b1: -Removing instruction main_from_b1: -Removing instruction bend_from_b1: +Replacing label __bbegin with __b1 +Removing instruction __bbegin: +Removing instruction __b1_from___bbegin: +Removing instruction main_from___b1: +Removing instruction __bend_from___b1: Succesful ASM optimization Pass5RedundantLabelElimination -Removing instruction bend: -Removing instruction breturn: -Removing instruction breturn: +Removing instruction __bend: +Removing instruction __breturn: +Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin -Removing instruction bbegin: +Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(byte[$10]) BALLS -(const byte[$10]) BALLS#0 BALLS = { fill( $10, 0) } +(const byte*) BALLS[(number) $10] = { fill( $10, 0) } (void()) main() (label) main::@return (void()) new_ball((byte) new_ball::i) @@ -270,6 +271,7 @@ Score: 24 // File Comments // Tests treating a function like an array // Should produce an error +// https://gitlab.com/camelot/kickc/issues/276 // Upstart .pc = $801 "Basic" :BasicUpstart(main) @@ -295,7 +297,7 @@ main: { // new_ball new_ball: { // BALLS[i]++; - // [7] *((const byte[$10]) BALLS#0) ← ++ *((const byte[$10]) BALLS#0) -- _deref_pbuc1=_inc__deref_pbuc1 + // [7] *((const byte*) BALLS) ← ++ *((const byte*) BALLS) -- _deref_pbuc1=_inc__deref_pbuc1 inc BALLS // new_ball::@return // } diff --git a/src/test/ref/function-as-array.sym b/src/test/ref/function-as-array.sym index 076b59bdc..140ef5aa1 100644 --- a/src/test/ref/function-as-array.sym +++ b/src/test/ref/function-as-array.sym @@ -1,8 +1,7 @@ (label) @1 (label) @begin (label) @end -(byte[$10]) BALLS -(const byte[$10]) BALLS#0 BALLS = { fill( $10, 0) } +(const byte*) BALLS[(number) $10] = { fill( $10, 0) } (void()) main() (label) main::@return (void()) new_ball((byte) new_ball::i) diff --git a/src/test/ref/function-pointer-noarg-3.log b/src/test/ref/function-pointer-noarg-3.log index fff60ee3c..0e91c44c4 100644 --- a/src/test/ref/function-pointer-noarg-3.log +++ b/src/test/ref/function-pointer-noarg-3.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @3 (void()*) main::f#0 ← (void()*) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#4 ) @@ -107,20 +107,15 @@ SYMBOL TABLE SSA (byte) main::i#5 (byte) main::i#6 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#1 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (unumber~) main::$0 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index 9395a5feb..748af86a8 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -63,13 +63,13 @@ main::@return: scope:[main] from main::@2 return to:@return @4: scope:[] from @begin - (byte) idx ← (number) 0 + (byte) idx ← (byte) 0 to:@5 (void()) print((byte*) print::msg) print: scope:[print] from hello world (byte*) print::msg#3 ← phi( hello/(byte*) print::msg#0 world/(byte*) print::msg#1 ) - (byte) print::i#0 ← (number) 0 + (byte) print::i#0 ← (byte) 0 to:print::@1 print::@1: scope:[print] from print print::@1 (byte) print::i#2 ← phi( print/(byte) print::i#0 print::@1/(byte) print::i#1 ) @@ -137,21 +137,12 @@ SYMBOL TABLE SSA (label) world::@return (const string) world::msg[] = (string) "world " -Adding number conversion cast (unumber) 0 in (byte) idx ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) print::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print::$0 ← (number) 0 != *((byte*) print::msg#2 + (byte) print::i#1) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx ← (unumber)(number) 0 -Inlining cast (byte) print::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Identical Phi Values (void()*) do10::fn#2 (void()*) do10::fn#3 Identical Phi Values (byte*) print::msg#2 (byte*) print::msg#3 diff --git a/src/test/ref/function-pointer-noarg-call-2.log b/src/test/ref/function-pointer-noarg-call-2.log index a1fdb1829..80a309818 100644 --- a/src/test/ref/function-pointer-noarg-call-2.log +++ b/src/test/ref/function-pointer-noarg-call-2.log @@ -15,7 +15,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @3 (void()*) main::f#0 ← (void()*) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#4 ) @@ -101,20 +101,15 @@ SYMBOL TABLE SSA (byte) main::i#5 (byte) main::i#6 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#1 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (unumber~) main::$0 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/function-pointer-noarg-call-3.log b/src/test/ref/function-pointer-noarg-call-3.log index 2260b4371..9ec844d0e 100644 --- a/src/test/ref/function-pointer-noarg-call-3.log +++ b/src/test/ref/function-pointer-noarg-call-3.log @@ -18,7 +18,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @4 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@7 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@7/(byte) main::i#4 ) @@ -122,20 +122,15 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) getfn::$0 ← (byte) getfn::b#1 & (number) 1 Adding number conversion cast (unumber) getfn::$0 in (number~) getfn::$0 ← (byte) getfn::b#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) getfn::$1 ← (unumber~) getfn::$0 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/function-pointer-noarg-call-4.log b/src/test/ref/function-pointer-noarg-call-4.log index e81fb1aed..22d1be2a0 100644 --- a/src/test/ref/function-pointer-noarg-call-4.log +++ b/src/test/ref/function-pointer-noarg-call-4.log @@ -13,7 +13,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@7 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@7/(byte) main::i#4 ) @@ -91,15 +91,8 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Alias (void()*) getfn::return#0 = (void()*) getfn::return#3 Alias (byte) main::i#1 = (byte) main::i#4 diff --git a/src/test/ref/function-pointer-noarg-call-5.log b/src/test/ref/function-pointer-noarg-call-5.log index 91d1445ed..cecbb2b71 100644 --- a/src/test/ref/function-pointer-noarg-call-5.log +++ b/src/test/ref/function-pointer-noarg-call-5.log @@ -28,7 +28,7 @@ fn2::@return: scope:[fn2] from fn2 (void()) main() main: scope:[main] from @3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -79,19 +79,14 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#1 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#1 & (unumber)(number) 1 Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (unumber~) main::$0 * (const byte) SIZEOF_POINTER Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::i#1 & (byte) 1 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 74bf008f5..48f8cac4f 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -25,12 +25,12 @@ do10::@return: scope:[do10] from do10::@1 return to:@return @1: scope:[] from @begin - (byte) idx ← (number) 0 + (byte) idx ← (byte) 0 to:@3 (void()) hello() hello: scope:[hello] from - (byte) hello::i#0 ← (number) 0 + (byte) hello::i#0 ← (byte) 0 to:hello::@1 hello::@1: scope:[hello] from hello hello::@1 (byte) hello::i#2 ← phi( hello/(byte) hello::i#0 hello::@1/(byte) hello::i#1 ) @@ -95,21 +95,12 @@ SYMBOL TABLE SSA (const void()*) main::f = &(void()) hello() (const byte*) msg[] = (string) "hello " -Adding number conversion cast (unumber) 0 in (byte) idx ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) hello::$0 ← (number) 0 != *((const byte*) msg + (byte) hello::i#1) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx ← (unumber)(number) 0 -Inlining cast (byte) hello::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Identical Phi Values (void()*) do10::fn#2 (void()*) do10::fn#0 Identical Phi Values (void()*) do10::fn#1 (void()*) do10::fn#2 diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 914ba57d8..4a6d2fd59 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -26,12 +26,12 @@ do10::@return: scope:[do10] from do10::@1 to:@return @1: scope:[] from @begin (byte*) msg ← (byte*) 0 - (byte) idx ← (number) 0 + (byte) idx ← (byte) 0 to:@3 (void()) hello() hello: scope:[hello] from - (byte) hello::i#0 ← (number) 0 + (byte) hello::i#0 ← (byte) 0 to:hello::@1 hello::@1: scope:[hello] from hello hello::@1 (byte) hello::i#2 ← phi( hello/(byte) hello::i#0 hello::@1/(byte) hello::i#1 ) @@ -106,21 +106,12 @@ SYMBOL TABLE SSA (const byte*) msg1[] = (string) "hello " (const byte*) msg2[] = (string) "world " -Adding number conversion cast (unumber) 0 in (byte) idx ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) hello::$0 ← (number) 0 != *((byte*) msg + (byte) hello::i#1) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx ← (unumber)(number) 0 -Inlining cast (byte) hello::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Identical Phi Values (void()*) do10::fn#2 (void()*) do10::fn#3 Successful SSA optimization Pass2IdenticalPhiElimination diff --git a/src/test/ref/function-pointer-noarg-call-9.log b/src/test/ref/function-pointer-noarg-call-9.log index 3f482e5ac..a68fa1a2a 100644 --- a/src/test/ref/function-pointer-noarg-call-9.log +++ b/src/test/ref/function-pointer-noarg-call-9.log @@ -3,7 +3,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) idx ← (number) 0 + (byte) idx ← (byte) 0 to:@2 (void()) fn1() @@ -44,15 +44,8 @@ SYMBOL TABLE SSA (label) main::@return (const void()*) main::f = &(void()) fn1() -Adding number conversion cast (unumber) 0 in (byte) idx ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Replacing constant pointer function [3] call fn1 Replacing constant pointer function [5] call fn1 Successful SSA optimization Pass2ConstantCallPointerIdentification diff --git a/src/test/ref/function-pointer-return.log b/src/test/ref/function-pointer-return.log index ad0c278bd..24a9fa344 100644 --- a/src/test/ref/function-pointer-return.log +++ b/src/test/ref/function-pointer-return.log @@ -17,7 +17,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @3 (byte()*) main::f#0 ← (byte()*) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#4 ) @@ -120,24 +120,20 @@ SYMBOL TABLE SSA (byte) main::i#5 (byte) main::i#6 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#1 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (unumber~) main::$0 == (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (byte~) main::$2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte~) main::$2 ← (byte)(byte()*) main::f#3 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/halfscii.log b/src/test/ref/halfscii.log index 92c14c585..3e07ee29d 100644 --- a/src/test/ref/halfscii.log +++ b/src/test/ref/halfscii.log @@ -19,7 +19,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@5 (byte*) main::charset4#9 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) (byte*) main::chargen#2 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) - (byte) main::bits_gen#0 ← (number) 0 + (byte) main::bits_gen#0 ← (byte) 0 (byte*~) main::$0 ← (byte*) main::chargen#2 + (number) 1 (byte*) main::chargen1#0 ← (byte*~) main::$0 (number~) main::$1 ← *((byte*) main::chargen#2) & (number) $60 @@ -163,7 +163,7 @@ SYMBOL TABLE SSA (const byte*) D018 = (byte*)(number) $d018 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) SCREEN = (byte*)(number) $400 -(const byte*) bits_count[] = { (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 2, (byte)(number) 2, (byte)(number) 3, (byte)(number) 1, (byte)(number) 2, (byte)(number) 2, (byte)(number) 3, (byte)(number) 2, (byte)(number) 3, (byte)(number) 3, (byte)(number) 4 } +(const byte*) bits_count[] = { (byte) 0, (byte) 1, (byte) 1, (byte) 2, (byte) 1, (byte) 2, (byte) 2, (byte) 3, (byte) 1, (byte) 2, (byte) 2, (byte) 3, (byte) 2, (byte) 3, (byte) 3, (byte) 4 } (void()) main() (byte*~) main::$0 (number~) main::$1 @@ -280,7 +280,6 @@ SYMBOL TABLE SSA (byte) main::i#2 Adding number conversion cast (unumber) $32 in *((const byte*) PROCPORT) ← (number) $32 -Adding number conversion cast (unumber) 0 in (byte) main::bits_gen#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*~) main::$0 ← (byte*) main::chargen#2 + (number) 1 Adding number conversion cast (unumber) $60 in (number~) main::$1 ← *((byte*) main::chargen#2) & (number) $60 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← *((byte*) main::chargen#2) & (unumber)(number) $60 @@ -344,33 +343,15 @@ Adding number conversion cast (unumber) $37 in *((const byte*) PROCPORT) ← (nu Adding number conversion cast (unumber) $19 in *((const byte*) D018) ← (number) $19 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $32 -Inlining cast (byte) main::bits_gen#0 ← (unumber)(number) 0 Inlining cast *((const byte*) PROCPORT) ← (unumber)(number) $37 Inlining cast *((const byte*) D018) ← (unumber)(number) $19 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 1 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $32 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $60 Simplifying constant integer cast $60 @@ -406,7 +387,6 @@ Simplifying constant integer cast $37 Simplifying constant integer cast $19 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $32 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $60 Finalized unsigned number type (byte) $60 diff --git a/src/test/ref/helloworld2-inline.log b/src/test/ref/helloworld2-inline.log index 00a4aed4c..ffe72ca60 100644 --- a/src/test/ref/helloworld2-inline.log +++ b/src/test/ref/helloworld2-inline.log @@ -28,8 +28,8 @@ main: scope:[main] from @2 main::print21: scope:[main] from main (byte*) main::print21_at#3 ← phi( main/(byte*) main::print21_at#0 ) (byte*) main::print21_msg#3 ← phi( main/(byte*) main::print21_msg#0 ) - (byte) main::print21_j#0 ← (number) 0 - (byte) main::print21_i#0 ← (number) 0 + (byte) main::print21_j#0 ← (byte) 0 + (byte) main::print21_i#0 ← (byte) 0 to:main::print21_@1 main::print21_@1: scope:[main] from main::print21 main::print21_@2 (byte) main::print21_j#3 ← phi( main::print21/(byte) main::print21_j#0 main::print21_@2/(byte) main::print21_j#1 ) @@ -56,8 +56,8 @@ main::@1: scope:[main] from main::print21_@1 main::print22: scope:[main] from main::@1 (byte*) main::print22_at#3 ← phi( main::@1/(byte*) main::print22_at#0 ) (byte*) main::print22_msg#3 ← phi( main::@1/(byte*) main::print22_msg#0 ) - (byte) main::print22_j#0 ← (number) 0 - (byte) main::print22_i#0 ← (number) 0 + (byte) main::print22_j#0 ← (byte) 0 + (byte) main::print22_i#0 ← (byte) 0 to:main::print22_@1 main::print22_@1: scope:[main] from main::print22 main::print22_@2 (byte) main::print22_j#3 ← phi( main::print22/(byte) main::print22_j#0 main::print22_@2/(byte) main::print22_j#1 ) @@ -146,40 +146,23 @@ SYMBOL TABLE SSA (byte*) main::print22_msg#3 (const byte*) screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::print21_j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::print21_i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::print21_$0 ← (number) 0 != *((byte*) main::print21_msg#1 + (byte) main::print21_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print21_j#1 ← (byte) main::print21_j#2 + (number) 2 Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (const byte*) screen + (number) $50 -Adding number conversion cast (unumber) 0 in (byte) main::print22_j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::print22_i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::print22_$0 ← (number) 0 != *((byte*) main::print22_msg#1 + (byte) main::print22_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print22_j#1 ← (byte) main::print22_j#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::print21_j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::print21_i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::print22_j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::print22_i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $50 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) main::print21_msg#0 = (byte*) main::print21_msg#3 diff --git a/src/test/ref/helloworld2.log b/src/test/ref/helloworld2.log index f2de53873..cc9cbf3f9 100644 --- a/src/test/ref/helloworld2.log +++ b/src/test/ref/helloworld2.log @@ -33,8 +33,8 @@ main::@return: scope:[main] from main::@2 print2: scope:[print2] from main main::@1 (byte*) print2::at#4 ← phi( main/(byte*) print2::at#0 main::@1/(byte*) print2::at#1 ) (byte*) print2::msg#4 ← phi( main/(byte*) print2::msg#0 main::@1/(byte*) print2::msg#1 ) - (byte) print2::j#0 ← (number) 0 - (byte) print2::i#0 ← (number) 0 + (byte) print2::j#0 ← (byte) 0 + (byte) print2::i#0 ← (byte) 0 to:print2::@1 print2::@1: scope:[print2] from print2 print2::@2 (byte) print2::j#3 ← phi( print2/(byte) print2::j#0 print2::@2/(byte) print2::j#1 ) @@ -104,25 +104,16 @@ SYMBOL TABLE SSA (const byte*) screen = (byte*)(number) $400 Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (const byte*) screen + (number) $50 -Adding number conversion cast (unumber) 0 in (byte) print2::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) print2::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print2::$0 ← (number) 0 != *((byte*) print2::msg#2 + (byte) print2::i#2) Adding number conversion cast (unumber) 2 in (byte) print2::j#1 ← (byte) print2::j#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) print2::j#0 ← (unumber)(number) 0 -Inlining cast (byte) print2::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $50 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) print2::at#1 = (byte*~) main::$1 diff --git a/src/test/ref/hex2dec-ptrptr.log b/src/test/ref/hex2dec-ptrptr.log index c6feb5880..0ad59927f 100644 --- a/src/test/ref/hex2dec-ptrptr.log +++ b/src/test/ref/hex2dec-ptrptr.log @@ -77,7 +77,7 @@ cls::@return: scope:[cls] from cls::@1 utoa16w: scope:[utoa16w] from main::@1 main::@2 main::@3 main::@4 main::@5 (byte*) utoa16w::dst#5 ← phi( main::@1/(byte*) utoa16w::dst#0 main::@2/(byte*) utoa16w::dst#1 main::@3/(byte*) utoa16w::dst#2 main::@4/(byte*) utoa16w::dst#3 main::@5/(byte*) utoa16w::dst#4 ) (word) utoa16w::value#5 ← phi( main::@1/(word) utoa16w::value#0 main::@2/(word) utoa16w::value#1 main::@3/(word) utoa16w::value#2 main::@4/(word) utoa16w::value#3 main::@5/(word) utoa16w::value#4 ) - (byte) utoa16w::started#0 ← (number) 0 + (byte) utoa16w::started#0 ← (byte) 0 (byte~) utoa16w::$0 ← > (word) utoa16w::value#5 (byte~) utoa16w::$1 ← (byte~) utoa16w::$0 >> (number) 4 (byte) utoa16n::nybble#0 ← (byte~) utoa16w::$1 @@ -318,7 +318,6 @@ Adding number conversion cast (unumber) $270f in (word) utoa16w::value#3 ← (nu Adding number conversion cast (unumber) $28 in (byte*) main::screen#4 ← (byte*) main::screen#8 + (number) $28 Adding number conversion cast (unumber) $e608 in (word) utoa16w::value#4 ← (number) $e608 Adding number conversion cast (unumber) $3e7 in (byte*~) cls::$0 ← (const byte*) cls::screen + (number) $3e7 -Adding number conversion cast (unumber) 0 in (byte) utoa16w::started#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (byte~) utoa16w::$1 ← (byte~) utoa16w::$0 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) utoa16w::$4 ← (byte~) utoa16w::$3 & (number) $f Adding number conversion cast (unumber) utoa16w::$4 in (number~) utoa16w::$4 ← (byte~) utoa16w::$3 & (unumber)(number) $f @@ -336,7 +335,6 @@ Inlining cast (word) utoa16w::value#1 ← (unumber)(number) $4d2 Inlining cast (word) utoa16w::value#2 ← (unumber)(number) $162e Inlining cast (word) utoa16w::value#3 ← (unumber)(number) $270f Inlining cast (word) utoa16w::value#4 ← (unumber)(number) $e608 -Inlining cast (byte) utoa16w::started#0 ← (unumber)(number) 0 Inlining cast (byte) utoa16n::started#3 ← (unumber)(number) 1 Inlining cast *((byte*) utoa16w::dst#9) ← (unumber)(number) 0 Inlining cast (byte) utoa16n::started#4 ← (unumber)(number) 1 @@ -353,7 +351,6 @@ Simplifying constant integer cast $270f Simplifying constant integer cast $28 Simplifying constant integer cast $e608 Simplifying constant integer cast $3e7 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 4 @@ -374,7 +371,6 @@ Finalized unsigned number type (word) $270f Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $e608 Finalized unsigned number type (word) $3e7 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 4 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 91647605a..e315bf7d1 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -106,7 +106,7 @@ main::@20: scope:[main] from main::@19 to:main::@21 main::@21: scope:[main] from main::@20 (byte*) main::screen#12 ← phi( main::@20/(byte*) main::screen#9 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@6 main::@6: scope:[main] from main::@21 main::@7 (byte*) main::screen#11 ← phi( main::@21/(byte*) main::screen#12 main::@7/(byte*) main::screen#10 ) @@ -146,8 +146,8 @@ cls::@return: scope:[cls] from cls::@1 utoa10w: scope:[utoa10w] from main::@20 (byte*) utoa10w::dst#10 ← phi( main::@20/(byte*) utoa10w::dst#0 ) (word) utoa10w::value#5 ← phi( main::@20/(word) utoa10w::value#0 ) - (byte) utoa10w::bStarted#0 ← (number) 0 - (byte) utoa10w::digit#0 ← (number) 0 + (byte) utoa10w::bStarted#0 ← (byte) 0 + (byte) utoa10w::digit#0 ← (byte) 0 (byte) utoa10w::i#0 ← (byte) 0 to:utoa10w::@2 utoa10w::@2: scope:[utoa10w] from utoa10w utoa10w::@10 utoa10w::@3 @@ -233,7 +233,7 @@ utoa10w::@return: scope:[utoa10w] from utoa10w::@12 utoa16w: scope:[utoa16w] from main::@16 main::@17 main::@18 main::@19 main::@5 (byte*) utoa16w::dst#5 ← phi( main::@16/(byte*) utoa16w::dst#1 main::@17/(byte*) utoa16w::dst#2 main::@18/(byte*) utoa16w::dst#3 main::@19/(byte*) utoa16w::dst#4 main::@5/(byte*) utoa16w::dst#0 ) (word) utoa16w::value#5 ← phi( main::@16/(word) utoa16w::value#1 main::@17/(word) utoa16w::value#2 main::@18/(word) utoa16w::value#3 main::@19/(word) utoa16w::value#4 main::@5/(word) utoa16w::value#0 ) - (byte) utoa16w::started#0 ← (number) 0 + (byte) utoa16w::started#0 ← (byte) 0 (byte~) utoa16w::$0 ← > (word) utoa16w::value#5 (byte~) utoa16w::$1 ← (byte~) utoa16w::$0 >> (number) 4 (byte) utoa16n::nybble#0 ← (byte~) utoa16w::$1 @@ -344,8 +344,8 @@ SYMBOL TABLE SSA (label) @end (const byte*) DIGITS[] = (string) "0123456789abcdef" (const byte) SIZEOF_WORD = (byte) 2 -(const word*) UTOA10_SUB[] = { (word)(number) $7530, (word)(number) $2710, (word)(number) $bb8, (word)(number) $3e8, (word)(number) $12c, (word)(number) $64, (word)(number) $1e, (word)(number) $a } -(const byte*) UTOA10_VAL[] = { (byte)(number) 3, (byte)(number) 1, (byte)(number) 3, (byte)(number) 1, (byte)(number) 3, (byte)(number) 1, (byte)(number) 3, (byte)(number) 1 } +(const word*) UTOA10_SUB[] = { (word) $7530, (word) $2710, (word) $bb8, (word) $3e8, (word) $12c, (word) $64, (word) $1e, (word) $a } +(const byte*) UTOA10_VAL[] = { (byte) 3, (byte) 1, (byte) 3, (byte) 1, (byte) 3, (byte) 1, (byte) 3, (byte) 1 } (const byte*) bordercol = (byte*)(number) $d020 (void()) cls() (byte*~) cls::$0 @@ -600,13 +600,10 @@ Adding number conversion cast (unumber) $28 in (byte*) main::screen#4 ← (byte* Adding number conversion cast (unumber) $e608 in (word) utoa16w::value#4 ← (number) $e608 Adding number conversion cast (unumber) 0 in *((const byte*) bordercol) ← (number) 0 Adding number conversion cast (unumber) $50 in (byte*~) main::$16 ← (byte*) main::screen#9 + (number) $50 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← *((const byte*) main::msg + (byte) main::i#2) != (number) 0 Adding number conversion cast (unumber) $50 in (byte*~) main::$19 ← (byte*) main::screen#10 + (number) $50 Adding number conversion cast (unumber) 3 in (byte*~) main::$20 ← (byte*~) main::$19 + (number) 3 Adding number conversion cast (unumber) $3e7 in (byte*~) cls::$0 ← (const byte*) cls::screen + (number) $3e7 -Adding number conversion cast (unumber) 0 in (byte) utoa10w::bStarted#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) utoa10w::digit#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) utoa10w::bStarted#1 ← (number) 1 Adding number conversion cast (unumber) 1 in (number~) utoa10w::$2 ← (byte) utoa10w::i#4 & (number) 1 Adding number conversion cast (unumber) utoa10w::$2 in (number~) utoa10w::$2 ← (byte) utoa10w::i#4 & (unumber)(number) 1 @@ -614,7 +611,6 @@ Adding number conversion cast (unumber) 0 in (bool~) utoa10w::$3 ← (unumber~) Adding number conversion cast (unumber) 0 in (bool~) utoa10w::$5 ← (byte) utoa10w::bStarted#2 != (number) 0 Adding number conversion cast (unumber) 0 in (byte) utoa10w::digit#2 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) utoa10w::dst#2) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) utoa16w::started#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (byte~) utoa16w::$1 ← (byte~) utoa16w::$0 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) utoa16w::$4 ← (byte~) utoa16w::$3 & (number) $f Adding number conversion cast (unumber) utoa16w::$4 in (number~) utoa16w::$4 ← (byte~) utoa16w::$3 & (unumber)(number) $f @@ -635,14 +631,10 @@ Inlining cast (word) utoa16w::value#3 ← (unumber)(number) $270f Inlining cast (word) utoa16w::value#4 ← (unumber)(number) $e608 Inlining cast *((const byte*) bordercol) ← (unumber)(number) 0 Inlining cast (word~) main::$15 ← (word)(byte) main::time#0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) utoa10w::bStarted#0 ← (unumber)(number) 0 -Inlining cast (byte) utoa10w::digit#0 ← (unumber)(number) 0 Inlining cast (byte) utoa10w::bStarted#1 ← (unumber)(number) 1 Inlining cast (byte) utoa10w::digit#2 ← (unumber)(number) 0 Inlining cast (byte~) utoa10w::$0 ← (byte)(word) utoa10w::value#4 Inlining cast *((byte*) utoa10w::dst#2) ← (unumber)(number) 0 -Inlining cast (byte) utoa16w::started#0 ← (unumber)(number) 0 Inlining cast (byte) utoa16n::started#3 ← (unumber)(number) 1 Inlining cast *((byte*) utoa16w::dst#9) ← (unumber)(number) 0 Inlining cast (byte) utoa16n::started#4 ← (unumber)(number) 1 @@ -651,22 +643,6 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $7530 -Simplifying constant integer cast $2710 -Simplifying constant integer cast $bb8 -Simplifying constant integer cast $3e8 -Simplifying constant integer cast $12c -Simplifying constant integer cast $64 -Simplifying constant integer cast $1e -Simplifying constant integer cast $a -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast $30 @@ -684,19 +660,15 @@ Simplifying constant integer cast $e608 Simplifying constant integer cast 0 Simplifying constant integer cast $50 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $50 Simplifying constant integer cast 3 Simplifying constant integer cast $3e7 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 4 @@ -723,19 +695,15 @@ Finalized unsigned number type (word) $e608 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 3 Finalized unsigned number type (word) $3e7 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 4 diff --git a/src/test/ref/ifmin.log b/src/test/ref/ifmin.log index 99d4a6d0e..925c1d794 100644 --- a/src/test/ref/ifmin.log +++ b/src/test/ref/ifmin.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -56,18 +56,13 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $32 in (bool~) main::$0 ← (byte) main::i#2 < (number) $32 Adding number conversion cast (unumber) $64 in (bool~) main::$2 ← (byte) main::i#1 < (number) $64 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $32 Simplifying constant integer cast $64 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) $64 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/importing.log b/src/test/ref/importing.log index f48895b7f..b8b422bbc 100644 --- a/src/test/ref/importing.log +++ b/src/test/ref/importing.log @@ -25,7 +25,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) main() (label) main::@return (const byte*) main::screen = (byte*)(number) $400 @@ -197,7 +197,7 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) main() (label) main::@return (const byte*) main::screen = (byte*) 1024 diff --git a/src/test/ref/importing.sym b/src/test/ref/importing.sym index bc817a80e..8361978ff 100644 --- a/src/test/ref/importing.sym +++ b/src/test/ref/importing.sym @@ -2,7 +2,7 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (void()) main() (label) main::@return (const byte*) main::screen = (byte*) 1024 diff --git a/src/test/ref/infloop-error.log b/src/test/ref/infloop-error.log index a9d4ee3f5..6a98d3aa6 100644 --- a/src/test/ref/infloop-error.log +++ b/src/test/ref/infloop-error.log @@ -10,9 +10,9 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::min#0 ← (number) $ff - (byte) main::max#0 ← (number) 0 - (byte) main::pos#0 ← (number) 0 + (byte) main::min#0 ← (byte) $ff + (byte) main::max#0 ← (byte) 0 + (byte) main::pos#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::max#6 ← phi( main/(byte) main::max#0 main::@5/(byte) main::max#3 ) @@ -109,28 +109,15 @@ SYMBOL TABLE SSA (byte) main::pos#6 (byte) main::pos#7 -Adding number conversion cast (unumber) $ff in (byte) main::min#0 ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) main::max#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::pos#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (byte) main::min#3 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← (byte) main::max#3 Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2) ← (byte) main::pos#5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::min#0 ← (unumber)(number) $ff -Inlining cast (byte) main::max#0 ← (unumber)(number) 0 -Inlining cast (byte) main::pos#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/init-volatiles.log b/src/test/ref/init-volatiles.log index 181d11de6..4729931bb 100644 --- a/src/test/ref/init-volatiles.log +++ b/src/test/ref/init-volatiles.log @@ -5,7 +5,7 @@ Culled Empty Block (label) main::@6 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) x ← (number) $c + (byte) x ← (byte) $c to:@1 (void()) main() @@ -41,18 +41,14 @@ SYMBOL TABLE SSA (label) main::@return (byte) x loadstore -Adding number conversion cast (unumber) $c in (byte) x ← (number) $c Adding number conversion cast (unumber) $32 in (bool~) main::$0 ← (byte) x < (number) $32 Adding number conversion cast (unumber) 0 in (byte) x ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) x ← (unumber)(number) $c Inlining cast (byte) x ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $c Simplifying constant integer cast $32 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $c Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/initializer-0.log b/src/test/ref/initializer-0.log index eefc73384..acf586e35 100644 --- a/src/test/ref/initializer-0.log +++ b/src/test/ref/initializer-0.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -33,7 +33,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte*) chars[] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 3 } +(const byte*) chars[] = { (byte) 1, (byte) 2, (byte) 3 } (void()) main() (bool~) main::$0 (label) main::@1 @@ -48,18 +48,8 @@ SYMBOL TABLE SSA (byte) main::idx#1 (byte) main::idx#2 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,2)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::idx#0 = 0 diff --git a/src/test/ref/initializer-1.log b/src/test/ref/initializer-1.log index d82631be6..89e940c3a 100644 --- a/src/test/ref/initializer-1.log +++ b/src/test/ref/initializer-1.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -60,20 +60,10 @@ SYMBOL TABLE SSA (byte) main::idx#1 (byte) main::idx#2 (byte) main::idx#3 -(const word*) words[] = { (word)(number) 1, (word)(number) 2, (word)(number) 3 } +(const word*) words[] = { (word) 1, (word) 2, (word) 3 } -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Identified duplicate assignment right side [7] (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) main::$2 [13] if((byte) main::i#1!=rangelast(0,2)) goto main::@1 diff --git a/src/test/ref/initializer-2.log b/src/test/ref/initializer-2.log index aefb18074..8eb4befd3 100644 --- a/src/test/ref/initializer-2.log +++ b/src/test/ref/initializer-2.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -66,23 +66,10 @@ SYMBOL TABLE SSA (byte) main::idx#1 (byte) main::idx#2 (byte) main::idx#3 -(const struct Point*) points[] = { { x: (byte)(number) 1, y: (byte)(number) 2 }, { x: (byte)(number) 3, y: (byte)(number) 4 }, { x: (byte)(number) 5, y: (byte)(number) 6 } } +(const struct Point*) points[] = { { x: (byte) 1, y: (byte) 2 }, { x: (byte) 3, y: (byte) 4 }, { x: (byte) 5, y: (byte) 6 } } -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Identified duplicate assignment right side [7] (byte~) main::$2 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT Successful SSA optimization Pass2DuplicateRValueIdentification Simple Condition (bool~) main::$0 [13] if((byte) main::i#1!=rangelast(0,2)) goto main::@1 diff --git a/src/test/ref/initializer-3.log b/src/test/ref/initializer-3.log index 9e2110bf9..fec195e74 100644 --- a/src/test/ref/initializer-3.log +++ b/src/test/ref/initializer-3.log @@ -12,7 +12,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -79,23 +79,10 @@ SYMBOL TABLE SSA (byte) main::idx#2 (byte) main::idx#3 (byte) main::idx#4 -(const struct Point*) points[] = { { x: (byte)(number) 1, y: (signed word)(number) 2 }, { x: (byte)(number) 3, y: (signed word)(number) 4 }, { x: (byte)(number) 5, y: (signed word)(number) 6 } } +(const struct Point*) points[] = { { x: (byte) 1, y: (signed word) 2 }, { x: (byte) 3, y: (signed word) 4 }, { x: (byte) 5, y: (signed word) 6 } } -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Identified duplicate assignment right side [7] (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT Identified duplicate assignment right side [12] (byte~) main::$5 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT Successful SSA optimization Pass2DuplicateRValueIdentification diff --git a/src/test/ref/inline-dword-0.log b/src/test/ref/inline-dword-0.log index cae9d2090..2cde2b315 100644 --- a/src/test/ref/inline-dword-0.log +++ b/src/test/ref/inline-dword-0.log @@ -31,13 +31,11 @@ SYMBOL TABLE SSA (number~) main::$0 (label) main::@return (const dword*) main::screen = (dword*)(number) $400 -(const dword) main::w = (word)(number) $1234*(dword) $10000+(word)(number) $5678 +(const dword) main::w = (word) $1234*(dword) $10000+(word) $5678 Adding number conversion cast (unumber) 0 in (number~) main::$0 ← (number) 0 * (const byte) SIZEOF_DWORD Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) 0 * (const byte) SIZEOF_DWORD Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast $1234 -Simplifying constant integer cast $5678 Simplifying constant pointer cast (dword*) 1024 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/inline-function-level2.log b/src/test/ref/inline-function-level2.log index 5bea8f504..0e370f299 100644 --- a/src/test/ref/inline-function-level2.log +++ b/src/test/ref/inline-function-level2.log @@ -51,8 +51,8 @@ main::line1: scope:[main] from main::@3 (byte) main::line1_ysize#3 ← phi( main::@3/(byte) main::line1_ysize#0 ) (byte) main::line1_xpos#1 ← phi( main::@3/(byte) main::line1_xpos#0 ) (byte*) cur_line#0 ← ((byte*)) (number) $400 - (word) main::line1_pos#0 ← ((word)) { (byte) main::line1_xpos#1, (byte)(number) 0 } - (byte) main::line1_i#0 ← (number) 0 + (word) main::line1_pos#0 ← (word){ (byte) main::line1_xpos#1, (byte) 0 } + (byte) main::line1_i#0 ← (byte) 0 to:main::line1_@1 main::line1_@1: scope:[main] from main::@8 main::line1 (byte) main::line1_xadd#4 ← phi( main::@8/(byte) main::line1_xadd#1 main::line1/(byte) main::line1_xadd#5 ) @@ -110,8 +110,8 @@ main::line2: scope:[main] from main::@7 (byte) main::line2_ysize#3 ← phi( main::@7/(byte) main::line2_ysize#0 ) (byte) main::line2_xpos#1 ← phi( main::@7/(byte) main::line2_xpos#0 ) (byte*) cur_line#2 ← ((byte*)) (number) $400 - (word) main::line2_pos#0 ← ((word)) { (byte) main::line2_xpos#1, (byte)(number) 0 } - (byte) main::line2_i#0 ← (number) 0 + (word) main::line2_pos#0 ← (word){ (byte) main::line2_xpos#1, (byte) 0 } + (byte) main::line2_i#0 ← (byte) 0 to:main::line2_@1 main::line2_@1: scope:[main] from main::@10 main::line2 (byte) main::line2_xadd#4 ← phi( main::@10/(byte) main::line2_xadd#1 main::line2/(byte) main::line2_xadd#5 ) @@ -317,31 +317,27 @@ SYMBOL TABLE SSA (byte*) main::sc#2 (byte*) main::sc#3 -Fixing inline constructor with main::$3 ← (byte)main::line1_xpos#1 w= (byte)(byte)0 -Fixing inline constructor with main::$4 ← (byte)main::line2_xpos#1 w= (byte)(byte)0 +Fixing inline constructor with main::$3 ← (byte)main::line1_xpos#1 w= (byte)0 +Fixing inline constructor with main::$4 ← (byte)main::line2_xpos#1 w= (byte)0 Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) $400+$3e8 in (bool~) main::$2 ← (byte*) main::sc#2 < (number) $400+(number) $3e8 Adding number conversion cast (unumber) 2 in (byte) main::line1_xpos#0 ← (number) 2 Adding number conversion cast (unumber) $40 in (byte) main::line1_xadd#0 ← (number) $40 Adding number conversion cast (unumber) $a in (byte) main::line1_ysize#0 ← (number) $a -Adding number conversion cast (unumber) 0 in (byte) main::line1_i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) cur_line#1 ← (byte*) cur_line#8 + (number) $28 Adding number conversion cast (unumber) 4 in (byte) main::line2_xpos#0 ← (number) 4 Adding number conversion cast (unumber) $80 in (byte) main::line2_xadd#0 ← (number) $80 Adding number conversion cast (unumber) $f in (byte) main::line2_ysize#0 ← (number) $f -Adding number conversion cast (unumber) 0 in (byte) main::line2_i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) cur_line#3 ← (byte*) cur_line#10 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) main::line1_xpos#0 ← (unumber)(number) 2 Inlining cast (byte) main::line1_xadd#0 ← (unumber)(number) $40 Inlining cast (byte) main::line1_ysize#0 ← (unumber)(number) $a Inlining cast (byte*) cur_line#0 ← (byte*)(number) $400 -Inlining cast (byte) main::line1_i#0 ← (unumber)(number) 0 Inlining cast (byte) main::line2_xpos#0 ← (unumber)(number) 4 Inlining cast (byte) main::line2_xadd#0 ← (unumber)(number) $80 Inlining cast (byte) main::line2_ysize#0 ← (unumber)(number) $f Inlining cast (byte*) cur_line#2 ← (byte*)(number) $400 -Inlining cast (byte) main::line2_i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 2 @@ -349,31 +345,24 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $a Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast (byte) main::line1_xpos#1 -Simplifying constant integer cast (byte)(number) 0 -Simplifying constant integer cast 0 +Simplifying constant integer cast (byte) 0 Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $80 Simplifying constant integer cast $f Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast (byte) main::line2_xpos#1 -Simplifying constant integer cast (byte)(number) 0 -Simplifying constant integer cast 0 +Simplifying constant integer cast (byte) 0 Simplifying constant integer cast $28 Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) main::sc#2 = (byte*) main::sc#3 diff --git a/src/test/ref/inline-function-print.log b/src/test/ref/inline-function-print.log index 5a2c7a64b..196ca47d3 100644 --- a/src/test/ref/inline-function-print.log +++ b/src/test/ref/inline-function-print.log @@ -28,8 +28,8 @@ main: scope:[main] from @2 main::print1: scope:[main] from main (byte*) main::print1_at#3 ← phi( main/(byte*) main::print1_at#0 ) (byte*) main::print1_msg#3 ← phi( main/(byte*) main::print1_msg#0 ) - (byte) main::print1_j#0 ← (number) 0 - (byte) main::print1_i#0 ← (number) 0 + (byte) main::print1_j#0 ← (byte) 0 + (byte) main::print1_i#0 ← (byte) 0 to:main::print1_@1 main::print1_@1: scope:[main] from main::print1 main::print1_@2 (byte) main::print1_j#3 ← phi( main::print1/(byte) main::print1_j#0 main::print1_@2/(byte) main::print1_j#1 ) @@ -56,8 +56,8 @@ main::@1: scope:[main] from main::print1_@1 main::print2: scope:[main] from main::@1 (byte*) main::print2_at#3 ← phi( main::@1/(byte*) main::print2_at#0 ) (byte*) main::print2_msg#3 ← phi( main::@1/(byte*) main::print2_msg#0 ) - (byte) main::print2_j#0 ← (number) 0 - (byte) main::print2_i#0 ← (number) 0 + (byte) main::print2_j#0 ← (byte) 0 + (byte) main::print2_i#0 ← (byte) 0 to:main::print2_@1 main::print2_@1: scope:[main] from main::print2 main::print2_@2 (byte) main::print2_j#3 ← phi( main::print2/(byte) main::print2_j#0 main::print2_@2/(byte) main::print2_j#1 ) @@ -146,38 +146,21 @@ SYMBOL TABLE SSA (byte*) main::print2_msg#3 (const byte*) screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::print1_j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::print1_i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::print1_$0 ← (number) 0 != *((byte*) main::print1_msg#1 + (byte) main::print1_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (number) 2 Adding number conversion cast (unumber) 2*$28 in (byte*~) main::$1 ← (const byte*) screen + (number) 2*(number) $28 -Adding number conversion cast (unumber) 0 in (byte) main::print2_j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::print2_i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::print2_$0 ← (number) 0 != *((byte*) main::print2_msg#1 + (byte) main::print2_i#2) Adding number conversion cast (unumber) 2 in (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::print1_j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::print1_i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::print2_j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::print2_i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) main::print1_msg#0 = (byte*) main::print1_msg#3 diff --git a/src/test/ref/inline-word-1.log b/src/test/ref/inline-word-1.log index 70dd1825a..80c098cff 100644 --- a/src/test/ref/inline-word-1.log +++ b/src/test/ref/inline-word-1.log @@ -31,13 +31,11 @@ SYMBOL TABLE SSA (number~) main::$0 (label) main::@return (const word*) main::screen = (word*)(number) $400 -(const word) main::w = (byte)(number) 1*(word) $100+(byte)(number) 2 +(const word) main::w = (byte) 1*(word) $100+(byte) 2 Adding number conversion cast (unumber) 0 in (number~) main::$0 ← (number) 0 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) 0 * (const byte) SIZEOF_WORD Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/inline-word-2.log b/src/test/ref/inline-word-2.log index eeaec169d..80c098cff 100644 --- a/src/test/ref/inline-word-2.log +++ b/src/test/ref/inline-word-2.log @@ -31,12 +31,11 @@ SYMBOL TABLE SSA (number~) main::$0 (label) main::@return (const word*) main::screen = (word*)(number) $400 -(const word) main::w = (byte)(number) 1*(word) $100+(byte) 2 +(const word) main::w = (byte) 1*(word) $100+(byte) 2 Adding number conversion cast (unumber) 0 in (number~) main::$0 ← (number) 0 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) 0 * (const byte) SIZEOF_WORD Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 1 Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/inline-word.log b/src/test/ref/inline-word.log index 07fd98523..139142c35 100644 --- a/src/test/ref/inline-word.log +++ b/src/test/ref/inline-word.log @@ -15,7 +15,7 @@ main::@1: scope:[main] from main main::@3 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) (byte) main::h#2 ← phi( main::@1/(byte) main::h#4 main::@2/(byte) main::h#2 ) - (word) main::w#0 ← ((word)) { *((const byte*) main::his + (byte) main::h#2), (byte) main::l#2 } + (word) main::w#0 ← (word){ *((const byte*) main::his + (byte) main::h#2), (byte) main::l#2 } (byte*~) main::$0 ← ((byte*)) (word) main::w#0 (byte*) main::sc#0 ← (byte*~) main::$0 *((byte*) main::sc#0) ← (byte) '*' diff --git a/src/test/ref/inlinearrayproblem.log b/src/test/ref/inlinearrayproblem.log index b4f9e7b3b..c5ce26800 100644 --- a/src/test/ref/inlinearrayproblem.log +++ b/src/test/ref/inlinearrayproblem.log @@ -39,16 +39,13 @@ SYMBOL TABLE SSA (bool~) main::$0 (label) main::@1 (label) main::@return -(const byte*) main::data[] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 3 } +(const byte*) main::data[] = { (byte) 1, (byte) 2, (byte) 3 } (byte) main::i (byte) main::i#0 (byte) main::i#1 (byte) main::i#2 (const byte*) main::txt[] = (string) "qwe"z -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification Simple Condition (bool~) main::$0 [6] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 diff --git a/src/test/ref/inmem-const-array.log b/src/test/ref/inmem-const-array.log index 199c4420c..dc06c8b55 100644 --- a/src/test/ref/inmem-const-array.log +++ b/src/test/ref/inmem-const-array.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 @@ -47,9 +47,9 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte) GREEN = (number) 5 -(const byte) RED = (number) 2 -(const byte) WHITE = (number) 1 +(const byte) GREEN = (byte) 5 +(const byte) RED = (byte) 2 +(const byte) WHITE = (byte) 1 (void()) main() (bool~) main::$0 (bool~) main::$1 @@ -74,20 +74,16 @@ SYMBOL TABLE SSA (byte) main::j#4 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (bool~) main::$0 ← (byte) main::j#1 == (number) 3 Adding number conversion cast (unumber) 0 in (byte) main::j#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast (byte) main::j#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions @@ -436,9 +432,9 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) GREEN = (number) 5 -(const byte) RED = (number) 2 -(const byte) WHITE = (number) 1 +(const byte) GREEN = (byte) 5 +(const byte) RED = (byte) 2 +(const byte) WHITE = (byte) 1 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/inmem-const-array.sym b/src/test/ref/inmem-const-array.sym index 11c47ad73..986556e45 100644 --- a/src/test/ref/inmem-const-array.sym +++ b/src/test/ref/inmem-const-array.sym @@ -1,9 +1,9 @@ (label) @1 (label) @begin (label) @end -(const byte) GREEN = (number) 5 -(const byte) RED = (number) 2 -(const byte) WHITE = (number) 1 +(const byte) GREEN = (byte) 5 +(const byte) RED = (byte) 2 +(const byte) WHITE = (byte) 1 (void()) main() (label) main::@1 (label) main::@2 diff --git a/src/test/ref/inmemarray.log b/src/test/ref/inmemarray.log index 7a123182e..ee23043c7 100644 --- a/src/test/ref/inmemarray.log +++ b/src/test/ref/inmemarray.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 @@ -46,7 +46,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) SCREEN = (byte*)(number) $400 -(const byte*) TXT[] = { (byte)(number) 3, (byte)(number) 1, (byte)(number) $d, (byte)(number) 5, (byte)(number) $c, (byte)(number) $f, (byte)(number) $14, (byte)(number) $20 } +(const byte*) TXT[] = { (byte) 3, (byte) 1, (byte) $d, (byte) 5, (byte) $c, (byte) $f, (byte) $14, (byte) $20 } (void()) main() (bool~) main::$0 (bool~) main::$1 @@ -68,27 +68,15 @@ SYMBOL TABLE SSA (byte) main::j#3 (byte) main::j#4 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) main::$0 ← (byte) main::j#1 == (number) 8 Adding number conversion cast (unumber) 0 in (byte) main::j#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast (byte) main::j#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast $d -Simplifying constant integer cast 5 -Simplifying constant integer cast $c -Simplifying constant integer cast $f -Simplifying constant integer cast $14 -Simplifying constant integer cast $20 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/inmemstring.log b/src/test/ref/inmemstring.log index dd946f3e7..20b0b131c 100644 --- a/src/test/ref/inmemstring.log +++ b/src/test/ref/inmemstring.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 (byte*) main::cursor#0 ← (const byte*) SCREEN - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) @@ -70,21 +70,17 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) main::$0 ← (byte) main::i#1 == (number) 8 Adding number conversion cast (unumber) $3e8 in (byte*~) main::$2 ← (const byte*) SCREEN + (number) $3e8 Adding number conversion cast (unumber) 0 in (byte) main::i#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) main::i#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/interrupt-volatile-reuse-problem1.log b/src/test/ref/interrupt-volatile-reuse-problem1.log index d45155980..043565e7c 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem1.log +++ b/src/test/ref/interrupt-volatile-reuse-problem1.log @@ -3,8 +3,8 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) col1 ← (number) 0 - (byte) col2 ← (number) 8 + (byte) col1 ← (byte) 0 + (byte) col2 ← (byte) 8 to:@2 (void()) main() @@ -46,23 +46,14 @@ interrupt(KERNEL_MIN)(void()) irq() (void()) main() (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) col1 ← (number) 0 -Adding number conversion cast (unumber) 8 in (byte) col2 ← (number) 8 Adding number conversion cast (unumber) $28 in *((const byte*) SCREEN + (number) $28) ← (byte) col1 Adding number conversion cast (unumber) $29 in *((const byte*) SCREEN + (number) $29) ← (byte) col2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) col1 ← (unumber)(number) 0 -Inlining cast (byte) col2 ← (unumber)(number) 8 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 8 Simplifying constant integer cast $28 Simplifying constant integer cast $29 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $29 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index 606107342..01d07c86e 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -8,7 +8,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) col1 ← (number) 0 + (byte) col1 ← (byte) 0 to:@2 (void()) main() @@ -117,21 +117,17 @@ interrupt(KERNEL_MIN)(void()) irq() (byte) main::y#3 (byte) main::y#4 -Adding number conversion cast (unumber) 0 in (byte) col1 ← (number) 0 Adding number conversion cast (unumber) 1 in *((const byte*) IRQ_STATUS) ← (number) 1 Adding number conversion cast (unumber) $28 in *((const byte*) SCREEN + (number) $28) ← (byte) col1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) col1 ← (unumber)(number) 0 Inlining cast *((const byte*) IRQ_STATUS) ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index 1c00d2fae..4205040a5 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -69,21 +69,21 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) do_irq() (label) do_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() @@ -514,21 +514,21 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) do_irq() (label) do_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/irq-hardware-clobber-jsr.sym b/src/test/ref/irq-hardware-clobber-jsr.sym index 6789e4748..6c82cd02b 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.sym +++ b/src/test/ref/irq-hardware-clobber-jsr.sym @@ -2,21 +2,21 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) do_irq() (label) do_irq::@return interrupt(HARDWARE_CLOBBER)(void()) irq() diff --git a/src/test/ref/irq-hardware-clobber.log b/src/test/ref/irq-hardware-clobber.log index 49da35d05..218bc1bba 100644 --- a/src/test/ref/irq-hardware-clobber.log +++ b/src/test/ref/irq-hardware-clobber.log @@ -53,21 +53,21 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d020 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*)(number) $d021 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_CLOBBER)(void()) irq() (label) irq::@return (void()) main() @@ -444,21 +444,21 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_CLOBBER)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-hardware-clobber.sym b/src/test/ref/irq-hardware-clobber.sym index 49ef42c73..90b03d5e7 100644 --- a/src/test/ref/irq-hardware-clobber.sym +++ b/src/test/ref/irq-hardware-clobber.sym @@ -2,21 +2,21 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_CLOBBER)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-hardware-stack.log b/src/test/ref/irq-hardware-stack.log index 35e04a694..d087a0579 100644 --- a/src/test/ref/irq-hardware-stack.log +++ b/src/test/ref/irq-hardware-stack.log @@ -53,21 +53,21 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d020 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*)(number) $d021 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_STACK)(void()) irq() (label) irq::@return (void()) main() @@ -445,21 +445,21 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_STACK)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-hardware-stack.sym b/src/test/ref/irq-hardware-stack.sym index c288ae9d9..3f06206f8 100644 --- a/src/test/ref/irq-hardware-stack.sym +++ b/src/test/ref/irq-hardware-stack.sym @@ -2,21 +2,21 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_STACK)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-hardware.log b/src/test/ref/irq-hardware.log index 2ed7cd18b..90a87654e 100644 --- a/src/test/ref/irq-hardware.log +++ b/src/test/ref/irq-hardware.log @@ -53,21 +53,21 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d020 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*)(number) $d021 (const void()**) HARDWARE_IRQ = (void()**)(number) $fffe (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_ALL)(void()) irq() (label) irq::@return (void()) main() @@ -443,21 +443,21 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_ALL)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-hardware.sym b/src/test/ref/irq-hardware.sym index 7159f2b5f..c4b4cea5f 100644 --- a/src/test/ref/irq-hardware.sym +++ b/src/test/ref/irq-hardware.sym @@ -2,21 +2,21 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const void()**) HARDWARE_IRQ = (void()**) 65534 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) $35 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) $35 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(HARDWARE_ALL)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index fbbd571bb..148a1ed8b 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -30,7 +30,7 @@ main::@return: scope:[main] from main return to:@return @5: scope:[] from @begin - (byte) irq_idx ← (number) 0 + (byte) irq_idx ← (byte) 0 to:@6 interrupt(KERNEL_MIN)(void()) table_driven_irq() @@ -92,19 +92,19 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f -(const byte*) IRQ_CHANGE_IDX[] = { (byte)(number) $20, (byte)(number) $21, (const byte) IRQ_CHANGE_NEXT, (byte)(number) $20, (byte)(number) $21, (const byte) IRQ_CHANGE_NEXT, (byte)(number) $20, (byte)(number) $21, (const byte) IRQ_CHANGE_NEXT, (byte)(number) $20, (byte)(number) $21, (const byte) IRQ_CHANGE_NEXT } -(const byte) IRQ_CHANGE_NEXT = (number) $7f -(const byte*) IRQ_CHANGE_VAL[] = { (byte)(number) $b, (byte)(number) $b, (byte)(number) $63, (byte)(number) 0, (byte)(number) 0, (byte)(number) $80, (byte)(number) 7, (byte)(number) 7, (byte)(number) $83, (byte)(number) 0, (byte)(number) 0, (byte)(number) $60 } +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f +(const byte*) IRQ_CHANGE_IDX[] = { (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT } +(const byte) IRQ_CHANGE_NEXT = (byte) $7f +(const byte*) IRQ_CHANGE_VAL[] = { (byte) $b, (byte) $b, (byte) $63, (byte) 0, (byte) 0, (byte) $80, (byte) 7, (byte) 7, (byte) $83, (byte) 0, (byte) 0, (byte) $60 } (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $400 (const byte*) VIC_BASE = (byte*)(number) $d000 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_SIZE = (number) $30 +(const byte) VIC_SIZE = (byte) $30 (byte) irq_idx loadstore (void()) main() (label) main::@return @@ -137,7 +137,6 @@ interrupt(KERNEL_MIN)(void()) table_driven_irq() Adding number conversion cast (unumber) $7f in *((const byte*) VIC_CONTROL) ← *((const byte*) VIC_CONTROL) & (number) $7f Adding number conversion cast (unumber) $60 in *((const byte*) RASTER) ← (number) $60 -Adding number conversion cast (unumber) 0 in (byte) irq_idx ← (number) 0 Adding number conversion cast (unumber) VIC_SIZE+8 in (bool~) table_driven_irq::$1 ← (byte) table_driven_irq::idx#2 < (const byte) VIC_SIZE+(number) 8 Adding number conversion cast (unumber) 8 in (bool~) table_driven_irq::$1 ← (byte) table_driven_irq::idx#2 < (unumber)(const byte) VIC_SIZE+(number) 8 Adding number conversion cast (unumber) $3f8 in (number~) table_driven_irq::$4 ← (byte) table_driven_irq::idx#3 + (number) $3f8 @@ -147,7 +146,6 @@ Adding number conversion cast (unumber) 0 in (byte) irq_idx ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const byte*) RASTER) ← (unumber)(number) $60 Inlining cast (byte) irq_idx ← (unumber)(number) 0 -Inlining cast (byte) irq_idx ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53265 @@ -157,29 +155,8 @@ Simplifying constant pointer cast (byte*) 56333 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 53248 -Simplifying constant integer cast $20 -Simplifying constant integer cast $21 -Simplifying constant integer cast $20 -Simplifying constant integer cast $21 -Simplifying constant integer cast $20 -Simplifying constant integer cast $21 -Simplifying constant integer cast $20 -Simplifying constant integer cast $21 -Simplifying constant integer cast $b -Simplifying constant integer cast $b -Simplifying constant integer cast $63 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $80 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast $83 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $60 Simplifying constant integer cast $7f Simplifying constant integer cast $60 -Simplifying constant integer cast 0 Simplifying constant integer cast (const byte) VIC_SIZE+(unumber)(number) 8 Simplifying constant integer cast 8 Simplifying constant integer cast $3f8 @@ -187,7 +164,6 @@ Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $60 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 0 @@ -719,19 +695,19 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_CHANGE_IDX[] = { (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT } -(const byte) IRQ_CHANGE_NEXT = (number) $7f +(const byte) IRQ_CHANGE_NEXT = (byte) $7f (const byte*) IRQ_CHANGE_VAL[] = { (byte) $b, (byte) $b, (byte) $63, (byte) 0, (byte) 0, (byte) $80, (byte) 7, (byte) 7, (byte) $83, (byte) 0, (byte) 0, (byte) $60 } (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const byte*) VIC_BASE = (byte*) 53248 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_SIZE = (number) $30 +(const byte) VIC_SIZE = (byte) $30 (byte) irq_idx loadstore zp[1]:2 6.857142857142857 (void()) main() (label) main::@return diff --git a/src/test/ref/irq-idx-problem.sym b/src/test/ref/irq-idx-problem.sym index 48b4d7c70..2f0159660 100644 --- a/src/test/ref/irq-idx-problem.sym +++ b/src/test/ref/irq-idx-problem.sym @@ -3,19 +3,19 @@ (label) @begin (label) @end (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_CHANGE_IDX[] = { (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT } -(const byte) IRQ_CHANGE_NEXT = (number) $7f +(const byte) IRQ_CHANGE_NEXT = (byte) $7f (const byte*) IRQ_CHANGE_VAL[] = { (byte) $b, (byte) $b, (byte) $63, (byte) 0, (byte) 0, (byte) $80, (byte) 7, (byte) 7, (byte) $83, (byte) 0, (byte) 0, (byte) $60 } (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 1024 (const byte*) VIC_BASE = (byte*) 53248 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_SIZE = (number) $30 +(const byte) VIC_SIZE = (byte) $30 (byte) irq_idx loadstore zp[1]:2 6.857142857142857 (void()) main() (label) main::@return diff --git a/src/test/ref/irq-kernel-minimal.log b/src/test/ref/irq-kernel-minimal.log index d897b06ff..59fa91006 100644 --- a/src/test/ref/irq-kernel-minimal.log +++ b/src/test/ref/irq-kernel-minimal.log @@ -41,9 +41,9 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const void()**) KERNEL_IRQ = (void()**)(number) $314 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() @@ -274,9 +274,9 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const void()**) KERNEL_IRQ = (void()**) 788 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-kernel-minimal.sym b/src/test/ref/irq-kernel-minimal.sym index 76a90df4b..b8e987c10 100644 --- a/src/test/ref/irq-kernel-minimal.sym +++ b/src/test/ref/irq-kernel-minimal.sym @@ -2,9 +2,9 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const void()**) KERNEL_IRQ = (void()**) 788 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-kernel.log b/src/test/ref/irq-kernel.log index 401694176..3b9109fc8 100644 --- a/src/test/ref/irq-kernel.log +++ b/src/test/ref/irq-kernel.log @@ -41,16 +41,16 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d020 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() @@ -356,16 +356,16 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-kernel.sym b/src/test/ref/irq-kernel.sym index 58792a126..56fc50af1 100644 --- a/src/test/ref/irq-kernel.sym +++ b/src/test/ref/irq-kernel.sym @@ -2,16 +2,16 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index 99875c3dd..716a1efcc 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -220,10 +220,10 @@ SYMBOL TABLE SSA (label) @end (const byte*) BGCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*)(number) $d021 (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) RASTER = (byte*)(number) $d012 @@ -1906,10 +1906,10 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 diff --git a/src/test/ref/irq-local-var-overlap-problem.sym b/src/test/ref/irq-local-var-overlap-problem.sym index 1b60cb811..cc7a95423 100644 --- a/src/test/ref/irq-local-var-overlap-problem.sym +++ b/src/test/ref/irq-local-var-overlap-problem.sym @@ -3,10 +3,10 @@ (label) @end (const byte*) BGCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) FGCOL = (byte*) 53281 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 diff --git a/src/test/ref/irq-raster.log b/src/test/ref/irq-raster.log index 03f823045..1303635b5 100644 --- a/src/test/ref/irq-raster.log +++ b/src/test/ref/irq-raster.log @@ -41,16 +41,16 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d020 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() @@ -356,16 +356,16 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-raster.sym b/src/test/ref/irq-raster.sym index 537d7d1c4..c7c08a5a0 100644 --- a/src/test/ref/irq-raster.sym +++ b/src/test/ref/irq-raster.sym @@ -2,16 +2,16 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53280 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_MIN)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/irq-volatile-bool-problem.log b/src/test/ref/irq-volatile-bool-problem.log index ee0c707da..d859f8be3 100644 --- a/src/test/ref/irq-volatile-bool-problem.log +++ b/src/test/ref/irq-volatile-bool-problem.log @@ -70,9 +70,9 @@ SYMBOL TABLE SSA (label) @end (const byte*) BGCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 (const byte*) RASTER = (byte*)(number) $d012 @@ -495,9 +495,9 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BGCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 diff --git a/src/test/ref/irq-volatile-bool-problem.sym b/src/test/ref/irq-volatile-bool-problem.sym index e7849f995..4e52c0524 100644 --- a/src/test/ref/irq-volatile-bool-problem.sym +++ b/src/test/ref/irq-volatile-bool-problem.sym @@ -4,9 +4,9 @@ (label) @end (const byte*) BGCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 (const byte*) RASTER = (byte*) 53266 diff --git a/src/test/ref/iterarray.log b/src/test/ref/iterarray.log index 9a63af193..cbeeb6242 100644 --- a/src/test/ref/iterarray.log +++ b/src/test/ref/iterarray.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 5 + (byte) main::i#0 ← (byte) 5 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -46,7 +46,6 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 5 in (byte) main::i#0 ← (number) 5 Adding number conversion cast (unumber) 2 in (number~) main::$0 ← (number) 2 + (byte) main::i#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) 2 + (byte) main::i#2 Adding number conversion cast (unumber) 2 in (number~) main::$1 ← (unumber~) main::$0 + (number) 2 @@ -55,16 +54,12 @@ Adding number conversion cast (unumber) 1 in (number~) main::$2 ← (byte) main: Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) main::i#2 + (unumber)(number) 1 Adding number conversion cast (unumber) $a in (bool~) main::$3 ← (byte) main::i#1 < (number) $a Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 5 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 4352 -Simplifying constant integer cast 5 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 9b2d96798..c63cb6237 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -192,12 +192,12 @@ SYMBOL TABLE SSA (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_PORT_A = (byte*)(number) $dc00 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 -(const byte) GREEN = (number) 5 -(const byte) KEY_C = (number) $14 -(const byte) KEY_E = (number) $e -(const byte) KEY_I = (number) $21 -(const byte) KEY_SPACE = (number) $3c -(const byte) RED = (number) 2 +(const byte) GREEN = (byte) 5 +(const byte) KEY_C = (byte) $14 +(const byte) KEY_E = (byte) $e +(const byte) KEY_I = (byte) $21 +(const byte) KEY_SPACE = (byte) $3c +(const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*)(number) $400 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (number~) keyboard_key_pressed::$0 @@ -229,7 +229,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#9 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -244,7 +244,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() (label) main::@1 (label) main::@2 @@ -294,22 +294,6 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 56320 Simplifying constant pointer cast (byte*) 56321 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 7 Simplifying constant integer cast 3 @@ -1292,12 +1276,12 @@ FINAL SYMBOL TABLE (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 -(const byte) GREEN = (number) 5 -(const byte) KEY_C = (number) $14 -(const byte) KEY_E = (number) $e -(const byte) KEY_I = (number) $21 -(const byte) KEY_SPACE = (number) $3c -(const byte) RED = (number) 2 +(const byte) GREEN = (byte) 5 +(const byte) KEY_C = (byte) $14 +(const byte) KEY_E = (byte) $e +(const byte) KEY_I = (byte) $21 +(const byte) KEY_SPACE = (byte) $3c +(const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (byte~) keyboard_key_pressed::$2 reg byte a 4.0 diff --git a/src/test/ref/keyboard-glitch.sym b/src/test/ref/keyboard-glitch.sym index 656cbb272..a23a8fcca 100644 --- a/src/test/ref/keyboard-glitch.sym +++ b/src/test/ref/keyboard-glitch.sym @@ -5,12 +5,12 @@ (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_B = (byte*) 56321 -(const byte) GREEN = (number) 5 -(const byte) KEY_C = (number) $14 -(const byte) KEY_E = (number) $e -(const byte) KEY_I = (number) $21 -(const byte) KEY_SPACE = (number) $3c -(const byte) RED = (number) 2 +(const byte) GREEN = (byte) 5 +(const byte) KEY_C = (byte) $14 +(const byte) KEY_E = (byte) $e +(const byte) KEY_I = (byte) $21 +(const byte) KEY_SPACE = (byte) $3c +(const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (byte~) keyboard_key_pressed::$2 reg byte a 4.0 diff --git a/src/test/ref/kickasm-uses-prevent-deletion.log b/src/test/ref/kickasm-uses-prevent-deletion.log index 7926fb76c..1051f2f72 100644 --- a/src/test/ref/kickasm-uses-prevent-deletion.log +++ b/src/test/ref/kickasm-uses-prevent-deletion.log @@ -40,9 +40,9 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const void()**) KERNEL_IRQ = (void()**)(number) $314 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() @@ -270,9 +270,9 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const void()**) KERNEL_IRQ = (void()**) 788 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/kickasm-uses-prevent-deletion.sym b/src/test/ref/kickasm-uses-prevent-deletion.sym index 76a90df4b..b8e987c10 100644 --- a/src/test/ref/kickasm-uses-prevent-deletion.sym +++ b/src/test/ref/kickasm-uses-prevent-deletion.sym @@ -2,9 +2,9 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const void()**) KERNEL_IRQ = (void()**) 788 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return (void()) main() diff --git a/src/test/ref/line-anim.cfg b/src/test/ref/line-anim.cfg index 9acc4bf68..dbd5ea5d7 100644 --- a/src/test/ref/line-anim.cfg +++ b/src/test/ref/line-anim.cfg @@ -200,7 +200,7 @@ divr16u: scope:[divr16u] from divr16s::@4 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [93] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [93] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [93] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [93] (word) divr16u::dividend#2 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::dividend#0 ) [93] (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#3 divr16u::@3/(word) divr16u::rem#9 ) [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index 06a6a1d1d..c9dad6914 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -73,7 +73,7 @@ divr16u: scope:[divr16u] from divr16s::@4 (word) divr16u::divisor#5 ← phi( divr16s::@4/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( divr16s::@4/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( divr16s::@4/(word) divr16u::rem#3 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -148,9 +148,9 @@ divr16s: scope:[divr16s] from point_init::@8 (signed word) divr16s::divisor#6 ← phi( point_init::@8/(signed word) divr16s::divisor#0 ) (signed word) divr16s::rem#1 ← phi( point_init::@8/(signed word) divr16s::rem#0 ) (signed word) divr16s::dividend#1 ← phi( point_init::@8/(signed word) divr16s::dividend#0 ) - (byte) divr16s::neg#0 ← (number) 0 - (word) divr16s::dividendu#0 ← (number) 0 - (word) divr16s::remu#0 ← (number) 0 + (byte) divr16s::neg#0 ← (byte) 0 + (word) divr16s::dividendu#0 ← (word) 0 + (word) divr16s::remu#0 ← (word) 0 (bool~) divr16s::$0 ← (signed word) divr16s::dividend#1 < (number) 0 (bool~) divr16s::$1 ← (signed word) divr16s::rem#1 < (number) 0 (bool~) divr16s::$2 ← (bool~) divr16s::$0 || (bool~) divr16s::$1 @@ -183,7 +183,7 @@ divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7 (word) divr16s::dividendu#6 ← phi( divr16s::@1/(word) divr16s::dividendu#1 divr16s::@7/(word) divr16s::dividendu#2 ) (byte) divr16s::neg#5 ← phi( divr16s::@1/(byte) divr16s::neg#1 divr16s::@7/(byte) divr16s::neg#7 ) (signed word) divr16s::divisor#1 ← phi( divr16s::@1/(signed word) divr16s::divisor#4 divr16s::@7/(signed word) divr16s::divisor#5 ) - (word) divr16s::divisoru#0 ← (number) 0 + (word) divr16s::divisoru#0 ← (word) 0 (bool~) divr16s::$3 ← (signed word) divr16s::divisor#1 < (number) 0 if((bool~) divr16s::$3) goto divr16s::@3 to:divr16s::@9 @@ -533,7 +533,7 @@ screen_fill::@return: scope:[screen_fill] from screen_fill::@3 (void()) bitmap_init((byte*) bitmap_init::bitmap) bitmap_init: scope:[bitmap_init] from main::@16 (byte*) bitmap_init::bitmap#5 ← phi( main::@16/(byte*) bitmap_init::bitmap#0 ) - (byte) bitmap_init::bits#0 ← (number) $80 + (byte) bitmap_init::bits#0 ← (byte) $80 (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 @@ -659,18 +659,18 @@ SYMBOL TABLE SSA (const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02 (const byte*) D011 = (byte*)(number) $d011 (const byte*) D018 = (byte*)(number) $d018 -(const byte) DELAY = (number) 8 +(const byte) DELAY = (byte) 8 (const byte*) PROCPORT = (byte*)(number) 1 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*)(number) $d012 (const byte*) SCREEN = (byte*)(number) $8800 -(const byte) SIZE = (number) 4 +(const byte) SIZE = (byte) 4 (const byte) SIZEOF_WORD = (byte) 2 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (byte*~) bitmap_clear::$0 (bool~) bitmap_clear::$1 @@ -1147,17 +1147,16 @@ SYMBOL TABLE SSA (byte) screen_fill::y#4 (const signed byte*) x_add[(const byte) SIZE] = { fill( SIZE, 0) } (const word*) x_cur[(const byte) SIZE] = { fill( SIZE, 0) } -(const word*) x_end[(const byte) SIZE] = { (word)(number) $14, (word)(number) $a, (word)(number) $14, (word)(number) $14 } -(const word*) x_start[(const byte) SIZE] = { (word)(number) $a, (word)(number) $14, (word)(number) $1e, (word)(number) $1e } +(const word*) x_end[(const byte) SIZE] = { (word) $14, (word) $a, (word) $14, (word) $14 } +(const word*) x_start[(const byte) SIZE] = { (word) $a, (word) $14, (word) $1e, (word) $1e } (const signed byte*) y_add[(const byte) SIZE] = { fill( SIZE, 0) } (const word*) y_cur[(const byte) SIZE] = { fill( SIZE, 0) } -(const byte*) y_end[(const byte) SIZE] = { (byte)(number) $14, (byte)(number) $14, (byte)(number) $a, (byte)(number) $14 } -(const byte*) y_start[(const byte) SIZE] = { (byte)(number) $a, (byte)(number) $a, (byte)(number) $a, (byte)(number) $14 } +(const byte*) y_end[(const byte) SIZE] = { (byte) $14, (byte) $14, (byte) $a, (byte) $14 } +(const byte*) y_start[(const byte) SIZE] = { (byte) $a, (byte) $a, (byte) $a, (byte) $14 } Fixing inline constructor with bitmap_clear::$3 ← (byte)*(bitmap_plot_yhi + 0) w= (byte)*(bitmap_plot_ylo + 0) Fixing inline constructor with bitmap_plot::$3 ← (byte)*(bitmap_plot_yhi + bitmap_plot::y#1) w= (byte)*(bitmap_plot_ylo + bitmap_plot::y#1) Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1166,13 +1165,9 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$6 ← (word) divr Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (number) 1 Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) divr16s::neg#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16s::dividendu#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16s::remu#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) divr16s::$0 ← (signed word) divr16s::dividend#1 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) divr16s::$1 ← (signed word) divr16s::rem#1 < (number) 0 Adding number conversion cast (unumber) 1 in (byte) divr16s::neg#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (word) divr16s::divisoru#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) divr16s::$3 ← (signed word) divr16s::divisor#1 < (number) 0 Adding number conversion cast (unumber) 1 in (number~) divr16s::$15 ← (byte) divr16s::neg#3 ^ (number) 1 Adding number conversion cast (unumber) divr16s::$15 in (number~) divr16s::$15 ← (byte) divr16s::neg#3 ^ (unumber)(number) 1 @@ -1209,7 +1204,6 @@ Adding number conversion cast (snumber) $10 in *((const signed byte*) x_add + (b Adding number conversion cast (snumber) 0 in (signed word) divr16s::dividend#0 ← (number) 0 Adding number conversion cast (unumber) $10 in (number~) point_init::$15 ← (byte~) point_init::$14 / (number) $10 Adding number conversion cast (unumber) point_init::$15 in (number~) point_init::$15 ← (byte~) point_init::$14 / (unumber)(number) $10 -Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 @@ -1226,16 +1220,11 @@ Adding number conversion cast (unumber) 0 in *((byte*) bitmap_clear::bitmap#2) Adding number conversion cast (unumber) $fff8 in (number~) bitmap_plot::$1 ← (word) bitmap_plot::x#1 & (number) $fff8 Adding number conversion cast (unumber) bitmap_plot::$1 in (number~) bitmap_plot::$1 ← (word) bitmap_plot::x#1 & (unumber)(number) $fff8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16s::neg#0 ← (unumber)(number) 0 -Inlining cast (word) divr16s::dividendu#0 ← (unumber)(number) 0 -Inlining cast (word) divr16s::remu#0 ← (unumber)(number) 0 Inlining cast (word~) divr16s::$9 ← (word)(signed word~) divr16s::$8 Inlining cast (word~) divr16s::$11 ← (word)(signed word~) divr16s::$10 Inlining cast (byte) divr16s::neg#1 ← (unumber)(number) 1 Inlining cast (word~) divr16s::$6 ← (word)(signed word) divr16s::dividend#3 Inlining cast (word~) divr16s::$7 ← (word)(signed word) divr16s::rem#3 -Inlining cast (word) divr16s::divisoru#0 ← (unumber)(number) 0 Inlining cast (word~) divr16s::$14 ← (word)(signed word~) divr16s::$13 Inlining cast (word~) divr16s::$12 ← (word)(signed word) divr16s::divisor#3 Inlining cast (signed word~) divr16s::$21 ← (signed word)(word) divr16s::resultu#1 @@ -1259,7 +1248,6 @@ Inlining cast *((const signed byte*) x_add + (byte) point_init::point_idx#3) ← Inlining cast *((const signed byte*) x_add + (byte) point_init::point_idx#4) ← (snumber)(number) $10 Inlining cast (signed word) divr16s::dividend#0 ← (snumber)(number) 0 Inlining cast (signed byte~) point_init::$16 ← (signed byte)(unumber~) point_init::$15 -Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast @@ -1271,25 +1259,8 @@ Simplifying constant pointer cast (byte*) 53265 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 -Simplifying constant integer cast $a -Simplifying constant integer cast $14 -Simplifying constant integer cast $1e -Simplifying constant integer cast $1e -Simplifying constant integer cast $a -Simplifying constant integer cast $a -Simplifying constant integer cast $a -Simplifying constant integer cast $14 -Simplifying constant integer cast $14 -Simplifying constant integer cast $a -Simplifying constant integer cast $14 -Simplifying constant integer cast $14 -Simplifying constant integer cast $14 -Simplifying constant integer cast $14 -Simplifying constant integer cast $a -Simplifying constant integer cast $14 Simplifying constant pointer cast (byte*) 40960 Simplifying constant pointer cast (byte*) 34816 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1298,12 +1269,8 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast (const byte) VIC_BMM|(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 @@ -1327,7 +1294,6 @@ Simplifying constant integer cast -$10 Simplifying constant integer cast $10 Simplifying constant integer cast 0 Simplifying constant integer cast $10 -Simplifying constant integer cast $80 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 @@ -1343,20 +1309,15 @@ Simplifying constant integer cast *((const byte*) bitmap_plot_yhi + (byte) bitma Simplifying constant integer cast *((const byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#1) Simplifying constant integer cast $fff8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -1380,7 +1341,6 @@ Finalized signed number type (signed byte) -$10 Finalized signed number type (signed byte) $10 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 @@ -1740,7 +1700,7 @@ Constant inlined bitmap_init::bits#0 = (byte) $80 Constant inlined bitmap_init::bits#2 = (byte) $80 Constant inlined divr16s::neg#1 = (byte) 1 Constant inlined divr16s::neg#0 = (byte) 0 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined main::i#0 = (byte) 0 Constant inlined main::toD0181_$7 = >(word)(const byte*) BITMAP/(byte) 4&(byte) $f Constant inlined screen_fill::x#0 = (byte) 0 @@ -2103,7 +2063,7 @@ divr16u: scope:[divr16u] from divr16s::@4 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [93] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [93] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [93] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [93] (word) divr16u::dividend#2 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::dividend#0 ) [93] (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#3 divr16u::@3/(word) divr16u::rem#9 ) [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 @@ -3228,7 +3188,7 @@ divr16u: { // [93] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [93] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [93] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -4488,7 +4448,7 @@ divr16u: { __b1_from_divr16u: // [93] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [93] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [93] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -5049,17 +5009,17 @@ FINAL SYMBOL TABLE (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 -(const byte) DELAY = (number) 8 +(const byte) DELAY = (byte) 8 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 34816 -(const byte) SIZE = (number) 4 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 +(const byte) SIZE = (byte) 4 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 @@ -5861,7 +5821,7 @@ divr16u: { // [93] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [93] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [93] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [93] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/line-anim.sym b/src/test/ref/line-anim.sym index b78327dde..55077b0f4 100644 --- a/src/test/ref/line-anim.sym +++ b/src/test/ref/line-anim.sym @@ -7,17 +7,17 @@ (const byte*) CIA2_PORT_A_DDR = (byte*) 56578 (const byte*) D011 = (byte*) 53265 (const byte*) D018 = (byte*) 53272 -(const byte) DELAY = (number) 8 +(const byte) DELAY = (byte) 8 (const byte*) PROCPORT = (byte*) 1 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte*) RASTER = (byte*) 53266 (const byte*) SCREEN = (byte*) 34816 -(const byte) SIZE = (number) 4 -(const byte) VIC_BMM = (number) $20 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 +(const byte) SIZE = (byte) 4 +(const byte) VIC_BMM = (byte) $20 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 (void()) bitmap_clear() (label) bitmap_clear::@1 (label) bitmap_clear::@2 diff --git a/src/test/ref/linegen.cfg b/src/test/ref/linegen.cfg index 0bab550d7..26e0901e7 100644 --- a/src/test/ref/linegen.cfg +++ b/src/test/ref/linegen.cfg @@ -251,7 +251,7 @@ lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@4 [115] (word*) lin16u_gen::lintab#4 ← phi( lin16u_gen::@2/(word*) lin16u_gen::lintab#3 lin16u_gen::@4/(word*) lin16u_gen::lintab#6 ) [115] (dword) lin16u_gen::val#2 ← phi( lin16u_gen::@2/(dword) lin16u_gen::val#1 lin16u_gen::@4/(dword) lin16u_gen::val#0 ) - [115] (word) lin16u_gen::i#2 ← phi( lin16u_gen::@2/(word) lin16u_gen::i#1 lin16u_gen::@4/(byte) 0 ) + [115] (word) lin16u_gen::i#2 ← phi( lin16u_gen::@2/(word) lin16u_gen::i#1 lin16u_gen::@4/(word) 0 ) [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 to:lin16u_gen::@return lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 @@ -273,7 +273,7 @@ divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [124] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [124] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [124] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [124] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [124] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [125] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index a2d0194fb..366eac887 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -81,7 +81,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@2 @2: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@21 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -89,7 +89,7 @@ divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@7 (word) divr16u::divisor#6 ← phi( lin16u_gen/(word) divr16u::divisor#0 lin16u_gen::@7/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@7/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( lin16u_gen/(word) divr16u::rem#3 lin16u_gen::@7/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -455,7 +455,7 @@ main::@17: scope:[main] from main::@16 (byte*) print_line_cursor#16 ← phi( main::@16/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#16 (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#60 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@17 main::@25 (word) rem16u#34 ← phi( main::@17/(word) rem16u#35 main::@25/(word) rem16u#36 ) @@ -660,9 +660,9 @@ lin16u_gen::@8: scope:[lin16u_gen] from lin16u_gen::@7 (word~) lin16u_gen::$4 ← (word) divr16u::return#6 (word) rem16u#8 ← (word) rem16u#17 (word) lin16u_gen::stepf#0 ← (word~) lin16u_gen::$4 - (dword) lin16u_gen::step#0 ← ((dword)) { (word) lin16u_gen::stepi#1, (word) lin16u_gen::stepf#0 } - (dword) lin16u_gen::val#0 ← ((dword)) { (word) lin16u_gen::min#4, (word)(number) 0 } - (word) lin16u_gen::i#0 ← (number) 0 + (dword) lin16u_gen::step#0 ← (dword){ (word) lin16u_gen::stepi#1, (word) lin16u_gen::stepf#0 } + (dword) lin16u_gen::val#0 ← (dword){ (word) lin16u_gen::min#4, (word) 0 } + (word) lin16u_gen::i#0 ← (word) 0 to:lin16u_gen::@1 lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@8 (word) rem16u#23 ← phi( lin16u_gen::@2/(word) rem16u#26 lin16u_gen::@8/(word) rem16u#8 ) @@ -1239,10 +1239,8 @@ SYMBOL TABLE SSA (word) rem16u#9 Fixing inline constructor with lin16u_gen::$8 ← (word)lin16u_gen::stepi#1 dw= (word)lin16u_gen::stepf#0 -Fixing inline constructor with lin16u_gen::$9 ← (word)lin16u_gen::min#4 dw= (word)(word)0 +Fixing inline constructor with lin16u_gen::$9 ← (word)lin16u_gen::min#4 dw= (word)0 Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1270,7 +1268,6 @@ Adding number conversion cast (unumber) $14 in (word) lin16u_gen::length#2 ← ( Adding number conversion cast (unumber) $22d in (word) print_word::w#0 ← (number) $22d Adding number conversion cast (unumber) $79cb in (word) print_word::w#1 ← (number) $79cb Adding number conversion cast (unumber) 0 in (word) print_word::w#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $14 in (bool~) main::$18 ← (byte) main::i#2 < (number) $14 Adding number conversion cast (unumber) $7461 in (word) print_word::w#6 ← (number) $7461 Adding number conversion cast (unumber) $f781 in (word) print_word::w#7 ← (number) $f781 @@ -1281,10 +1278,7 @@ Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) Adding number conversion cast (unumber) 1 in (number~) lin16u_gen::$3 ← (word) lin16u_gen::length#4 - (number) 1 Adding number conversion cast (unumber) lin16u_gen::$3 in (number~) lin16u_gen::$3 ← (word) lin16u_gen::length#4 - (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::dividend#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) lin16u_gen::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 @@ -1300,16 +1294,12 @@ Inlining cast (word) lin16u_gen::length#2 ← (unumber)(number) $14 Inlining cast (word) print_word::w#0 ← (unumber)(number) $22d Inlining cast (word) print_word::w#1 ← (unumber)(number) $79cb Inlining cast (word) print_word::w#2 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (word) print_word::w#6 ← (unumber)(number) $7461 Inlining cast (word) print_word::w#7 ← (unumber)(number) $f781 Inlining cast (word) print_word::w#8 ← (unumber)(number) $6488 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (word) divr16u::dividend#2 ← (unumber)(number) 0 -Inlining cast (word) lin16u_gen::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1335,7 +1325,6 @@ Simplifying constant integer cast $14 Simplifying constant integer cast $22d Simplifying constant integer cast $79cb Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $14 Simplifying constant integer cast $7461 Simplifying constant integer cast $f781 @@ -1347,13 +1336,8 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) lin16u_gen::stepi#1 Simplifying constant integer cast (word) lin16u_gen::stepf#0 Simplifying constant integer cast (word) lin16u_gen::min#4 -Simplifying constant integer cast (word)(number) 0 -Simplifying constant integer cast 0 +Simplifying constant integer cast (word) 0 Successful SSA optimization PassNCastSimplification -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1378,7 +1362,6 @@ Finalized unsigned number type (byte) $14 Finalized unsigned number type (word) $22d Finalized unsigned number type (word) $79cb Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $14 Finalized unsigned number type (word) $7461 Finalized unsigned number type (word) $f781 @@ -1387,7 +1370,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 Inferred type updated to word in (unumber~) divr16u::$5 ← (word) divr16u::rem#7 | (byte) 1 @@ -1693,7 +1675,7 @@ Constant inlined lin16u_gen::max#0 = (word) $7461 Constant inlined lin16u_gen::max#2 = (word) $6488 Constant inlined lin16u_gen::max#1 = (word) $f781 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined main::i#0 = (byte) 0 Constant inlined lin16u_gen::min#0 = (word) $22d Constant inlined print_line_cursor#0 = (byte*) 1024 @@ -1717,7 +1699,7 @@ Constant inlined print_str::str#8 = (const string) main::str1 Constant inlined main::str8 = (const string) main::str1 Constant inlined lin16u_gen::lintab#2 = (const word*) main::lintab3 Constant inlined lin16u_gen::min#1 = (word) $79cb -Constant inlined lin16u_gen::i#0 = (byte) 0 +Constant inlined lin16u_gen::i#0 = (word) 0 Constant inlined print_str::str#7 = (const string) main::str Constant inlined lin16u_gen::lintab#1 = (const word*) main::lintab2 Constant inlined lin16u_gen::min#2 = (byte) 0 @@ -2155,7 +2137,7 @@ lin16u_gen::@4: scope:[lin16u_gen] from lin16u_gen::@3 lin16u_gen::@1: scope:[lin16u_gen] from lin16u_gen::@2 lin16u_gen::@4 [115] (word*) lin16u_gen::lintab#4 ← phi( lin16u_gen::@2/(word*) lin16u_gen::lintab#3 lin16u_gen::@4/(word*) lin16u_gen::lintab#6 ) [115] (dword) lin16u_gen::val#2 ← phi( lin16u_gen::@2/(dword) lin16u_gen::val#1 lin16u_gen::@4/(dword) lin16u_gen::val#0 ) - [115] (word) lin16u_gen::i#2 ← phi( lin16u_gen::@2/(word) lin16u_gen::i#1 lin16u_gen::@4/(byte) 0 ) + [115] (word) lin16u_gen::i#2 ← phi( lin16u_gen::@2/(word) lin16u_gen::i#1 lin16u_gen::@4/(word) 0 ) [116] if((word) lin16u_gen::i#2<(byte) $14) goto lin16u_gen::@2 to:lin16u_gen::@return lin16u_gen::@return: scope:[lin16u_gen] from lin16u_gen::@1 @@ -2177,7 +2159,7 @@ divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [124] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [124] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [124] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [124] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [124] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [125] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 @@ -3252,7 +3234,7 @@ lin16u_gen: { __b1_from___b4: // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vbuc1 + // [115] phi (word) lin16u_gen::i#2 = (word) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3344,7 +3326,7 @@ divr16u: { // [124] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [124] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [124] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -4403,7 +4385,7 @@ lin16u_gen: { __b1_from___b4: // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vbuc1 + // [115] phi (word) lin16u_gen::i#2 = (word) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4489,7 +4471,7 @@ divr16u: { __b1_from_divr16u: // [124] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [124] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [124] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -5688,7 +5670,7 @@ lin16u_gen: { // [115] phi from lin16u_gen::@4 to lin16u_gen::@1 [phi:lin16u_gen::@4->lin16u_gen::@1] // [115] phi (word*) lin16u_gen::lintab#4 = (word*) lin16u_gen::lintab#6 [phi:lin16u_gen::@4->lin16u_gen::@1#0] -- register_copy // [115] phi (dword) lin16u_gen::val#2 = (dword) lin16u_gen::val#0 [phi:lin16u_gen::@4->lin16u_gen::@1#1] -- register_copy - // [115] phi (word) lin16u_gen::i#2 = (byte) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vbuc1 + // [115] phi (word) lin16u_gen::i#2 = (word) 0 [phi:lin16u_gen::@4->lin16u_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 @@ -5775,7 +5757,7 @@ divr16u: { // [124] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [124] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [124] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [124] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/literals.log b/src/test/ref/literals.log index 8b2ffda8e..cbdd5cd1e 100644 --- a/src/test/ref/literals.log +++ b/src/test/ref/literals.log @@ -51,7 +51,7 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 (const byte) num = (byte) 1 -(const byte*) nums[] = { (byte)(number) 2, (byte)(number) 3, (byte)(number) 4, (byte)(number) 5 } +(const byte*) nums[] = { (byte) 2, (byte) 3, (byte) 4, (byte) 5 } (const byte*) str[] = (string) "bcde" Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (const byte) ch @@ -61,10 +61,6 @@ Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unum Adding number conversion cast (unumber) 9 in (number~) main::$1 ← (number) 9 + (byte) main::i#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber)(number) 9 + (byte) main::i#2 Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 2 diff --git a/src/test/ref/liverange-call-problem.cfg b/src/test/ref/liverange-call-problem.cfg index 377f0dcbe..49cad3b55 100644 --- a/src/test/ref/liverange-call-problem.cfg +++ b/src/test/ref/liverange-call-problem.cfg @@ -35,7 +35,7 @@ main::@return: scope:[main] from main::@4 (void()) incw2() incw2: scope:[incw2] from main::@1 main::@3 - [15] (word) w2#10 ← phi( main::@1/(byte) 0 main::@3/(word) w2#11 ) + [15] (word) w2#10 ← phi( main::@1/(word) 0 main::@3/(word) w2#11 ) [16] (word) w2#11 ← ++ (word) w2#10 to:incw2::@return incw2::@return: scope:[incw2] from incw2 @@ -44,7 +44,7 @@ incw2::@return: scope:[incw2] from incw2 (void()) incw1() incw1: scope:[incw1] from main main::@2 - [18] (word) w1#11 ← phi( main/(byte) 0 main::@2/(word) w1#12 ) + [18] (word) w1#11 ← phi( main/(word) 0 main::@2/(word) w1#12 ) [19] (word) w1#12 ← ++ (word) w1#11 to:incw1::@return incw1::@return: scope:[incw1] from incw1 diff --git a/src/test/ref/liverange-call-problem.log b/src/test/ref/liverange-call-problem.log index 021efbb49..991023466 100644 --- a/src/test/ref/liverange-call-problem.log +++ b/src/test/ref/liverange-call-problem.log @@ -6,8 +6,8 @@ Culled Empty Block (label) @2 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (word) w1#0 ← (number) 0 - (word) w2#0 ← (number) 0 + (word) w1#0 ← (word) 0 + (word) w2#0 ← (word) 0 to:@3 (void()) main() @@ -141,25 +141,16 @@ SYMBOL TABLE SSA (word) w2#8 (word) w2#9 -Adding number conversion cast (unumber) 0 in (word) w1#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) w2#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (number~) main::$4 ← (number) 0 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (unumber)(number) 0 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) 2 in (number~) main::$5 ← (number) 2 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (unumber)(number) 2 * (const byte) SIZEOF_WORD Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) w1#0 ← (unumber)(number) 0 -Inlining cast (word) w2#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$4 ← (byte) 0 * (const byte) SIZEOF_WORD @@ -202,8 +193,8 @@ Successful SSA optimization PassNEliminateUnusedVars Inlining constant with var siblings (const word) w1#0 Inlining constant with var siblings (const word) w2#0 Constant inlined main::$5 = (byte) 2*(const byte) SIZEOF_WORD -Constant inlined w1#0 = (byte) 0 -Constant inlined w2#0 = (byte) 0 +Constant inlined w1#0 = (word) 0 +Constant inlined w2#0 = (word) 0 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(main::SCREEN+2*SIZEOF_WORD) Successful SSA optimization Pass2ConstantAdditionElimination @@ -269,7 +260,7 @@ main::@return: scope:[main] from main::@4 (void()) incw2() incw2: scope:[incw2] from main::@1 main::@3 - [15] (word) w2#10 ← phi( main::@1/(byte) 0 main::@3/(word) w2#11 ) + [15] (word) w2#10 ← phi( main::@1/(word) 0 main::@3/(word) w2#11 ) [16] (word) w2#11 ← ++ (word) w2#10 to:incw2::@return incw2::@return: scope:[incw2] from incw2 @@ -278,7 +269,7 @@ incw2::@return: scope:[incw2] from incw2 (void()) incw1() incw1: scope:[incw1] from main main::@2 - [18] (word) w1#11 ← phi( main/(byte) 0 main::@2/(word) w1#12 ) + [18] (word) w1#11 ← phi( main/(word) 0 main::@2/(word) w1#12 ) [19] (word) w1#12 ← ++ (word) w1#11 to:incw1::@return incw1::@return: scope:[incw1] from incw1 @@ -341,7 +332,7 @@ main: { // [5] call incw1 // [18] phi from main to incw1 [phi:main->incw1] incw1_from_main: - // [18] phi (word) w1#11 = (byte) 0 [phi:main->incw1#0] -- vwuz1=vbuc1 + // [18] phi (word) w1#11 = (word) 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 lda #>0 @@ -355,7 +346,7 @@ main: { // [7] call incw2 // [15] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from___b1: - // [15] phi (word) w2#10 = (byte) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1 + // [15] phi (word) w2#10 = (word) 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 lda #>0 @@ -479,7 +470,7 @@ main: { // [5] call incw1 // [18] phi from main to incw1 [phi:main->incw1] incw1_from_main: - // [18] phi (word) w1#11 = (byte) 0 [phi:main->incw1#0] -- vwuz1=vbuc1 + // [18] phi (word) w1#11 = (word) 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 lda #>0 @@ -493,7 +484,7 @@ main: { // [7] call incw2 // [15] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from___b1: - // [15] phi (word) w2#10 = (byte) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1 + // [15] phi (word) w2#10 = (word) 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 lda #>0 @@ -662,7 +653,7 @@ main: { // incw1() // [5] call incw1 // [18] phi from main to incw1 [phi:main->incw1] - // [18] phi (word) w1#11 = (byte) 0 [phi:main->incw1#0] -- vwuz1=vbuc1 + // [18] phi (word) w1#11 = (word) 0 [phi:main->incw1#0] -- vwuz1=vwuc1 lda #<0 sta.z w1 sta.z w1+1 @@ -672,7 +663,7 @@ main: { // incw2() // [7] call incw2 // [15] phi from main::@1 to incw2 [phi:main::@1->incw2] - // [15] phi (word) w2#10 = (byte) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1 + // [15] phi (word) w2#10 = (word) 0 [phi:main::@1->incw2#0] -- vwuz1=vwuc1 lda #<0 sta.z w2 sta.z w2+1 diff --git a/src/test/ref/liverange.log b/src/test/ref/liverange.log index 6a8db6083..b7bf4d1e0 100644 --- a/src/test/ref/liverange.log +++ b/src/test/ref/liverange.log @@ -4,13 +4,13 @@ Culled Empty Block (label) inci::@1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i#0 ← (number) 0 + (byte) i#0 ← (byte) 0 to:@2 (void()) main() main: scope:[main] from @2 (byte) i#13 ← phi( @2/(byte) i#14 ) - (byte) main::a#0 ← (number) 4 + (byte) main::a#0 ← (byte) 4 call inci (byte) inci::return#0 ← (byte) inci::return#3 to:main::@1 @@ -116,23 +116,14 @@ SYMBOL TABLE SSA (byte) main::a#3 (byte) main::a#4 -Adding number conversion cast (unumber) 0 in (byte) i#0 ← (number) 0 -Adding number conversion cast (unumber) 4 in (byte) main::a#0 ← (number) 4 Adding number conversion cast (unumber) 1 in (byte*~) main::$4 ← (const byte*) main::SCREEN + (number) 1 Adding number conversion cast (unumber) 7 in (number~) inci::$0 ← (byte) i#10 + (number) 7 Adding number conversion cast (unumber) inci::$0 in (number~) inci::$0 ← (byte) i#10 + (unumber)(number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::a#0 ← (unumber)(number) 4 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/local-string.log b/src/test/ref/local-string.log index 44c1900c3..86400cda9 100644 --- a/src/test/ref/local-string.log +++ b/src/test/ref/local-string.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -51,17 +51,12 @@ SYMBOL TABLE SSA (const byte*) main::msg[] = (string) "message 2 " (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (number) 0 != *((const byte*) main::msg + (byte) main::i#2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/long-pointer-0.log b/src/test/ref/long-pointer-0.log index 2e9dcb892..05793a986 100644 --- a/src/test/ref/long-pointer-0.log +++ b/src/test/ref/long-pointer-0.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (dword) main::long_ptr#0 ← (number) $12345678 + (dword) main::long_ptr#0 ← (dword) $12345678 asm { nop lda(long_ptr_zp),y sta$ff } to:main::@return main::@return: scope:[main] from main @@ -31,14 +31,6 @@ SYMBOL TABLE SSA (dword) main::long_ptr#0 (const byte) main::long_ptr_zp = <&(dword) main::long_ptr -Adding number conversion cast (unumber) $12345678 in (dword) main::long_ptr#0 ← (number) $12345678 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (dword) main::long_ptr#0 ← (unumber)(number) $12345678 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $12345678 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (dword) $12345678 -Successful SSA optimization PassNFinalizeNumberTypeConversions Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 diff --git a/src/test/ref/long-pointer-1.log b/src/test/ref/long-pointer-1.log index 7e8880e55..2338214fd 100644 --- a/src/test/ref/long-pointer-1.log +++ b/src/test/ref/long-pointer-1.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (dword) main::long_ptr#0 ← (number) $12345678 + (dword) main::long_ptr#0 ← (dword) $12345678 asm { nop lda(long_ptr_zp),y sta$ff } to:main::@return main::@return: scope:[main] from main @@ -31,14 +31,6 @@ SYMBOL TABLE SSA (dword) main::long_ptr#0 (const byte) main::long_ptr_zp = (byte)&(dword) main::long_ptr -Adding number conversion cast (unumber) $12345678 in (dword) main::long_ptr#0 ← (number) $12345678 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (dword) main::long_ptr#0 ← (unumber)(number) $12345678 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $12345678 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (dword) $12345678 -Successful SSA optimization PassNFinalizeNumberTypeConversions Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 diff --git a/src/test/ref/longbranch-interrupt-problem.log b/src/test/ref/longbranch-interrupt-problem.log index f6aa05cf7..01f362a71 100644 --- a/src/test/ref/longbranch-interrupt-problem.log +++ b/src/test/ref/longbranch-interrupt-problem.log @@ -9,7 +9,7 @@ Culled Empty Block (label) irq::@1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) col ← (number) 0 + (byte) col ← (byte) 0 to:@2 (void()) main() @@ -73,22 +73,18 @@ interrupt(KERNEL_MIN)(void()) irq() (label) main::@7 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) col ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) col > (number) $a Adding number conversion cast (unumber) 0 in (byte) col ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) irq::$0 ← (byte) col != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) col ← (unumber)(number) 0 -Inlining cast (byte) col ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53280 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/loop-for-continue.log b/src/test/ref/loop-for-continue.log index 6d40937de..c71aa3c4c 100644 --- a/src/test/ref/loop-for-continue.log +++ b/src/test/ref/loop-for-continue.log @@ -12,8 +12,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::idx#4 ← phi( main/(byte) main::idx#0 main::@5/(byte) main::idx#5 ) @@ -80,21 +80,12 @@ SYMBOL TABLE SSA (byte) main::idx#4 (byte) main::idx#5 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (number) 0 != *((const byte*) MESSAGE + (byte) main::i#2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [7] (bool~) main::$1 ← *((const byte*) MESSAGE + (byte) main::i#3) != (byte) ' ' from [6] (bool~) main::$0 ← *((const byte*) MESSAGE + (byte) main::i#3) == (byte) ' ' Successful SSA optimization Pass2UnaryNotSimplification diff --git a/src/test/ref/loop-for-empty-body.log b/src/test/ref/loop-for-empty-body.log index d147300bc..421e42fe6 100644 --- a/src/test/ref/loop-for-empty-body.log +++ b/src/test/ref/loop-for-empty-body.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@2/(byte) main::b#1 ) @@ -55,20 +55,15 @@ SYMBOL TABLE SSA (byte) main::b#4 (const byte*) str[] = (string) "Hello!" -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← *((const byte*) str + (byte) main::b#2) != (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (byte~) main::$0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::b#2 = (byte) main::b#3 (byte) main::b#4 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/loop-while-continue.log b/src/test/ref/loop-while-continue.log index a5bf0694c..db6387f66 100644 --- a/src/test/ref/loop-while-continue.log +++ b/src/test/ref/loop-while-continue.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 main::@4 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#3 main::@4/(byte) main::i#4 ) @@ -60,16 +60,10 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28*6 in (bool~) main::$0 ← (byte) main::i#1 < (number) $28*(number) 6 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [7] (bool~) main::$2 ← *((const byte*) SCREEN + (byte) main::i#3) != (byte) ' ' from [6] (bool~) main::$1 ← *((const byte*) SCREEN + (byte) main::i#3) == (byte) ' ' Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#1 = (byte) main::i#3 (byte) main::i#4 diff --git a/src/test/ref/loop-while-min.log b/src/test/ref/loop-while-min.log index 93cdad639..21e4191e7 100644 --- a/src/test/ref/loop-while-min.log +++ b/src/test/ref/loop-while-min.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -49,16 +49,11 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $64 in (bool~) main::$0 ← (byte) main::i#2 != (number) $64 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $64 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $64 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/loop-while-sideeffect.log b/src/test/ref/loop-while-sideeffect.log index 7b55ddb9f..1d53dff0a 100644 --- a/src/test/ref/loop-while-sideeffect.log +++ b/src/test/ref/loop-while-sideeffect.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 7 + (byte) main::i#0 ← (byte) 7 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#3 ) @@ -54,17 +54,12 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 7 in (byte) main::i#0 ← (number) 7 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) main::i#2 != (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 7 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 7 -Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 7 -Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#1 = (byte) main::i#3 (byte) main::i#4 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/loop100.log b/src/test/ref/loop100.log index 02f720904..366a318b8 100644 --- a/src/test/ref/loop100.log +++ b/src/test/ref/loop100.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -46,15 +46,10 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $64 in (bool~) main::$0 ← (byte) main::i#2 < (number) $64 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast $64 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $64 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/loophead-problem-2.log b/src/test/ref/loophead-problem-2.log index a6020b5a6..156c1e7d5 100644 --- a/src/test/ref/loophead-problem-2.log +++ b/src/test/ref/loophead-problem-2.log @@ -35,9 +35,9 @@ main::@return: scope:[main] from main::@1 (byte()) scan_for_lowest() scan_for_lowest: scope:[scan_for_lowest] from main - (byte) scan_for_lowest::lowest#0 ← (number) $ff - (signed word) scan_for_lowest::height#0 ← (number) $258 - (byte) scan_for_lowest::i#0 ← (number) 0 + (byte) scan_for_lowest::lowest#0 ← (byte) $ff + (signed word) scan_for_lowest::height#0 ← (signed word) $258 + (byte) scan_for_lowest::i#0 ← (byte) 0 to:scan_for_lowest::@1 scan_for_lowest::@1: scope:[scan_for_lowest] from scan_for_lowest scan_for_lowest::@4 (byte) scan_for_lowest::lowest#3 ← phi( scan_for_lowest/(byte) scan_for_lowest::lowest#0 scan_for_lowest::@4/(byte) scan_for_lowest::lowest#4 ) @@ -89,7 +89,7 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const signed word*) ball_y[(number) 8] = { (signed word)(number) $32, (signed word)(number) $64, (signed word)(number) -$c8, (signed word)(number) $c, (signed word)(number) -$64, (signed word)(number) $4b, (signed word)(number) 0, (signed word)(number) -$79 } +(const signed word*) ball_y[(number) 8] = { (signed word) $32, (signed word) $64, (signed word) -$c8, (signed word) $c, (signed word) -$64, (signed word) $4b, (signed word) 0, (signed word) -$79 } (void()) main() (byte~) main::$0 (byte~) main::$1 @@ -143,38 +143,17 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in *((const byte*) main::screen + (number) 0) ← (byte) main::hit_check#0 Adding number conversion cast (unumber) 2 in *((const byte*) main::screen + (number) 2) ← (byte~) main::$1 Adding number conversion cast (unumber) 3 in *((const byte*) main::screen + (number) 3) ← (byte~) main::$2 -Adding number conversion cast (unumber) $ff in (byte) scan_for_lowest::lowest#0 ← (number) $ff -Adding number conversion cast (snumber) $258 in (signed word) scan_for_lowest::height#0 ← (number) $258 -Adding number conversion cast (unumber) 0 in (byte) scan_for_lowest::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) scan_for_lowest::$0 ← (byte) scan_for_lowest::i#2 < (number) 8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) scan_for_lowest::lowest#0 ← (unumber)(number) $ff -Inlining cast (signed word) scan_for_lowest::height#0 ← (snumber)(number) $258 -Inlining cast (byte) scan_for_lowest::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $32 -Simplifying constant integer cast $64 -Simplifying constant integer cast -$c8 -Simplifying constant integer cast $c -Simplifying constant integer cast -$64 -Simplifying constant integer cast $4b -Simplifying constant integer cast 0 -Simplifying constant integer cast -$79 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast $ff -Simplifying constant integer cast $258 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) $ff -Finalized signed number type (signed word) $258 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [22] (bool~) scan_for_lowest::$2 ← *((const signed word*) ball_y + (byte~) scan_for_lowest::$3) >= (signed word) scan_for_lowest::height#2 from [21] (bool~) scan_for_lowest::$1 ← *((const signed word*) ball_y + (byte~) scan_for_lowest::$3) < (signed word) scan_for_lowest::height#2 diff --git a/src/test/ref/loophead-problem-3.asm b/src/test/ref/loophead-problem-3.asm index 6a563008a..d6c838a40 100644 --- a/src/test/ref/loophead-problem-3.asm +++ b/src/test/ref/loophead-problem-3.asm @@ -35,10 +35,12 @@ mul16u: { sta.z mb+2 lda #>b>>$10 sta.z mb+3 - lda #0 + lda #<0 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 lda #<4 sta.z a diff --git a/src/test/ref/loophead-problem-3.cfg b/src/test/ref/loophead-problem-3.cfg index 111bc83e0..240ed19f5 100644 --- a/src/test/ref/loophead-problem-3.cfg +++ b/src/test/ref/loophead-problem-3.cfg @@ -31,8 +31,8 @@ mul16u: scope:[mul16u] from main [14] phi() to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [15] (dword) mul16u::mb#2 ← phi( mul16u/(const word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [15] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [15] (dword) mul16u::mb#2 ← phi( mul16u/(dword)(const word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) + [15] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [15] (word) mul16u::a#2 ← phi( mul16u/(byte) 4 mul16u::@3/(word) mul16u::a#0 ) [16] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index 05c9dc4d2..0645baa68 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -21,8 +21,8 @@ CONTROL FLOW GRAPH SSA mul16u: scope:[mul16u] from main (word) mul16u::a#5 ← phi( main/(word) mul16u::a#1 ) (word) mul16u::b#1 ← phi( main/(word) mul16u::b#0 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#1 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#1 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -159,7 +159,6 @@ SYMBOL TABLE SSA (dword) mul16u::return#3 (dword) mul16u::return#4 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (unumber)(number) 1 @@ -169,14 +168,12 @@ Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul Adding number conversion cast (unumber) 4 in (word) mul16u::a#1 ← (number) 4 Adding number conversion cast (unumber) $7b in (word) mul16u::b#0 ← (number) $7b Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word) mul16u::a#1 ← (unumber)(number) 4 Inlining cast (word) mul16u::b#0 ← (unumber)(number) $7b Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -185,7 +182,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $7b Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -196,7 +192,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 Inversing boolean not [9] (bool~) mul16u::$3 ← (byte~) mul16u::$1 == (byte) 0 from [8] (bool~) mul16u::$2 ← (byte~) mul16u::$1 != (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification -Alias (dword) mul16u::mb#0 = (word) mul16u::b#1 Alias (word) mul16u::a#2 = (word) mul16u::a#3 (word) mul16u::a#6 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#3 (dword) mul16u::return#1 @@ -210,7 +205,7 @@ Successful SSA optimization Pass2AliasElimination Alias (word) mul16u::a#2 = (word) mul16u::a#4 Alias (dword) mul16u::mb#2 = (dword) mul16u::mb#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (dword) mul16u::mb#0 (word) mul16u::b#0 +Identical Phi Values (word) mul16u::b#1 (word) mul16u::b#0 Identical Phi Values (word) mul16u::a#5 (word) mul16u::a#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) mul16u::$0 [5] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 @@ -220,9 +215,13 @@ Constant (const dword) mul16u::res#0 = 0 Constant (const word) mul16u::a#1 = 4 Constant (const word) mul16u::b#0 = $7b Successful SSA optimization Pass2ConstantIdentification +Constant (const dword) mul16u::mb#0 = (dword)mul16u::b#0 +Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const dword) mul16u::res#0 Inlining constant with var siblings (const word) mul16u::a#1 -Constant inlined mul16u::res#0 = (byte) 0 +Inlining constant with var siblings (const dword) mul16u::mb#0 +Constant inlined mul16u::mb#0 = (dword)(const word) mul16u::b#0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined mul16u::a#1 = (byte) 4 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4) @@ -290,8 +289,8 @@ mul16u: scope:[mul16u] from main [14] phi() to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [15] (dword) mul16u::mb#2 ← phi( mul16u/(const word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [15] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [15] (dword) mul16u::mb#2 ← phi( mul16u/(dword)(const word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) + [15] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [15] (word) mul16u::a#2 ← phi( mul16u/(byte) 4 mul16u::@3/(word) mul16u::a#0 ) [16] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -460,7 +459,7 @@ mul16u: { .label return = $c // [15] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [15] phi (dword) mul16u::mb#2 = (const word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vduc1 + // [15] phi (dword) mul16u::mb#2 = (dword)(const word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vduc1 lda #b @@ -469,12 +468,14 @@ mul16u: { sta.z mb+2 lda #>b>>$10 sta.z mb+3 - // [15] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [15] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [15] phi (word) mul16u::a#2 = (byte) 4 [phi:mul16u->mul16u::@1#2] -- vwuz1=vbuc1 lda #<4 @@ -569,9 +570,9 @@ Uplift Scope [mul16u] 38.83: zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 Uplift Scope [main] 4: zp[4]:16 [ main::result#0 ] 4: zp[1]:22 [ main::$2 ] 4: zp[1]:23 [ main::$3 ] 2: zp[2]:20 [ main::kaputt#0 ] Uplift Scope [] -Uplifting [mul16u] best 1617 combination zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:8 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] zp[4]:12 [ mul16u::return#2 ] -Uplifting [main] best 1605 combination zp[4]:16 [ main::result#0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[2]:20 [ main::kaputt#0 ] -Uplifting [] best 1605 combination +Uplifting [mul16u] best 1657 combination zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:8 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] zp[4]:12 [ mul16u::return#2 ] +Uplifting [main] best 1645 combination zp[4]:16 [ main::result#0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[2]:20 [ main::kaputt#0 ] +Uplifting [] best 1645 combination Coalescing zero page register [ zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:12 [ mul16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:16 [ main::result#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:20 [ main::kaputt#0 ] ] with [ zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] ] @@ -649,7 +650,7 @@ mul16u: { .label return = 2 // [15] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [15] phi (dword) mul16u::mb#2 = (const word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vduc1 + // [15] phi (dword) mul16u::mb#2 = (dword)(const word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vduc1 lda #b @@ -658,12 +659,14 @@ mul16u: { sta.z mb+2 lda #>b>>$10 sta.z mb+3 - // [15] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [15] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [15] phi (word) mul16u::a#2 = (byte) 4 [phi:mul16u->mul16u::@1#2] -- vwuz1=vbuc1 lda #<4 @@ -742,7 +745,7 @@ Removing instruction jmp __breturn Removing instruction jmp __b4 Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #0 +Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 Replacing label __b3_from___b2 with __b3 @@ -814,7 +817,7 @@ reg byte a [ mul16u::$1 ] FINAL ASSEMBLER -Score: 1399 +Score: 1439 // File Comments // Program where loop-head optimization produces wrong return value @@ -879,7 +882,7 @@ mul16u: { .label res = 2 .label return = 2 // [15] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [15] phi (dword) mul16u::mb#2 = (const word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vduc1 + // [15] phi (dword) mul16u::mb#2 = (dword)(const word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vduc1 lda #b @@ -888,11 +891,13 @@ mul16u: { sta.z mb+2 lda #>b>>$10 sta.z mb+3 - // [15] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [15] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [15] phi (word) mul16u::a#2 = (byte) 4 [phi:mul16u->mul16u::@1#2] -- vwuz1=vbuc1 lda #<4 diff --git a/src/test/ref/loophead-problem.log b/src/test/ref/loophead-problem.log index 4add07c79..c9808c9d1 100644 --- a/src/test/ref/loophead-problem.log +++ b/src/test/ref/loophead-problem.log @@ -29,7 +29,7 @@ main::@return: scope:[main] from main::@1 (void()) popup_selector() popup_selector: scope:[popup_selector] from main (byte) opcode#13 ← phi( main/(byte) opcode#6 ) - (byte) popup_selector::k#0 ← (number) 0 + (byte) popup_selector::k#0 ← (byte) 0 to:popup_selector::@1 popup_selector::@1: scope:[popup_selector] from popup_selector popup_selector::@2 (byte) opcode#12 ← phi( popup_selector/(byte) opcode#13 popup_selector::@2/(byte) opcode#3 ) @@ -95,20 +95,15 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $28 in *((const byte*) screen + (number) $28) ← (byte) opcode#6 Adding number conversion cast (unumber) $29 in *((const byte*) screen + (number) $29) ← (byte) opcode#1 -Adding number conversion cast (unumber) 0 in (byte) popup_selector::k#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (bool~) popup_selector::$0 ← (byte) popup_selector::k#2 <= (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) popup_selector::k#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 Simplifying constant integer cast $29 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $29 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) opcode#1 = (byte) opcode#7 (byte) opcode#8 (byte) opcode#2 diff --git a/src/test/ref/loopmin.log b/src/test/ref/loopmin.log index dd65014cd..9dc404049 100644 --- a/src/test/ref/loopmin.log +++ b/src/test/ref/loopmin.log @@ -6,8 +6,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) $a - (byte) main::s#0 ← (number) 0 + (byte) main::i#0 ← (byte) $a + (byte) main::s#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::s#3 ← phi( main/(byte) main::s#0 main::@2/(byte) main::s#4 ) @@ -66,21 +66,12 @@ SYMBOL TABLE SSA (byte) main::s#3 (byte) main::s#4 -Adding number conversion cast (unumber) $a in (byte) main::i#0 ← (number) $a -Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$0 ← (byte) main::i#2 > (number) 5 Adding number conversion cast (unumber) 0 in (bool~) main::$3 ← (byte) main::i#1 > (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) $a -Inlining cast (byte) main::s#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $a -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/loopnest.log b/src/test/ref/loopnest.log index a17fcbc20..f1ccb236f 100644 --- a/src/test/ref/loopnest.log +++ b/src/test/ref/loopnest.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - (byte) main::i#0 ← (number) $64 + (byte) main::i#0 ← (byte) $64 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -27,7 +27,7 @@ main::@return: scope:[main] from main::@3 (void()) nest() nest: scope:[nest] from main::@1 - (byte) nest::j#0 ← (number) $64 + (byte) nest::j#0 ← (byte) $64 to:nest::@1 nest::@1: scope:[nest] from nest nest::@1 (byte) nest::j#2 ← phi( nest/(byte) nest::j#0 nest::@1/(byte) nest::j#1 ) @@ -71,23 +71,14 @@ SYMBOL TABLE SSA (byte) nest::j#1 (byte) nest::j#2 -Adding number conversion cast (unumber) $64 in (byte) main::i#0 ← (number) $64 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (byte) main::i#1 > (number) 0 -Adding number conversion cast (unumber) $64 in (byte) nest::j#0 ← (number) $64 Adding number conversion cast (unumber) 0 in (bool~) nest::$0 ← (byte) nest::j#1 > (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) $64 -Inlining cast (byte) nest::j#0 ← (unumber)(number) $64 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $64 Simplifying constant integer cast 0 -Simplifying constant integer cast $64 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/loopnest2.log b/src/test/ref/loopnest2.log index c19120160..d1b0e4a6f 100644 --- a/src/test/ref/loopnest2.log +++ b/src/test/ref/loopnest2.log @@ -11,11 +11,11 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @3 - (byte) main::i#0 ← (number) $64 + (byte) main::i#0 ← (byte) $64 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#5 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) - (byte) main::j#0 ← (number) $64 + (byte) main::j#0 ← (byte) $64 to:main::@2 main::@2: scope:[main] from main::@1 main::@5 (byte) main::i#4 ← phi( main::@1/(byte) main::i#5 main::@5/(byte) main::i#3 ) @@ -41,11 +41,11 @@ main::@return: scope:[main] from main::@3 (void()) nest1() nest1: scope:[nest1] from main::@2 - (byte) nest1::i#0 ← (number) $64 + (byte) nest1::i#0 ← (byte) $64 to:nest1::@1 nest1::@1: scope:[nest1] from nest1 nest1::@3 (byte) nest1::i#5 ← phi( nest1/(byte) nest1::i#0 nest1::@3/(byte) nest1::i#1 ) - (byte) nest1::j#0 ← (number) $64 + (byte) nest1::j#0 ← (byte) $64 to:nest1::@2 nest1::@2: scope:[nest1] from nest1::@1 nest1::@5 (byte) nest1::i#4 ← phi( nest1::@1/(byte) nest1::i#5 nest1::@5/(byte) nest1::i#3 ) @@ -71,11 +71,11 @@ nest1::@return: scope:[nest1] from nest1::@3 (void()) nest2() nest2: scope:[nest2] from nest1::@2 - (byte) nest2::i#0 ← (number) $64 + (byte) nest2::i#0 ← (byte) $64 to:nest2::@1 nest2::@1: scope:[nest2] from nest2 nest2::@3 (byte) nest2::i#4 ← phi( nest2/(byte) nest2::i#0 nest2::@3/(byte) nest2::i#1 ) - (byte) nest2::j#0 ← (number) $64 + (byte) nest2::j#0 ← (byte) $64 to:nest2::@2 nest2::@2: scope:[nest2] from nest2::@1 nest2::@2 (byte) nest2::i#3 ← phi( nest2::@1/(byte) nest2::i#4 nest2::@2/(byte) nest2::i#3 ) @@ -165,50 +165,25 @@ SYMBOL TABLE SSA (byte) nest2::j#1 (byte) nest2::j#2 -Adding number conversion cast (unumber) $64 in (byte) main::i#0 ← (number) $64 -Adding number conversion cast (unumber) $64 in (byte) main::j#0 ← (number) $64 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (byte) main::j#1 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (byte) main::i#1 > (number) 0 -Adding number conversion cast (unumber) $64 in (byte) nest1::i#0 ← (number) $64 -Adding number conversion cast (unumber) $64 in (byte) nest1::j#0 ← (number) $64 Adding number conversion cast (unumber) 0 in (bool~) nest1::$1 ← (byte) nest1::j#1 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) nest1::$2 ← (byte) nest1::i#1 > (number) 0 -Adding number conversion cast (unumber) $64 in (byte) nest2::i#0 ← (number) $64 -Adding number conversion cast (unumber) $64 in (byte) nest2::j#0 ← (number) $64 Adding number conversion cast (unumber) 0 in (bool~) nest2::$0 ← (byte) nest2::j#1 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) nest2::$1 ← (byte) nest2::i#1 > (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) $64 -Inlining cast (byte) main::j#0 ← (unumber)(number) $64 -Inlining cast (byte) nest1::i#0 ← (unumber)(number) $64 -Inlining cast (byte) nest1::j#0 ← (unumber)(number) $64 -Inlining cast (byte) nest2::i#0 ← (unumber)(number) $64 -Inlining cast (byte) nest2::j#0 ← (unumber)(number) $64 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $64 -Simplifying constant integer cast $64 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast $64 -Simplifying constant integer cast $64 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast $64 -Simplifying constant integer cast $64 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $64 -Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $64 -Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $64 -Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/loopsplit.log b/src/test/ref/loopsplit.log index c1c18aa9d..0877053ea 100644 --- a/src/test/ref/loopsplit.log +++ b/src/test/ref/loopsplit.log @@ -10,8 +10,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) $64 - (byte) main::s#0 ← (number) 0 + (byte) main::i#0 ← (byte) $64 + (byte) main::s#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 main::@8 (byte) main::s#6 ← phi( main/(byte) main::s#0 main::@4/(byte) main::s#1 main::@8/(byte) main::s#2 ) @@ -82,22 +82,13 @@ SYMBOL TABLE SSA (byte) main::s#6 (byte) main::s#7 -Adding number conversion cast (unumber) $64 in (byte) main::i#0 ← (number) $64 -Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (byte) main::i#1 > (number) 0 Adding number conversion cast (unumber) $32 in (bool~) main::$1 ← (byte) main::i#3 > (number) $32 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) $64 -Inlining cast (byte) main::s#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $64 -Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $32 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $64 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $32 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/mem-alignment.log b/src/test/ref/mem-alignment.log index 29b3f88fb..6fdb5f871 100644 --- a/src/test/ref/mem-alignment.log +++ b/src/test/ref/mem-alignment.log @@ -16,7 +16,7 @@ main::@1: scope:[main] from main main::@1 if((bool~) main::$0) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 - (byte) main::j#0 ← (number) $ff + (byte) main::j#0 ← (byte) $ff (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 @@ -65,14 +65,6 @@ SYMBOL TABLE SSA (byte) main::j#1 (byte) main::j#2 -Adding number conversion cast (unumber) $ff in (byte) main::j#0 ← (number) $ff -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::j#0 ← (unumber)(number) $ff -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $ff -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $ff -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [5] if((byte) main::i#1!=rangelast(0,$ff)) goto main::@1 Simple Condition (bool~) main::$1 [13] if((byte) main::i1#1!=rangelast(0,$ff)) goto main::@3 Successful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index 929e984e6..24b3c0a1f 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -124,8 +124,8 @@ SYMBOL TABLE SSA (const byte*) CHARSET = (byte*)(number) $2000 (const byte*) D018 = (byte*)(number) $d018 (const byte*) PROCPORT = (byte*)(number) 1 -(const byte) PROCPORT_BASIC_KERNEL_IO = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 +(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 (const byte*) SCREEN = (byte*)(number) $400 (const byte*) SCREEN_COPY = (byte*)(number) $2400 (void()) main() @@ -883,8 +883,8 @@ FINAL SYMBOL TABLE (const byte*) CHARSET = (byte*) 8192 (const byte*) D018 = (byte*) 53272 (const byte*) PROCPORT = (byte*) 1 -(const byte) PROCPORT_BASIC_KERNEL_IO = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 +(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) SCREEN_COPY = (byte*) 9216 (void()) main() diff --git a/src/test/ref/memcpy-0.sym b/src/test/ref/memcpy-0.sym index b97508882..fe6f86593 100644 --- a/src/test/ref/memcpy-0.sym +++ b/src/test/ref/memcpy-0.sym @@ -5,8 +5,8 @@ (const byte*) CHARSET = (byte*) 8192 (const byte*) D018 = (byte*) 53272 (const byte*) PROCPORT = (byte*) 1 -(const byte) PROCPORT_BASIC_KERNEL_IO = (number) 7 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 +(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 (const byte*) SCREEN = (byte*) 1024 (const byte*) SCREEN_COPY = (byte*) 9216 (void()) main() diff --git a/src/test/ref/min-fmul-16.cfg b/src/test/ref/min-fmul-16.cfg index d54b0b687..fd03ab1f3 100644 --- a/src/test/ref/min-fmul-16.cfg +++ b/src/test/ref/min-fmul-16.cfg @@ -120,7 +120,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [49] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [49] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [49] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [49] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [49] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [49] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [50] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 diff --git a/src/test/ref/min-fmul-16.log b/src/test/ref/min-fmul-16.log index ff20c4d45..0db5cd5cb 100644 --- a/src/test/ref/min-fmul-16.log +++ b/src/test/ref/min-fmul-16.log @@ -263,9 +263,9 @@ main::@return: scope:[main] from main::@1 (void()) mulf_init() mulf_init: scope:[mulf_init] from main - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -292,7 +292,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -660,16 +660,12 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $ff in (bool~) main::$1 ← *((const byte*) RASTER) != (number) $ff -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -678,10 +674,6 @@ Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_hi+(nu Adding number conversion cast (unumber) $1ff in *((const byte*) mulf_sqr2_hi+(number) $1ff) ← *((const byte*) mulf_sqr1_hi+(unumber)(number) $100) Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number) 1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 248 @@ -694,16 +686,12 @@ Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -715,15 +703,11 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -861,7 +845,7 @@ Inlining constant with var siblings (const byte) mulf_init::dir#1 Inlining constant with var siblings (const byte*) print_char_cursor#0 Constant inlined mulf_init::c#0 = (byte) 0 Constant inlined mulf_init::sqr2_lo#0 = (const byte*) mulf_sqr2_lo -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined mulf16u::b#0 = (const word) main::b Constant inlined mulf_init::sqr2_hi#0 = (const byte*) mulf_sqr2_hi Constant inlined mulf16u::a#0 = (const word) main::a @@ -1081,7 +1065,7 @@ mulf_init: scope:[mulf_init] from main mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 [49] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) [49] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [49] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [49] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) [49] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) [49] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) [50] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 @@ -1702,7 +1686,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [49] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [49] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -2420,7 +2404,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [49] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [49] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -3205,7 +3189,7 @@ mulf_init: { sta.z sqr1_hi lda #>mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [49] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [49] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/mixed-array-0.log b/src/test/ref/mixed-array-0.log index c92f0f011..abf75c9d6 100644 --- a/src/test/ref/mixed-array-0.log +++ b/src/test/ref/mixed-array-0.log @@ -28,7 +28,7 @@ SYMBOL TABLE SSA (void()) main() (label) main::@return (const byte*) main::SCREEN = (byte*)(number) $400 -(const byte*) main::msg[] = { (byte) 1, (byte)(number) 2, (byte)(number) 3 } +(const byte*) main::msg[] = { (byte) 1, (byte) 2, (byte) 3 } Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← *((const byte*) main::msg + (number) 0) Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← *((const byte*) main::msg + (unumber)(number) 0) @@ -37,8 +37,6 @@ Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (num Adding number conversion cast (unumber) 2 in *((const byte*) main::SCREEN + (number) 2) ← *((const byte*) main::msg + (number) 2) Adding number conversion cast (unumber) 2 in *((const byte*) main::SCREEN + (number) 2) ← *((const byte*) main::msg + (unumber)(number) 2) Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 diff --git a/src/test/ref/mixed-array-1.log b/src/test/ref/mixed-array-1.log index 2d5eda114..bb7d28b78 100644 --- a/src/test/ref/mixed-array-1.log +++ b/src/test/ref/mixed-array-1.log @@ -28,7 +28,7 @@ SYMBOL TABLE SSA (void()) main() (label) main::@return (const signed byte*) main::SCREEN = (signed byte*)(number) $400 -(const signed byte*) main::msg[] = { (signed byte)(number) -1, (signed byte)(number) 0, (signed byte)(number) 1 } +(const signed byte*) main::msg[] = { (signed byte) -1, (signed byte) 0, (signed byte) 1 } Adding number conversion cast (unumber) 0 in *((const signed byte*) main::SCREEN + (number) 0) ← *((const signed byte*) main::msg + (number) 0) Adding number conversion cast (unumber) 0 in *((const signed byte*) main::SCREEN + (number) 0) ← *((const signed byte*) main::msg + (unumber)(number) 0) @@ -37,9 +37,6 @@ Adding number conversion cast (unumber) 1 in *((const signed byte*) main::SCREEN Adding number conversion cast (unumber) 2 in *((const signed byte*) main::SCREEN + (number) 2) ← *((const signed byte*) main::msg + (number) 2) Adding number conversion cast (unumber) 2 in *((const signed byte*) main::SCREEN + (number) 2) ← *((const signed byte*) main::msg + (unumber)(number) 2) Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast -1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant pointer cast (signed byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 diff --git a/src/test/ref/modglobal.log b/src/test/ref/modglobal.log index 83f9e7870..3748a03e7 100644 --- a/src/test/ref/modglobal.log +++ b/src/test/ref/modglobal.log @@ -3,9 +3,9 @@ Culled Empty Block (label) inccnt::@1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) cnt#0 ← (number) 0 - (byte) cnt2#0 ← (number) 0 - (byte) cnt3#0 ← (number) 0 + (byte) cnt#0 ← (byte) 0 + (byte) cnt2#0 ← (byte) 0 + (byte) cnt3#0 ← (byte) 0 to:@2 (void()) main() @@ -162,31 +162,18 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) cnt#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) cnt2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) cnt3#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (byte~) main::$0 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← (byte~) main::$1 Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2) ← (byte) cnt2#2 Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← (byte) cnt3#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) cnt#0 ← (unumber)(number) 0 -Inlining cast (byte) cnt2#0 ← (unumber)(number) 0 -Inlining cast (byte) cnt3#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 3 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 diff --git a/src/test/ref/modglobalmin.log b/src/test/ref/modglobalmin.log index f2bc6cb00..3f366ecc5 100644 --- a/src/test/ref/modglobalmin.log +++ b/src/test/ref/modglobalmin.log @@ -2,7 +2,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) cnt#0 ← (number) 0 + (byte) cnt#0 ← (byte) 0 to:@2 (void()) main() @@ -80,19 +80,14 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) cnt#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (byte) cnt#1 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← (byte) cnt#4 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) cnt#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) cnt#1 = (byte) cnt#9 diff --git a/src/test/ref/mul8u-min.cfg b/src/test/ref/mul8u-min.cfg index c58b3fc8b..939f748db 100644 --- a/src/test/ref/mul8u-min.cfg +++ b/src/test/ref/mul8u-min.cfg @@ -42,11 +42,11 @@ main::@return: scope:[main] from main::@3 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from main::@2 - [20] phi() + [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [21] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [21] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [21] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [21] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [21] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [22] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index e6a28a2f5..ac75de839 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -18,8 +18,8 @@ CONTROL FLOW GRAPH SSA mul8u: scope:[mul8u] from main::@2 (byte) mul8u::a#5 ← phi( main::@2/(byte) mul8u::a#1 ) (byte) mul8u::b#1 ← phi( main::@2/(byte) mul8u::b#0 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#1 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#1 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -65,7 +65,7 @@ mul8u::@return: scope:[mul8u] from mul8u::@3 (void()) main() main: scope:[main] from @6 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 (byte) main::a#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -195,39 +195,29 @@ SYMBOL TABLE SSA (word) mul8u::return#3 (word) mul8u::return#4 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 Inversing boolean not [9] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [8] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification -Alias (word) mul8u::mb#0 = (byte) mul8u::b#1 Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 @@ -243,7 +233,7 @@ Successful SSA optimization Pass2AliasElimination Alias (byte) mul8u::a#2 = (byte) mul8u::a#4 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Successful SSA optimization Pass2AliasElimination -Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 +Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 Identical Phi Values (byte) main::a#2 (byte) main::a#4 Successful SSA optimization Pass2IdenticalPhiElimination @@ -270,7 +260,7 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) 6 Successful SSA optimization PassNFinalizeNumberTypeConversions -Rewriting multiplication to use shift [16] (byte~) main::$3 ← (byte) main::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [17] (byte~) main::$3 ← (byte) main::i#2 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) mul8u::res#0 Inlining constant with var siblings (const byte) main::i#0 @@ -278,7 +268,7 @@ Inlining constant with var siblings (const byte) main::a#0 Inlining constant with var siblings (const byte) main::b#0 Constant inlined main::a#0 = (byte) 0 Constant inlined main::i#0 = (byte) 0 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined main::b#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Eliminating unused constant (const byte) SIZEOF_WORD @@ -302,13 +292,13 @@ Coalesced [22] main::a#6 ← main::a#1 Coalesced [23] main::i#6 ← main::i#1 Coalesced [24] main::b#4 ← main::b#1 Coalesced (already) [25] main::i#8 ← main::i#1 -Coalesced [26] mul8u::a#7 ← mul8u::a#1 -Coalesced [27] mul8u::mb#6 ← mul8u::b#0 -Coalesced [35] mul8u::res#9 ← mul8u::res#1 -Coalesced [39] mul8u::a#8 ← mul8u::a#0 -Coalesced [40] mul8u::res#7 ← mul8u::res#6 -Coalesced [41] mul8u::mb#7 ← mul8u::mb#1 -Coalesced (already) [42] mul8u::res#8 ← mul8u::res#2 +Coalesced [27] mul8u::a#7 ← mul8u::a#1 +Coalesced [28] mul8u::mb#6 ← mul8u::mb#0 +Coalesced [36] mul8u::res#9 ← mul8u::res#1 +Coalesced [40] mul8u::a#8 ← mul8u::a#0 +Coalesced [41] mul8u::res#7 ← mul8u::res#6 +Coalesced [42] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [43] mul8u::res#8 ← mul8u::res#2 Coalesced down to 6 phi equivalence classes Culled Empty Block (label) @7 Culled Empty Block (label) main::@6 @@ -323,7 +313,6 @@ Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Adding NOP phi() at start of mul8u FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -370,11 +359,11 @@ main::@return: scope:[main] from main::@3 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from main::@2 - [20] phi() + [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [21] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [21] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [21] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [21] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [21] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [22] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -416,8 +405,9 @@ VARIABLE REGISTER WEIGHTS (byte) mul8u::a#1 34.33333333333333 (byte) mul8u::a#2 667.6666666666667 (byte) mul8u::b -(byte) mul8u::b#0 51.5 +(byte) mul8u::b#0 101.0 (word) mul8u::mb +(word) mul8u::mb#0 4.0 (word) mul8u::mb#1 2002.0 (word) mul8u::mb#2 429.2857142857143 (word) mul8u::res @@ -427,15 +417,14 @@ VARIABLE REGISTER WEIGHTS (word) mul8u::return (word) mul8u::return#2 202.0 -Not consolidating phi with different size mul8u::mb#2 mul8u::b#0 Initial phi equivalence classes [ main::a#4 main::a#1 ] [ main::b#2 main::b#1 ] [ main::i#2 main::i#4 main::i#1 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#1 ] -[ mul8u::b#0 ] +[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Added variable mul8u::b#0 to live range equivalence class [ mul8u::b#0 ] Added variable mul8u::return#2 to live range equivalence class [ mul8u::return#2 ] Added variable main::$0 to live range equivalence class [ main::$0 ] Added variable main::$3 to live range equivalence class [ main::$3 ] @@ -446,7 +435,7 @@ Complete equivalence classes [ main::i#2 main::i#4 main::i#1 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#1 ] +[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] [ mul8u::b#0 ] [ mul8u::return#2 ] [ main::$0 ] @@ -457,7 +446,7 @@ Allocated zp[1]:3 [ main::b#2 main::b#1 ] Allocated zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] Allocated zp[1]:5 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Allocated zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -Allocated zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] +Allocated zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] Allocated zp[1]:10 [ mul8u::b#0 ] Allocated zp[2]:11 [ mul8u::return#2 ] Allocated zp[2]:13 [ main::$0 ] @@ -534,8 +523,6 @@ main: { lda.z b sta.z mul8u.b // [9] call mul8u - // [20] phi from main::@2 to mul8u [phi:main::@2->mul8u] - mul8u_from___b2: jsr mul8u // [10] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -588,19 +575,20 @@ main: { // mul8u(byte zp(5) a, byte zp($a) b) mul8u: { .label __1 = $10 - .label a = 5 .label mb = 8 + .label a = 5 .label res = 6 .label b = $a .label return = $b - // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - __b1_from_mul8u: - // [21] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuz2 + // [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuz2 lda.z b sta.z mb lda #0 sta.z mb+1 - // [21] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + __b1_from_mul8u: + // [21] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [21] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -668,12 +656,15 @@ Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::i Statement [11] (word~) main::$0 ← (word) mul8u::return#2 [ main::a#4 main::b#2 main::i#2 main::$0 ] ( main:2 [ main::a#4 main::b#2 main::i#2 main::$0 ] ) always clobbers reg byte a Statement [12] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 [ main::a#4 main::b#2 main::i#2 main::$0 main::$3 ] ( main:2 [ main::a#4 main::b#2 main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a Statement [13] *((const word*) main::screen + (byte~) main::$3) ← (word~) main::$0 [ main::a#4 main::b#2 main::i#2 ] ( main:2 [ main::a#4 main::b#2 main::i#2 ] ) always clobbers reg byte a -Statement [26] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::a#1 mul8u::mb#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +Statement [24] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [26] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [10] (word) mul8u::return#2 ← (word) mul8u::res#2 [ main::a#4 main::b#2 main::i#2 mul8u::return#2 ] ( main:2 [ main::a#4 main::b#2 main::i#2 mul8u::return#2 ] ) always clobbers reg byte a Statement [11] (word~) main::$0 ← (word) mul8u::return#2 [ main::a#4 main::b#2 main::i#2 main::$0 ] ( main:2 [ main::a#4 main::b#2 main::i#2 main::$0 ] ) always clobbers reg byte a Statement [12] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 [ main::a#4 main::b#2 main::i#2 main::$0 main::$3 ] ( main:2 [ main::a#4 main::b#2 main::i#2 main::$0 main::$3 ] ) always clobbers reg byte a Statement [13] *((const word*) main::screen + (byte~) main::$3) ← (word~) main::$0 [ main::a#4 main::b#2 main::i#2 ] ( main:2 [ main::a#4 main::b#2 main::i#2 ] ) always clobbers reg byte a +Statement [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::a#1 mul8u::mb#0 ] ) always clobbers reg byte a Statement [24] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a Statement [26] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8u:9 [ main::a#4 main::b#2 main::i#2 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::a#4 main::a#1 ] : zp[1]:2 , reg byte x , reg byte y , @@ -681,7 +672,7 @@ Potential registers zp[1]:3 [ main::b#2 main::b#1 ] : zp[1]:3 , reg byte x , reg Potential registers zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[1]:5 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp[1]:5 , reg byte x , reg byte y , Potential registers zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:6 , -Potential registers zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] : zp[2]:8 , +Potential registers zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:8 , Potential registers zp[1]:10 [ mul8u::b#0 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:11 [ mul8u::return#2 ] : zp[2]:11 , Potential registers zp[2]:13 [ main::$0 ] : zp[2]:13 , @@ -689,23 +680,23 @@ Potential registers zp[1]:15 [ main::$3 ] : zp[1]:15 , reg byte a , reg byte x , Potential registers zp[1]:16 [ mul8u::$1 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [mul8u] 3,520.33: zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,431.29: zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] 2,002: zp[1]:16 [ mul8u::$1 ] 1,703: zp[1]:5 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 202: zp[2]:11 [ mul8u::return#2 ] 51.5: zp[1]:10 [ mul8u::b#0 ] +Uplift Scope [mul8u] 3,520.33: zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,435.29: zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 2,002: zp[1]:16 [ mul8u::$1 ] 1,703: zp[1]:5 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 202: zp[2]:11 [ mul8u::return#2 ] 101: zp[1]:10 [ mul8u::b#0 ] Uplift Scope [main] 202: zp[1]:15 [ main::$3 ] 185.17: zp[1]:3 [ main::b#2 main::b#1 ] 103.85: zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] 101: zp[2]:13 [ main::$0 ] 26.75: zp[1]:2 [ main::a#4 main::a#1 ] Uplift Scope [] -Uplifting [mul8u] best 91495 combination zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:11 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] -Uplifting [main] best 90095 combination reg byte x [ main::$3 ] reg byte y [ main::b#2 main::b#1 ] zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] zp[2]:13 [ main::$0 ] zp[1]:2 [ main::a#4 main::a#1 ] +Uplifting [mul8u] best 84097 combination zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:11 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] +Uplifting [main] best 82697 combination reg byte x [ main::$3 ] reg byte y [ main::b#2 main::b#1 ] zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] zp[2]:13 [ main::$0 ] zp[1]:2 [ main::a#4 main::a#1 ] Limited combination testing to 100 combinations of 108 possible. -Uplifting [] best 90095 combination +Uplifting [] best 82697 combination Attempting to uplift remaining variables inzp[1]:4 [ main::i#2 main::i#4 main::i#1 ] -Uplifting [main] best 90095 combination zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] +Uplifting [main] best 82697 combination zp[1]:4 [ main::i#2 main::i#4 main::i#1 ] Attempting to uplift remaining variables inzp[1]:2 [ main::a#4 main::a#1 ] -Uplifting [main] best 90095 combination zp[1]:2 [ main::a#4 main::a#1 ] +Uplifting [main] best 82697 combination zp[1]:2 [ main::a#4 main::a#1 ] Coalescing zero page register [ zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:11 [ mul8u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp[2]:13 [ main::$0 ] ] - score: 1 Allocated (was zp[1]:4) zp[1]:3 [ main::i#2 main::i#4 main::i#1 ] Allocated (was zp[2]:6) zp[2]:4 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 main::$0 ] -Allocated (was zp[2]:8) zp[2]:6 [ mul8u::mb#2 mul8u::mb#1 ] +Allocated (was zp[2]:8) zp[2]:6 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -771,8 +762,6 @@ main: { // [8] (byte) mul8u::b#0 ← (byte) main::b#2 -- vbuaa=vbuyy tya // [9] call mul8u - // [20] phi from main::@2 to mul8u [phi:main::@2->mul8u] - mul8u_from___b2: jsr mul8u // [10] (word) mul8u::return#2 ← (word) mul8u::res#2 jmp __b4 @@ -817,13 +806,14 @@ mul8u: { .label mb = 6 .label res = 4 .label return = 4 - // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - __b1_from_mul8u: - // [21] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + // [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa sta.z mb lda #0 sta.z mb+1 - // [21] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + __b1_from_mul8u: + // [21] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [21] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -896,7 +886,6 @@ Removing instruction jmp __b4 Removing instruction jmp __b3 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 @@ -915,7 +904,6 @@ Removing instruction __b3_from___b4: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bend: Removing instruction __b1_from_main: -Removing instruction mul8u_from___b2: Removing instruction __b4: Removing instruction __b3: Removing instruction __breturn: @@ -930,6 +918,8 @@ Succesful ASM optimization Pass5SkipBegin Removing instruction jmp __b1 Removing instruction jmp __b2 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination @@ -968,8 +958,9 @@ FINAL SYMBOL TABLE (byte) mul8u::a#1 reg byte x 34.33333333333333 (byte) mul8u::a#2 reg byte x 667.6666666666667 (byte) mul8u::b -(byte) mul8u::b#0 reg byte a 51.5 +(byte) mul8u::b#0 reg byte a 101.0 (word) mul8u::mb +(word) mul8u::mb#0 mb zp[2]:6 4.0 (word) mul8u::mb#1 mb zp[2]:6 2002.0 (word) mul8u::mb#2 mb zp[2]:6 429.2857142857143 (word) mul8u::res @@ -984,14 +975,14 @@ reg byte y [ main::b#2 main::b#1 ] zp[1]:3 [ main::i#2 main::i#4 main::i#1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:4 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 main::$0 ] -zp[2]:6 [ mul8u::mb#2 mul8u::mb#1 ] +zp[2]:6 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::b#0 ] reg byte x [ main::$3 ] reg byte a [ mul8u::$1 ] FINAL ASSEMBLER -Score: 70373 +Score: 62975 // File Comments // Minimal test of mul8u @@ -1039,9 +1030,7 @@ main: { // [8] (byte) mul8u::b#0 ← (byte) main::b#2 -- vbuaa=vbuyy tya // [9] call mul8u - // [20] phi from main::@2 to mul8u [phi:main::@2->mul8u] jsr mul8u - // mul8u(a,b) // [10] (word) mul8u::return#2 ← (word) mul8u::res#2 // main::@4 // [11] (word~) main::$0 ← (word) mul8u::return#2 @@ -1084,12 +1073,14 @@ mul8u: { .label mb = 6 .label res = 4 .label return = 4 - // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [21] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + // mb = b + // [20] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa sta.z mb lda #0 sta.z mb+1 - // [21] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [21] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [21] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 sta.z res sta.z res+1 // [21] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy diff --git a/src/test/ref/mul8u-min.sym b/src/test/ref/mul8u-min.sym index 01eef3b7d..18834a5c4 100644 --- a/src/test/ref/mul8u-min.sym +++ b/src/test/ref/mul8u-min.sym @@ -32,8 +32,9 @@ (byte) mul8u::a#1 reg byte x 34.33333333333333 (byte) mul8u::a#2 reg byte x 667.6666666666667 (byte) mul8u::b -(byte) mul8u::b#0 reg byte a 51.5 +(byte) mul8u::b#0 reg byte a 101.0 (word) mul8u::mb +(word) mul8u::mb#0 mb zp[2]:6 4.0 (word) mul8u::mb#1 mb zp[2]:6 2002.0 (word) mul8u::mb#2 mb zp[2]:6 429.2857142857143 (word) mul8u::res @@ -48,7 +49,7 @@ reg byte y [ main::b#2 main::b#1 ] zp[1]:3 [ main::i#2 main::i#4 main::i#1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:4 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 main::$0 ] -zp[2]:6 [ mul8u::mb#2 mul8u::mb#1 ] +zp[2]:6 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::b#0 ] reg byte x [ main::$3 ] reg byte a [ mul8u::$1 ] diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg index 4ccb44a95..3178da79e 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.cfg @@ -130,7 +130,7 @@ init: scope:[init] from main [58] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [59] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 ) + [59] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(word) $20 ) [59] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 ) [60] *((const byte*) PLEX_PTR + (byte) init::sx#2) ← (byte)(const byte*) SPRITE/(byte) $40 [61] (byte~) init::$5 ← (byte) init::sx#2 << (byte) 1 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index f230afdc0..0fd365986 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -44,9 +44,9 @@ CONTROL FLOW GRAPH SSA to:@4 @4: scope:[] from @begin (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number) $400+(number) $3f8 - (byte) plex_show_idx ← (number) 0 - (byte) plex_sprite_idx ← (number) 0 - (byte) plex_sprite_msb ← (number) 1 + (byte) plex_show_idx ← (byte) 0 + (byte) plex_sprite_idx ← (byte) 0 + (byte) plex_sprite_msb ← (byte) 1 to:@9 (void()) plexInit((byte*) plexInit::screen) @@ -201,7 +201,7 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexSho to:@return @9: scope:[] from @4 (byte*) PLEX_SCREEN_PTR#29 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 ) - (byte) plex_free_next ← (number) 0 + (byte) plex_free_next ← (byte) 0 to:@12 @12: scope:[] from @9 (byte*) PLEX_SCREEN_PTR#28 ← phi( @9/(byte*) PLEX_SCREEN_PTR#29 ) @@ -242,7 +242,7 @@ init: scope:[init] from main init::@5: scope:[init] from init (byte*) PLEX_SCREEN_PTR#12 ← phi( init/(byte*) PLEX_SCREEN_PTR#2 ) (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#12 - (word) init::xp#0 ← (number) $20 + (word) init::xp#0 ← (word) $20 (byte) init::sx#0 ← (byte) 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@5 @@ -346,7 +346,7 @@ plex_irq::@return: scope:[plex_irq] from plex_irq::@2 (void()) loop() loop: scope:[loop] from main::@1 - (byte) loop::sin_idx#0 ← (number) 0 + (byte) loop::sin_idx#0 ← (byte) 0 to:loop::@1 loop::@1: scope:[loop] from loop loop::@15 (byte) loop::sin_idx#6 ← phi( loop/(byte) loop::sin_idx#0 loop::@15/(byte) loop::sin_idx#7 ) @@ -410,14 +410,14 @@ SYMBOL TABLE SSA (label) @end (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) CIA1_INTERRUPT = (byte*)(number) $dc0d -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*)(number) $d011 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte*) IRQ_ENABLE = (byte*)(number) $d01a -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*)(number) $d019 (const void()**) KERNEL_IRQ = (void()**)(number) $314 -(const byte) PLEX_COUNT = (number) $20 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -461,7 +461,7 @@ SYMBOL TABLE SSA (const word*) PLEX_XPOS[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (const byte*) PLEX_YPOS[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (const byte*) RASTER = (byte*)(number) $d012 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const byte*) SCREEN = (byte*)(number) $400 (const byte) SIZEOF_WORD = (byte) 2 (const byte*) SPRITE = (byte*)(number) $2000 @@ -471,9 +471,9 @@ SYMBOL TABLE SSA (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 (const byte*) VIC_CONTROL = (byte*)(number) $d011 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (const byte*) YSIN[(number) $100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; @@ -665,9 +665,6 @@ interrupt(KERNEL_MIN)(void()) plex_irq() (byte) plex_sprite_idx loadstore (byte) plex_sprite_msb loadstore -Adding number conversion cast (unumber) 0 in (byte) plex_show_idx ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx ← (number) 0 -Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb ← (number) 1 Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 Adding number conversion cast (unumber) 1 in (byte) plexInit::i#1 ← (byte) plexInit::i#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) 1 in (number~) plexSort::$1 ← (byte) plexSort::m#2 + (number) 1 @@ -699,10 +696,8 @@ Adding number conversion cast (unumber) plexShowSprite::$6 in (number~) plexShow Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb ← (byte) plex_sprite_msb << (number) 1 Adding number conversion cast (unumber) 0 in (bool~) plexShowSprite::$7 ← (byte) plex_sprite_msb == (number) 0 Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) plex_free_next ← (number) 0 Adding number conversion cast (unumber) VIC_DEN|VIC_RSEL|3 in *((const byte*) D011) ← (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 Adding number conversion cast (unumber) 3 in *((const byte*) D011) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_RSEL|(number) 3 -Adding number conversion cast (unumber) $20 in (word) init::xp#0 ← (number) $20 Adding number conversion cast (unumber) $40 in (byte*~) init::$1 ← (const byte*) SPRITE / (number) $40 Adding number conversion cast (unumber) 9 in (word) init::xp#1 ← (word) init::xp#2 + (number) 9 Adding number conversion cast (unumber) 1 in (byte) init::sx#1 ← (byte) init::sx#2 + rangenext(0,PLEX_COUNT-1) @@ -710,7 +705,6 @@ Adding number conversion cast (unumber) $ff in *((const byte*) SPRITES_ENABLE) Adding number conversion cast (unumber) 2 in (number~) plex_irq::$4 ← *((const byte*) RASTER) + (number) 2 Adding number conversion cast (unumber) plex_irq::$4 in (number~) plex_irq::$4 ← *((const byte*) RASTER) + (unumber)(number) 2 Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) loop::sin_idx#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (number) 8 Adding number conversion cast (unumber) 1 in (byte) loop::sy#1 ← (byte) loop::sy#2 + rangenext(0,PLEX_COUNT-1) Adding number conversion cast (unumber) 1 in (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#3 + (number) 1 @@ -720,19 +714,13 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) plex_show_idx ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb ← (unumber)(number) 1 -Inlining cast (byte) plex_show_idx ← (unumber)(number) 0 -Inlining cast (byte) plex_sprite_idx ← (unumber)(number) 0 -Inlining cast (byte) plex_sprite_msb ← (unumber)(number) 1 Inlining cast *((const byte*) PLEX_FREE_YPOS + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 Inlining cast (byte) plex_free_next ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb ← (unumber)(number) 1 -Inlining cast (byte) plex_free_next ← (unumber)(number) 0 Inlining cast *((const byte*) D011) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 -Inlining cast (word) init::xp#0 ← (unumber)(number) $20 Inlining cast (byte~) init::$2 ← (byte)(byte*~) init::$1 Inlining cast *((const byte*) SPRITES_ENABLE) ← (unumber)(number) $ff Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0 -Inlining cast (byte) loop::sin_idx#0 ← (unumber)(number) 0 Inlining cast *((const byte*) RASTER) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53248 @@ -750,9 +738,6 @@ Simplifying constant pointer cast (byte*) 56333 Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 Simplifying constant integer cast $3f8 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -775,26 +760,20 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_RSEL|(unumber)(number) 3 Simplifying constant integer cast 3 -Simplifying constant integer cast $20 Simplifying constant integer cast $40 Simplifying constant integer cast 9 Simplifying constant integer cast 1 Simplifying constant integer cast $ff Simplifying constant integer cast 2 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $7f Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -817,16 +796,13 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -1008,7 +984,7 @@ Inlining constant with var siblings (const byte) init::sx#0 Inlining constant with var siblings (const byte) init::ss#0 Inlining constant with var siblings (const byte) loop::sin_idx#0 Inlining constant with var siblings (const byte) loop::sy#0 -Constant inlined init::xp#0 = (byte) $20 +Constant inlined init::xp#0 = (word) $20 Constant inlined loop::sy#0 = (byte) 0 Constant inlined init::sx#0 = (byte) 0 Constant inlined plexSort::plexFreePrepare1_s#0 = (byte) 0 @@ -1250,7 +1226,7 @@ init: scope:[init] from main [58] call plexInit to:init::@1 init::@1: scope:[init] from init init::@1 - [59] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 ) + [59] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(word) $20 ) [59] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 ) [60] *((const byte*) PLEX_PTR + (byte) init::sx#2) ← (byte)(const byte*) SPRITE/(byte) $40 [61] (byte~) init::$5 ← (byte) init::sx#2 << (byte) 1 @@ -1922,7 +1898,7 @@ init: { jsr plexInit // [59] phi from init to init::@1 [phi:init->init::@1] __b1_from_init: - // [59] phi (word) init::xp#2 = (byte) $20 [phi:init->init::@1#0] -- vwuz1=vbuc1 + // [59] phi (word) init::xp#2 = (word) $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 @@ -2935,7 +2911,7 @@ init: { jsr plexInit // [59] phi from init to init::@1 [phi:init->init::@1] __b1_from_init: - // [59] phi (word) init::xp#2 = (byte) $20 [phi:init->init::@1#0] -- vwuz1=vbuc1 + // [59] phi (word) init::xp#2 = (word) $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 @@ -3411,14 +3387,14 @@ FINAL SYMBOL TABLE (label) @end (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 -(const byte) PLEX_COUNT = (number) $20 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -3427,7 +3403,7 @@ FINAL SYMBOL TABLE (const word*) PLEX_XPOS[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (const byte*) PLEX_YPOS[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (const byte*) RASTER = (byte*) 53266 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const byte*) SPRITE = (byte*) 8192 (const byte*) SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_ENABLE = (byte*) 53269 @@ -3435,9 +3411,9 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (const byte*) YSIN[(number) $100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; @@ -3913,7 +3889,7 @@ init: { // [78] phi from init to plexInit [phi:init->plexInit] jsr plexInit // [59] phi from init to init::@1 [phi:init->init::@1] - // [59] phi (word) init::xp#2 = (byte) $20 [phi:init->init::@1#0] -- vwuz1=vbuc1 + // [59] phi (word) init::xp#2 = (word) $20 [phi:init->init::@1#0] -- vwuz1=vwuc1 lda #<$20 sta.z xp lda #>$20 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym index dd93519dc..e1b5e1dbf 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym @@ -7,14 +7,14 @@ (label) @end (const byte*) BORDERCOL = (byte*) 53280 (const byte*) CIA1_INTERRUPT = (byte*) 56333 -(const byte) CIA_INTERRUPT_CLEAR = (number) $7f +(const byte) CIA_INTERRUPT_CLEAR = (byte) $7f (const byte*) D011 = (byte*) 53265 -(const byte) GREEN = (number) 5 +(const byte) GREEN = (byte) 5 (const byte*) IRQ_ENABLE = (byte*) 53274 -(const byte) IRQ_RASTER = (number) 1 +(const byte) IRQ_RASTER = (byte) 1 (const byte*) IRQ_STATUS = (byte*) 53273 (const void()**) KERNEL_IRQ = (void()**) 788 -(const byte) PLEX_COUNT = (number) $20 +(const byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (byte*) PLEX_SCREEN_PTR @@ -23,7 +23,7 @@ (const word*) PLEX_XPOS[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (const byte*) PLEX_YPOS[(const byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } (const byte*) RASTER = (byte*) 53266 -(const byte) RED = (number) 2 +(const byte) RED = (byte) 2 (const byte*) SPRITE = (byte*) 8192 (const byte*) SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_ENABLE = (byte*) 53269 @@ -31,9 +31,9 @@ (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 (const byte*) VIC_CONTROL = (byte*) 53265 -(const byte) VIC_DEN = (number) $10 -(const byte) VIC_RSEL = (number) 8 -(const byte) WHITE = (number) 1 +(const byte) VIC_DEN = (byte) $10 +(const byte) VIC_RSEL = (byte) 8 +(const byte) WHITE = (byte) 1 (const byte*) YSIN[(number) $100] = kickasm {{ .var min = 50 .var max = 250-21 .var ampl = max-min; diff --git a/src/test/ref/nes-array.log b/src/test/ref/nes-array.log index 512cf3d2f..59682676d 100644 --- a/src/test/ref/nes-array.log +++ b/src/test/ref/nes-array.log @@ -27,8 +27,8 @@ foo::@return: scope:[foo] from foo (void()) main() main: scope:[main] from @2 (signed word*) main::SCREEN#0 ← (signed word*)(number) $400 - (signed word) main::y1#0 ← (number) $1234 - (signed word) main::y2#0 ← (number) $1234 + (signed word) main::y1#0 ← (signed word) $1234 + (signed word) main::y2#0 ← (signed word) $1234 (byte) foo::x#0 ← (number) 1 (signed word*) foo::y#0 ← &(signed word) main::y1#0 call foo @@ -106,30 +106,20 @@ SYMBOL TABLE SSA (signed word) main::y2 (signed word) main::y2#0 (signed word) main::y2#1 -(const signed word*) wow[(number) 4] = { (signed word)(number) $cafe, (signed word)(number) $babe, (signed word)(number) $1234, (signed word)(number) $5678 } +(const signed word*) wow[(number) 4] = { (signed word)(number) $cafe, (signed word)(number) $babe, (signed word) $1234, (signed word) $5678 } -Adding number conversion cast (snumber) $1234 in (signed word) main::y1#0 ← (number) $1234 -Adding number conversion cast (snumber) $1234 in (signed word) main::y2#0 ← (number) $1234 Adding number conversion cast (unumber) 1 in (byte) foo::x#0 ← (number) 1 Adding number conversion cast (unumber) 2 in (byte) foo::x#1 ← (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) main::y1#0 ← (snumber)(number) $1234 -Inlining cast (signed word) main::y2#0 ← (snumber)(number) $1234 Inlining cast (byte) foo::x#0 ← (unumber)(number) 1 Inlining cast (byte) foo::x#1 ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $cafe Simplifying constant integer cast $babe -Simplifying constant integer cast $1234 -Simplifying constant integer cast $5678 Simplifying constant pointer cast (signed word*) 1024 -Simplifying constant integer cast $1234 -Simplifying constant integer cast $1234 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized signed number type (signed word) $1234 -Finalized signed number type (signed word) $1234 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/no-recursion-heavy.log b/src/test/ref/no-recursion-heavy.log index 8d5a9a880..0943cb709 100644 --- a/src/test/ref/no-recursion-heavy.log +++ b/src/test/ref/no-recursion-heavy.log @@ -13,10 +13,10 @@ Culled Empty Block (label) fc::@10 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) ba#0 ← (number) 0 - (byte) bb#0 ← (number) 0 - (byte) bc#0 ← (number) 0 - (byte) bd#0 ← (number) 0 + (byte) ba#0 ← (byte) 0 + (byte) bb#0 ← (byte) 0 + (byte) bc#0 ← (byte) 0 + (byte) bd#0 ← (byte) 0 to:@5 (void()) main() @@ -1427,10 +1427,6 @@ SYMBOL TABLE SSA (label) main::@7 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) ba#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bb#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bc#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bd#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) f0::$0 ← (byte) ba#6 == (number) 0 Adding number conversion cast (unumber) 1 in (bool~) f0::$2 ← (byte) ba#7 == (number) 1 Adding number conversion cast (unumber) 2 in (bool~) f0::$4 ← (byte) ba#8 == (number) 2 @@ -1475,19 +1471,11 @@ Adding number conversion cast (unumber) 7 in (bool~) fc::$14 ← (byte) bd#78 == Adding number conversion cast (unumber) 8 in (bool~) fc::$16 ← (byte) bd#79 == (number) 8 Adding number conversion cast (unumber) 9 in (bool~) fc::$18 ← (byte) bd#80 == (number) 9 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) ba#0 ← (unumber)(number) 0 -Inlining cast (byte) bb#0 ← (unumber)(number) 0 -Inlining cast (byte) bc#0 ← (unumber)(number) 0 -Inlining cast (byte) bd#0 ← (unumber)(number) 0 Inlining cast (byte) bb#12 ← (unumber)(number) 0 Inlining cast (byte) bc#23 ← (unumber)(number) 0 Inlining cast (byte) bd#34 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 3 @@ -1532,10 +1520,6 @@ Simplifying constant integer cast 8 Simplifying constant integer cast 9 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 diff --git a/src/test/ref/nomodify-3.log b/src/test/ref/nomodify-3.log index 76677e957..673107a91 100644 --- a/src/test/ref/nomodify-3.log +++ b/src/test/ref/nomodify-3.log @@ -1,7 +1,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i ← (number) 7 + (byte) i ← (byte) 7 to:@1 (void()) main() @@ -28,16 +28,11 @@ SYMBOL TABLE SSA (void()) main() (label) main::@return -Adding number conversion cast (unumber) 7 in (byte) i ← (number) 7 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0) ← (byte) i Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i ← (unumber)(number) 7 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 7 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Simplifying expression containing zero SCREEN in [1] *((const byte*) SCREEN + (byte) 0) ← (byte) i diff --git a/src/test/ref/noop-cast-elimination.log b/src/test/ref/noop-cast-elimination.log index dee93a702..294681350 100644 --- a/src/test/ref/noop-cast-elimination.log +++ b/src/test/ref/noop-cast-elimination.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (signed word) main::sw#0 ← (number) $1234 + (signed word) main::sw#0 ← (signed word) $1234 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -53,16 +53,10 @@ SYMBOL TABLE SSA (signed word) main::sw#1 (signed word) main::sw#2 -Adding number conversion cast (snumber) $1234 in (signed word) main::sw#0 ← (number) $1234 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) main::sw#0 ← (snumber)(number) $1234 Inlining cast (signed byte~) main::$0 ← (signed byte)(byte) main::i#2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (signed word*) 1024 -Simplifying constant integer cast $1234 Successful SSA optimization PassNCastSimplification -Finalized signed number type (signed word) $1234 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$1 [9] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const signed word) main::sw#0 = $1234 diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index d38f69e43..681fb50c1 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -16,7 +16,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @2 (byte*~) main::$0 ← (const byte*) CHARSET + (number) 8 (byte*) main::charset#0 ← (byte*~) main::$0 - (byte) main::c#0 ← (number) 0 + (byte) main::c#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@7 (byte*) main::charset#4 ← phi( main/(byte*) main::charset#0 main::@7/(byte*) main::charset#1 ) @@ -62,7 +62,7 @@ gen_char3::@1: scope:[gen_char3] from gen_char3 gen_char3::@5 (byte) gen_char3::r#6 ← phi( gen_char3/(byte) gen_char3::r#0 gen_char3::@5/(byte) gen_char3::r#1 ) (byte*) gen_char3::dst#5 ← phi( gen_char3/(byte*) gen_char3::dst#6 gen_char3::@5/(byte*) gen_char3::dst#1 ) (word) gen_char3::spec#4 ← phi( gen_char3/(word) gen_char3::spec#6 gen_char3::@5/(word) gen_char3::spec#7 ) - (byte) gen_char3::b#0 ← (number) 0 + (byte) gen_char3::b#0 ← (byte) 0 (byte) gen_char3::c#0 ← (byte) 0 to:gen_char3::@2 gen_char3::@2: scope:[gen_char3] from gen_char3::@1 gen_char3::@3 @@ -129,7 +129,7 @@ SYMBOL TABLE SSA (const byte*) SCREEN = (byte*)(number) $400 (const byte) SIZEOF_WORD = (byte) 2 (const byte*) VIC_MEMORY = (byte*)(number) $d018 -(const word*) charset_spec_row[] = { (word)(number) $f7da, (word)(number) $f7de, (word)(number) $f24e, (word)(number) $d6de } +(const word*) charset_spec_row[] = { (word) $f7da, (word) $f7de, (word) $f24e, (word) $d6de } (void()) gen_char3((byte*) gen_char3::dst , (word) gen_char3::spec) (byte~) gen_char3::$0 (number~) gen_char3::$1 @@ -215,7 +215,6 @@ SYMBOL TABLE SSA (byte*) main::charset#4 Adding number conversion cast (unumber) 8 in (byte*~) main::$0 ← (const byte*) CHARSET + (number) 8 -Adding number conversion cast (unumber) 0 in (byte) main::c#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (bool~) main::$7 ← (byte) main::c#2 != (number) 4 Adding number conversion cast (unumber) 8 in (byte*~) main::$9 ← (byte*) main::charset#3 + (number) 8 Adding number conversion cast (unumber) $40 in (number~) main::$2 ← (word~) main::$1 / (number) $40 @@ -223,7 +222,6 @@ Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (word Adding number conversion cast (unumber) $400 in (number~) main::$4 ← (word~) main::$3 / (number) $400 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (word~) main::$3 / (unumber)(number) $400 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (unumber~) main::$2 | (unumber~) main::$4 -Adding number conversion cast (unumber) 0 in (byte) gen_char3::b#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gen_char3::$1 ← (byte~) gen_char3::$0 & (number) $80 Adding number conversion cast (unumber) gen_char3::$1 in (number~) gen_char3::$1 ← (byte~) gen_char3::$0 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) gen_char3::$2 ← (unumber~) gen_char3::$1 != (number) 0 @@ -234,26 +232,18 @@ Adding number conversion cast (unumber) gen_char3::$6 in (number~) gen_char3::$6 Adding number conversion cast (unumber) 1 in (number~) gen_char3::$4 ← (byte) gen_char3::b#4 | (number) 1 Adding number conversion cast (unumber) gen_char3::$4 in (number~) gen_char3::$4 ← (byte) gen_char3::b#4 | (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::c#0 ← (unumber)(number) 0 Inlining cast (word~) main::$1 ← (word)(const byte*) SCREEN Inlining cast (word~) main::$3 ← (word)(const byte*) CHARSET Inlining cast (byte~) main::$6 ← (byte)(unumber~) main::$5 -Inlining cast (byte) gen_char3::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $f7da -Simplifying constant integer cast $f7de -Simplifying constant integer cast $f24e -Simplifying constant integer cast $d6de Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 12288 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast $40 Simplifying constant integer cast $400 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -261,12 +251,10 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $400 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/number-inference-sum.log b/src/test/ref/number-inference-sum.log index ea7cd7d99..61000a49a 100644 --- a/src/test/ref/number-inference-sum.log +++ b/src/test/ref/number-inference-sum.log @@ -45,7 +45,7 @@ SYMBOL TABLE SSA (number~) main::$4 (label) main::@2 (label) main::@return -(const byte) main::RED = (number) 2 +(const byte) main::RED = (byte) 2 (const byte) main::b1 = (byte) $fa (byte) main::b2 (byte) main::b2#0 @@ -289,7 +289,7 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@1 (label) main::@return -(const byte) main::RED = (number) 2 +(const byte) main::RED = (byte) 2 (const byte) main::b1 = (byte) $fa (byte) main::b2 (const byte) main::b2#0 b2 = (const byte) main::b1+(byte) $fa diff --git a/src/test/ref/number-inference-sum.sym b/src/test/ref/number-inference-sum.sym index a05d20e7c..9ba533b7c 100644 --- a/src/test/ref/number-inference-sum.sym +++ b/src/test/ref/number-inference-sum.sym @@ -4,7 +4,7 @@ (void()) main() (label) main::@1 (label) main::@return -(const byte) main::RED = (number) 2 +(const byte) main::RED = (byte) 2 (const byte) main::b1 = (byte) $fa (byte) main::b2 (const byte) main::b2#0 b2 = (const byte) main::b1+(byte) $fa diff --git a/src/test/ref/number-type.log b/src/test/ref/number-type.log index 7bc8b262c..dfc353184 100644 --- a/src/test/ref/number-type.log +++ b/src/test/ref/number-type.log @@ -20,7 +20,7 @@ main::@return: scope:[main] from main::@2 (void()) testBytes() testBytes: scope:[testBytes] from main - (byte) testBytes::idx#0 ← (number) 0 + (byte) testBytes::idx#0 ← (byte) 0 *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#0) ← (number) $c (byte) testBytes::idx#1 ← ++ (byte) testBytes::idx#0 *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#1) ← (number) 6+(number) 6 @@ -54,7 +54,7 @@ testBytes::@return: scope:[testBytes] from testBytes (void()) testSBytes() testSBytes: scope:[testSBytes] from main::@1 - (byte) testSBytes::idx#0 ← (number) 0 + (byte) testSBytes::idx#0 ← (byte) 0 *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#0) ← (number) -$c (byte) testSBytes::idx#1 ← ++ (byte) testSBytes::idx#0 *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#1) ← (number) -6-(number) 6 @@ -135,7 +135,6 @@ SYMBOL TABLE SSA (byte) testSBytes::idx#8 (byte) testSBytes::idx#9 -Adding number conversion cast (unumber) 0 in (byte) testBytes::idx#0 ← (number) 0 Adding number conversion cast (unumber) $c in *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#0) ← (number) $c Adding number conversion cast (unumber) 6+6 in *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#1) ← (number) 6+(number) 6 Adding number conversion cast (unumber) $12-6 in *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#2) ← (number) $12-(number) 6 @@ -148,7 +147,6 @@ Adding number conversion cast (unumber) $f&$1c in *((const byte*) testBytes::SCR Adding number conversion cast (unumber) 4|8 in *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#9) ← (number) 4|(number) 8 Adding number conversion cast (unumber) 5^9 in *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#10) ← (number) 5^(number) 9 Adding number conversion cast (unumber) 2+2*$f/5 in *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#11) ← (number) 2+(number) 2*(number) $f/(number) 5 -Adding number conversion cast (unumber) 0 in (byte) testSBytes::idx#0 ← (number) 0 Adding number conversion cast (snumber) -$c in *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#0) ← (number) -$c Adding number conversion cast (snumber) -6-6 in *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#1) ← (number) -6-(number) 6 Adding number conversion cast (snumber) -$12+6 in *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#2) ← (number) -$12+(number) 6 @@ -161,7 +159,6 @@ Adding number conversion cast (snumber) -4&-9 in *((const signed byte*) testSByt Adding number conversion cast (snumber) -$10|-$fc in *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#9) ← (number) -$10|(number) -$fc Adding number conversion cast (snumber) -2-2*$f/5 in *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#10) ← (number) -2-(number) 2*(number) $f/(number) 5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) testBytes::idx#0 ← (unumber)(number) 0 Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#0) ← (unumber)(number) $c Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#1) ← (unumber)(number) 6+(number) 6 Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#2) ← (unumber)(number) $12-(number) 6 @@ -174,7 +171,6 @@ Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#8) ← ( Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#9) ← (unumber)(number) 4|(number) 8 Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#10) ← (unumber)(number) 5^(number) 9 Inlining cast *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#11) ← (unumber)(number) 2+(number) 2*(number) $f/(number) 5 -Inlining cast (byte) testSBytes::idx#0 ← (unumber)(number) 0 Inlining cast *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#0) ← (snumber)(number) -$c Inlining cast *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#1) ← (snumber)(number) -6-(number) 6 Inlining cast *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx#2) ← (snumber)(number) -$12+(number) 6 @@ -189,14 +185,10 @@ Inlining cast *((const signed byte*) testSBytes::SCREEN + (byte) testSBytes::idx Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (signed byte*) 1064 -Simplifying constant integer cast 0 Simplifying constant integer cast $c -Simplifying constant integer cast 0 Simplifying constant integer cast -$c Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) -$c Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [6] *((const byte*) testBytes::SCREEN + (byte) testBytes::idx#1) ← (unumber)(number) 6+(number) 6 diff --git a/src/test/ref/operator-lohi-problem-1.log b/src/test/ref/operator-lohi-problem-1.log index 3d8108446..15551de34 100644 --- a/src/test/ref/operator-lohi-problem-1.log +++ b/src/test/ref/operator-lohi-problem-1.log @@ -23,7 +23,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const dword) DVAL = (number) $20000 +(const dword) DVAL = (dword) $20000 (const byte*) SCREEN = (byte*)(number) $400 (void()) main() (label) main::@return @@ -214,7 +214,7 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const dword) DVAL = (number) $20000 +(const dword) DVAL = (dword) $20000 (const byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@return diff --git a/src/test/ref/operator-lohi-problem-1.sym b/src/test/ref/operator-lohi-problem-1.sym index cf855567d..596b78919 100644 --- a/src/test/ref/operator-lohi-problem-1.sym +++ b/src/test/ref/operator-lohi-problem-1.sym @@ -1,7 +1,7 @@ (label) @1 (label) @begin (label) @end -(const dword) DVAL = (number) $20000 +(const dword) DVAL = (dword) $20000 (const byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@return diff --git a/src/test/ref/optimize-unsigned-comparisons.log b/src/test/ref/optimize-unsigned-comparisons.log index 085ba5a0e..23875c4c1 100644 --- a/src/test/ref/optimize-unsigned-comparisons.log +++ b/src/test/ref/optimize-unsigned-comparisons.log @@ -51,7 +51,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte*) ball_active[(number) 8] = { (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 1 } +(const byte*) ball_active[(number) 8] = { (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 0, (byte) 1, (byte) 1, (byte) 1 } (void()) main() (bool~) main::$0 (bool~) main::$1 @@ -81,14 +81,6 @@ Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← *((const byte* Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (byte) main::temp#2 < (number) 0 Adding number conversion cast (unumber) $28 in *((const byte*) main::screen + (number) $28) ← (byte) main::temp#3 Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 diff --git a/src/test/ref/parse-negated-struct-ref.log b/src/test/ref/parse-negated-struct-ref.log index 1635be68f..44ac78bc0 100644 --- a/src/test/ref/parse-negated-struct-ref.log +++ b/src/test/ref/parse-negated-struct-ref.log @@ -1,7 +1,7 @@ Setting inferred volatile on symbol affected by address-of (struct A*) main::a ← &(struct A) aa Created struct value member variable (byte) aa_b Converted struct value to member variables (struct A) aa -Adding struct value member variable copy (byte) aa_b ← (byte)(number) 1 +Adding struct value member variable copy (byte) aa_b ← (byte) 1 Rewriting struct pointer member access *((struct A*) main::a).b Warning! Adding boolean cast to non-boolean sub-expression *((byte*~) main::$2) Identified constant variable (struct A*) main::a @@ -9,7 +9,7 @@ Adding versioned struct unwinding for (struct A) aa#0 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) aa_b#0 ← (byte)(number) 1 + (byte) aa_b#0 ← (byte) 1 (struct A) aa#0 ← struct-unwound {(byte) aa_b#0} to:@1 @@ -62,7 +62,6 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (bool~) main::$3 ← (number) 0 != *((byte*~) main::$2) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/plasma-center.cfg b/src/test/ref/plasma-center.cfg index a5f8cbcbb..14800598d 100644 --- a/src/test/ref/plasma-center.cfg +++ b/src/test/ref/plasma-center.cfg @@ -128,7 +128,7 @@ make_plasma_charset::@12: scope:[make_plasma_charset] from make_plasma_charset to:make_plasma_charset::@1 make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@11 make_plasma_charset::@12 [56] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#30 make_plasma_charset::@12/(const byte*) print_line_cursor#0 ) - [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(byte) 0 ) + [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(word) 0 ) [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 to:make_plasma_charset::@return make_plasma_charset::@return: scope:[make_plasma_charset] from make_plasma_charset::@1 @@ -287,7 +287,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [132] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [133] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [133] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -529,7 +529,7 @@ init_squares::@2: scope:[init_squares] from init_squares init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 [246] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) [246] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [246] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [246] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(word) 0 ) [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index 24dfab6f1..10d454ff9 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -278,7 +278,7 @@ bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@2 to:bsearch16u::@return @17: scope:[] from @9 (byte*) heap_head#36 ← phi( @9/(byte*) heap_head#0 ) - (byte) NUM_SQUARES#0 ← (number) $ff + (byte) NUM_SQUARES#0 ← (byte) $ff (word*) SQUARES#0 ← (word*) 0 to:@22 @@ -299,7 +299,7 @@ init_squares::@3: scope:[init_squares] from init_squares (byte*) heap_head#3 ← (byte*) heap_head#14 (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1 (word*) init_squares::squares#0 ← (word*) SQUARES#1 - (word) init_squares::sqr#0 ← (number) 0 + (word) init_squares::sqr#0 ← (word) 0 (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1 (byte) init_squares::i#0 ← (byte) 0 to:init_squares::@1 @@ -412,7 +412,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 ) (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 - (word) atan2_16::angle#0 ← (number) 0 + (word) atan2_16::angle#0 ← (word) 0 (byte) atan2_16::i#0 ← (byte) 0 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6 @@ -937,8 +937,8 @@ main::@return: scope:[main] from main::@1 (byte*) heap_head#35 ← phi( @55/(byte*) heap_head#6 ) (byte) NUM_SQUARES#22 ← phi( @55/(byte) NUM_SQUARES#25 ) (byte*) SCREEN_DIST#8 ← phi( @55/(byte*) SCREEN_DIST#12 ) - (byte) sin_offset_x#3 ← (number) 0 - (byte) sin_offset_y#3 ← (number) 0 + (byte) sin_offset_x#3 ← (byte) 0 + (byte) sin_offset_y#3 ← (byte) 0 to:@53 (void()) doplasma((byte*) doplasma::screen) @@ -1026,8 +1026,8 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - (byte) init_angle_screen::x#0 ← (number) 0 - (byte) init_angle_screen::xb#0 ← (number) $27 + (byte) init_angle_screen::x#0 ← (byte) 0 + (byte) init_angle_screen::xb#0 ← (byte) $27 to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@9 (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 ) @@ -1171,8 +1171,8 @@ init_dist_screen::@20: scope:[init_dist_screen] from init_dist_screen::@4 (word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 ) (word~) init_dist_screen::$9 ← (word) sqr::return#5 (word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9 - (byte) init_dist_screen::x#0 ← (number) 0 - (byte) init_dist_screen::xb#0 ← (number) $27 + (byte) init_dist_screen::x#0 ← (byte) 0 + (byte) init_dist_screen::xb#0 ← (byte) $27 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@20 init_dist_screen::@22 (byte) init_dist_screen::xb#8 ← phi( init_dist_screen::@20/(byte) init_dist_screen::xb#0 init_dist_screen::@22/(byte) init_dist_screen::xb#1 ) @@ -1329,7 +1329,7 @@ make_plasma_charset::@24: scope:[make_plasma_charset] from make_plasma_charset: (byte*) print_line_cursor#11 ← phi( make_plasma_charset::@23/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11 (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#16 - (word) make_plasma_charset::c#0 ← (number) 0 + (word) make_plasma_charset::c#0 ← (word) 0 to:make_plasma_charset::@1 make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@19 make_plasma_charset::@24 (byte*) make_plasma_charset::charset#10 ← phi( make_plasma_charset::@19/(byte*) make_plasma_charset::charset#11 make_plasma_charset::@24/(byte*) make_plasma_charset::charset#12 ) @@ -1346,7 +1346,7 @@ make_plasma_charset::@2: scope:[make_plasma_charset] from make_plasma_charset:: (word) make_plasma_charset::c#3 ← phi( make_plasma_charset::@1/(word) make_plasma_charset::c#2 ) (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#3 (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3) - (byte) make_plasma_charset::i#0 ← (number) 0 + (byte) make_plasma_charset::i#0 ← (byte) 0 to:make_plasma_charset::@4 make_plasma_charset::@4: scope:[make_plasma_charset] from make_plasma_charset::@2 make_plasma_charset::@9 (byte*) print_line_cursor#32 ← phi( make_plasma_charset::@2/(byte*) print_line_cursor#36 make_plasma_charset::@9/(byte*) print_line_cursor#37 ) @@ -1365,8 +1365,8 @@ make_plasma_charset::@5: scope:[make_plasma_charset] from make_plasma_charset:: (byte*) make_plasma_charset::charset#4 ← phi( make_plasma_charset::@4/(byte*) make_plasma_charset::charset#5 ) (byte) make_plasma_charset::i#6 ← phi( make_plasma_charset::@4/(byte) make_plasma_charset::i#2 ) (word) make_plasma_charset::c#11 ← phi( make_plasma_charset::@4/(word) make_plasma_charset::c#7 ) - (byte) make_plasma_charset::b#0 ← (number) 0 - (byte) make_plasma_charset::ii#0 ← (number) 0 + (byte) make_plasma_charset::b#0 ← (byte) 0 + (byte) make_plasma_charset::ii#0 ← (byte) 0 to:make_plasma_charset::@7 make_plasma_charset::@6: scope:[make_plasma_charset] from make_plasma_charset::@4 (byte*) make_plasma_charset::charset#15 ← phi( make_plasma_charset::@4/(byte*) make_plasma_charset::charset#5 ) @@ -1527,13 +1527,13 @@ SYMBOL TABLE SSA (label) @9 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CHARSET = (byte*)(number) $2000 (const byte*) COLS = (byte*)(number) $d800 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -2828,8 +2825,6 @@ Adding number conversion cast (unumber) main::toD0182_$6 in (number~) main::toD0 Adding number conversion cast (unumber) $f in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (number) $f Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0182_$7 ← (unumber~) main::toD0182_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0182_$8 in (number~) main::toD0182_$8 ← (unumber~) main::toD0182_$3 | (unumber~) main::toD0182_$7 -Adding number conversion cast (unumber) 0 in (byte) sin_offset_x#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin_offset_y#3 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#4 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#3 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#3 + (number) $28 @@ -2837,8 +2832,6 @@ Adding number conversion cast (unumber) 3 in (byte) sin_offset_x#4 ← (byte) si Adding number conversion cast (unumber) 7 in (byte) sin_offset_y#4 ← (byte) sin_offset_y#11 - (number) 7 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c -Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2 @@ -2873,8 +2866,6 @@ Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_hea (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 ) (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#28 init_dist_screen::@3/(word*) SQUARES#29 ) (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 ) -Adding number conversion cast (unumber) 0 in (byte) init_dist_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_dist_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_dist_screen::$11 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (unumber)(number) 2 @@ -2897,12 +2888,8 @@ Adding number conversion cast (unumber) init_dist_screen::$17 in (byte*) heap_he (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 ) (word*) SQUARES#18 ← phi( init_dist_screen::@8/(word*) SQUARES#31 init_dist_screen::@9/(word*) SQUARES#32 ) (number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(unumber~) init_dist_screen::$16 init_dist_screen::@9/(unumber~) init_dist_screen::$14 ) -Adding number conversion cast (unumber) 0 in (word) make_plasma_charset::c#0 ← (number) 0 Adding number conversion cast (unumber) $100 in (bool~) make_plasma_charset::$2 ← (word) make_plasma_charset::c#2 < (number) $100 -Adding number conversion cast (unumber) 0 in (byte) make_plasma_charset::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) make_plasma_charset::$4 ← (byte) make_plasma_charset::i#2 < (number) 8 -Adding number conversion cast (unumber) 0 in (byte) make_plasma_charset::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) make_plasma_charset::ii#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#4 & (number) 7 Adding number conversion cast (unumber) make_plasma_charset::$12 in (number~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#4 & (unumber)(number) 7 Adding number conversion cast (unumber) 0 in (bool~) make_plasma_charset::$13 ← (unumber~) make_plasma_charset::$12 == (number) 0 @@ -2918,11 +2905,8 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1 Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) -Inlining cast (byte) NUM_SQUARES#0 ← (unumber)(number) $ff Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 -Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0 Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast *((const word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 @@ -2934,19 +2918,9 @@ Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1 Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1 -Inlining cast (byte) sin_offset_x#3 ← (unumber)(number) 0 -Inlining cast (byte) sin_offset_y#3 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30 -Inlining cast (byte) init_dist_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_dist_screen::xb#0 ← (unumber)(number) $27 -Inlining cast (word) make_plasma_charset::c#0 ← (unumber)(number) 0 -Inlining cast (byte) make_plasma_charset::i#0 ← (unumber)(number) 0 -Inlining cast (byte) make_plasma_charset::b#0 ← (unumber)(number) 0 -Inlining cast (byte) make_plasma_charset::ii#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 @@ -2956,14 +2930,6 @@ Simplifying constant pointer cast (byte*) 54299 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 11264 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 40960 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2973,15 +2939,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -3009,15 +2972,11 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast 3 Simplifying constant integer cast 7 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -3034,8 +2993,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $18 Simplifying constant integer cast $18 Simplifying constant integer cast $18 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -3043,12 +3000,8 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $27 Simplifying constant integer cast $27 -Simplifying constant integer cast 0 Simplifying constant integer cast $100 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -3063,14 +3016,11 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -3098,15 +3048,11 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -3121,8 +3067,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -3130,12 +3074,8 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $27 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -3835,7 +3775,7 @@ Constant inlined memset::num#1 = (word) $3e8 Constant inlined main::toD0182_$7 = >(word)(const byte*) CHARSET/(byte) 4&(byte) $f Constant inlined memset::num#0 = (word) $3e8 Constant inlined main::toD0182_$0 = (word)(const byte*) SCREEN2 -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined main::toD0182_$1 = (word)(const byte*) SCREEN2&(word) $3fff Constant inlined main::toD0182_$2 = (word)(const byte*) SCREEN2&(word) $3fff*(byte) 4 Constant inlined main::toD0182_$3 = >(word)(const byte*) SCREEN2&(word) $3fff*(byte) 4 @@ -3862,7 +3802,7 @@ Constant inlined memset::c#1 = (const byte) BLACK Constant inlined make_plasma_charset::charset#0 = (const byte*) CHARSET Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN1 Constant inlined main::toD0181_gfx#0 = (const byte*) CHARSET -Constant inlined init_squares::sqr#0 = (byte) 0 +Constant inlined init_squares::sqr#0 = (word) 0 Constant inlined init_angle_screen::x#0 = (byte) 0 Constant inlined init_dist_screen::y#0 = (byte) 0 Constant inlined init_dist_screen::xb#0 = (byte) $27 @@ -3871,7 +3811,7 @@ Constant inlined memset::str#1 = (void*)(const byte*) COLS Constant inlined memset::str#0 = (void*)(const byte*) print_line_cursor#0 Constant inlined malloc::size#2 = (word) $3e8 Constant inlined make_plasma_charset::i#0 = (byte) 0 -Constant inlined make_plasma_charset::c#0 = (byte) 0 +Constant inlined make_plasma_charset::c#0 = (word) 0 Constant inlined sin_offset_y#18 = (byte) 0 Constant inlined atan2_16::i#0 = (byte) 0 Constant inlined malloc::size#1 = (word) $3e8 @@ -4265,7 +4205,7 @@ make_plasma_charset::@12: scope:[make_plasma_charset] from make_plasma_charset to:make_plasma_charset::@1 make_plasma_charset::@1: scope:[make_plasma_charset] from make_plasma_charset::@11 make_plasma_charset::@12 [56] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#30 make_plasma_charset::@12/(const byte*) print_line_cursor#0 ) - [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(byte) 0 ) + [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(word) 0 ) [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2 to:make_plasma_charset::@return make_plasma_charset::@return: scope:[make_plasma_charset] from make_plasma_charset::@1 @@ -4424,7 +4364,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [132] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [133] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [133] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -4666,7 +4606,7 @@ init_squares::@2: scope:[init_squares] from init_squares init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 [246] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) [246] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [246] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [246] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(word) 0 ) [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 @@ -5743,7 +5683,7 @@ make_plasma_charset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [56] phi (word) make_plasma_charset::c#2 = (byte) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vbuc1 + // [56] phi (word) make_plasma_charset::c#2 = (word) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c lda #>0 @@ -6263,7 +6203,7 @@ atan2_16: { __b6: // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [133] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -7060,7 +7000,7 @@ init_squares: { lda #0 sta.z i // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [246] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -8250,7 +8190,7 @@ make_plasma_charset: { sta.z print_char_cursor lda #>print_line_cursor sta.z print_char_cursor+1 - // [56] phi (word) make_plasma_charset::c#2 = (byte) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vbuc1 + // [56] phi (word) make_plasma_charset::c#2 = (word) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c lda #>0 @@ -8716,7 +8656,7 @@ atan2_16: { __b6: // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [133] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -9419,7 +9359,7 @@ init_squares: { // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [246] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -9807,13 +9747,13 @@ FINAL SYMBOL TABLE (label) @4 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iprint_line_cursor sta.z print_char_cursor+1 - // [56] phi (word) make_plasma_charset::c#2 = (byte) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vbuc1 + // [56] phi (word) make_plasma_charset::c#2 = (word) 0 [phi:make_plasma_charset::@12->make_plasma_charset::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z c sta.z c+1 @@ -11132,7 +11072,7 @@ atan2_16: { // atan2_16::@6 __b6: // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [133] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 @@ -11808,7 +11748,7 @@ init_squares: { // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [246] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/plasma-center.sym b/src/test/ref/plasma-center.sym index 4c4bd53fe..c3902e974 100644 --- a/src/test/ref/plasma-center.sym +++ b/src/test/ref/plasma-center.sym @@ -4,13 +4,13 @@ (label) @4 (label) @begin (label) @end -(const byte) BLACK = (number) 0 +(const byte) BLACK = (byte) 0 (const byte*) CHARSET = (byte*) 8192 (const byte*) COLS = (byte*) 55296 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; imain::@1] __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 @@ -246,80 +247,84 @@ main: { jmp __b1 // main::@1 __b1: - // [6] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [6] (word) main::w#0 ← (word)(byte) main::i#2 -- vwuz1=_word_vbuz2 + lda.z i + sta.z w + lda #0 + sta.z w+1 + // [7] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and.z i sta.z __0 - // [7] if((byte) 0==(byte~) main::$0) goto main::@3 -- vbuc1_eq_vbuz1_then_la1 + // [8] if((byte) 0==(byte~) main::$0) goto main::@3 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z __0 - beq __b3 - // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + beq __b3_from___b1 + // [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: - // [9] phi (word) main::w#2 = (byte) -1 [phi:main::@1->main::@2#0] -- vwuz1=vbuc1 + // [10] phi (word) main::w#2 = (byte) -1 [phi:main::@1->main::@2#0] -- vwuz1=vbuc1 lda #<-1 sta.z w lda #>-1 sta.z w+1 jmp __b2 + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + __b3_from___b1: + jmp __b3 // main::@3 __b3: - // [8] (word) main::w#3 ← (byte) main::i#2 -- vwuz1=vbuz2 - lda.z i - sta.z w - lda #0 - sta.z w+1 - // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] + // [10] phi from main::@3 to main::@2 [phi:main::@3->main::@2] __b2_from___b3: - // [9] phi (word) main::w#2 = (word) main::w#3 [phi:main::@3->main::@2#0] -- register_copy + // [10] phi (word) main::w#2 = (word) main::w#0 [phi:main::@3->main::@2#0] -- register_copy jmp __b2 // main::@2 __b2: - // [10] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [11] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __3 - // [11] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 -- pwuc1_derefidx_vbuz1=vwuz2 + // [12] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 -- pwuc1_derefidx_vbuz1=vwuz2 ldy.z __3 lda.z w sta screen,y lda.z w+1 sta screen+1,y - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [13] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + // [14] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z i bne __b1_from___b2 jmp __breturn // main::@return __breturn: - // [14] return + // [15] return rts } // File Data REGISTER UPLIFT POTENTIAL REGISTERS -Statement [8] (word) main::w#3 ← (byte) main::i#2 [ main::i#2 main::w#3 ] ( main:2 [ main::i#2 main::w#3 ] ) always clobbers reg byte a +Statement [6] (word) main::w#0 ← (word)(byte) main::i#2 [ main::i#2 main::w#0 ] ( main:2 [ main::i#2 main::w#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ] -Statement [10] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::w#2 main::$3 ] ( main:2 [ main::i#2 main::w#2 main::$3 ] ) always clobbers reg byte a -Statement [11] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a -Statement [6] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 [ main::i#2 main::$0 ] ( main:2 [ main::i#2 main::$0 ] ) always clobbers reg byte a -Statement [8] (word) main::w#3 ← (byte) main::i#2 [ main::i#2 main::w#3 ] ( main:2 [ main::i#2 main::w#3 ] ) always clobbers reg byte a -Statement [10] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::w#2 main::$3 ] ( main:2 [ main::i#2 main::w#2 main::$3 ] ) always clobbers reg byte a -Statement [11] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [7] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 [ main::i#2 main::w#0 main::$0 ] ( main:2 [ main::i#2 main::w#0 main::$0 ] ) always clobbers reg byte a +Statement [11] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::w#2 main::$3 ] ( main:2 [ main::i#2 main::w#2 main::$3 ] ) always clobbers reg byte a +Statement [12] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] (word) main::w#0 ← (word)(byte) main::i#2 [ main::i#2 main::w#0 ] ( main:2 [ main::i#2 main::w#0 ] ) always clobbers reg byte a +Statement [7] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 [ main::i#2 main::w#0 main::$0 ] ( main:2 [ main::i#2 main::w#0 main::$0 ] ) always clobbers reg byte a +Statement [11] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::w#2 main::$3 ] ( main:2 [ main::i#2 main::w#2 main::$3 ] ) always clobbers reg byte a +Statement [12] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y , -Potential registers zp[2]:3 [ main::w#2 main::w#3 ] : zp[2]:3 , +Potential registers zp[2]:3 [ main::w#2 main::w#0 ] : zp[2]:3 , Potential registers zp[1]:5 [ main::$0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:6 [ main::$3 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 33: zp[2]:3 [ main::w#2 main::w#3 ] 24.36: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:5 [ main::$0 ] 22: zp[1]:6 [ main::$3 ] +Uplift Scope [main] 22: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:5 [ main::$0 ] 22: zp[1]:6 [ main::$3 ] 16.5: zp[2]:3 [ main::w#2 main::w#0 ] Uplift Scope [] -Uplifting [main] best 758 combination zp[2]:3 [ main::w#2 main::w#3 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::$3 ] -Uplifting [] best 758 combination -Allocated (was zp[2]:3) zp[2]:2 [ main::w#2 main::w#3 ] +Uplifting [main] best 788 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$0 ] reg byte a [ main::$3 ] zp[2]:3 [ main::w#2 main::w#0 ] +Uplifting [] best 788 combination +Allocated (was zp[2]:3) zp[2]:2 [ main::w#2 main::w#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -360,51 +365,54 @@ main: { jmp __b1 // main::@1 __b1: - // [6] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [6] (word) main::w#0 ← (word)(byte) main::i#2 -- vwuz1=_word_vbuxx + txa + sta.z w + lda #0 + sta.z w+1 + // [7] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 - // [7] if((byte) 0==(byte~) main::$0) goto main::@3 -- vbuc1_eq_vbuaa_then_la1 + // [8] if((byte) 0==(byte~) main::$0) goto main::@3 -- vbuc1_eq_vbuaa_then_la1 cmp #0 - beq __b3 - // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + beq __b3_from___b1 + // [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: - // [9] phi (word) main::w#2 = (byte) -1 [phi:main::@1->main::@2#0] -- vwuz1=vbuc1 + // [10] phi (word) main::w#2 = (byte) -1 [phi:main::@1->main::@2#0] -- vwuz1=vbuc1 lda #<-1 sta.z w lda #>-1 sta.z w+1 jmp __b2 + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + __b3_from___b1: + jmp __b3 // main::@3 __b3: - // [8] (word) main::w#3 ← (byte) main::i#2 -- vwuz1=vbuxx - txa - sta.z w - lda #0 - sta.z w+1 - // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] + // [10] phi from main::@3 to main::@2 [phi:main::@3->main::@2] __b2_from___b3: - // [9] phi (word) main::w#2 = (word) main::w#3 [phi:main::@3->main::@2#0] -- register_copy + // [10] phi (word) main::w#2 = (word) main::w#0 [phi:main::@3->main::@2#0] -- register_copy jmp __b2 // main::@2 __b2: - // [10] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [11] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [11] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 -- pwuc1_derefidx_vbuaa=vwuz1 + // [12] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 -- pwuc1_derefidx_vbuaa=vwuz1 tay lda.z w sta screen,y lda.z w+1 sta screen+1,y - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [13] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [14] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b1_from___b2 jmp __breturn // main::@return __breturn: - // [14] return + // [15] return rts } // File Data @@ -413,18 +421,22 @@ ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __bend Removing instruction jmp __b1 +Removing instruction jmp __b3 Removing instruction jmp __b2 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #>-1 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 +Replacing label __b3_from___b1 with __b2 Replacing label __b1_from___b2 with __b1 Removing instruction __bbegin: Removing instruction __b1_from___bbegin: Removing instruction main_from___b1: Removing instruction __bend_from___b1: Removing instruction __b1_from___b2: +Removing instruction __b3_from___b1: +Removing instruction __b3: Removing instruction __b2_from___b3: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bend: @@ -436,6 +448,7 @@ Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Removing instruction jmp __b1 +Removing instruction jmp __b2 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination @@ -453,20 +466,20 @@ FINAL SYMBOL TABLE (label) main::@return (byte) main::i (byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 7.857142857142857 +(byte) main::i#2 reg byte x 5.5 (word) main::w +(word) main::w#0 w zp[2]:2 5.5 (word) main::w#2 w zp[2]:2 11.0 -(word) main::w#3 w zp[2]:2 22.0 (const word*) screen = (word*) 1024 reg byte x [ main::i#2 main::i#1 ] -zp[2]:2 [ main::w#2 main::w#3 ] +zp[2]:2 [ main::w#2 main::w#0 ] reg byte a [ main::$0 ] reg byte a [ main::$3 ] FINAL ASSEMBLER -Score: 606 +Score: 576 // File Comments // Problem with assigning negative word constant (vwuz1=vbuc1) @@ -493,50 +506,50 @@ main: { // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@1#0] -- register_copy // main::@1 __b1: - // i&1 - // [6] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 - txa - and #1 - // if(i&1) - // [7] if((byte) 0==(byte~) main::$0) goto main::@3 -- vbuc1_eq_vbuaa_then_la1 - cmp #0 - beq __b3 - // [9] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - // [9] phi (word) main::w#2 = (byte) -1 [phi:main::@1->main::@2#0] -- vwuz1=vbuc1 - lda #<-1 - sta.z w - sta.z w+1 - jmp __b2 - // main::@3 - __b3: - // [8] (word) main::w#3 ← (byte) main::i#2 -- vwuz1=vbuxx + // w = i + // [6] (word) main::w#0 ← (word)(byte) main::i#2 -- vwuz1=_word_vbuxx txa sta.z w lda #0 sta.z w+1 - // [9] phi from main::@3 to main::@2 [phi:main::@3->main::@2] - // [9] phi (word) main::w#2 = (word) main::w#3 [phi:main::@3->main::@2#0] -- register_copy + // i&1 + // [7] (byte~) main::$0 ← (byte) main::i#2 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + txa + and #1 + // if(i&1) + // [8] if((byte) 0==(byte~) main::$0) goto main::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq __b2 + // [10] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [10] phi (word) main::w#2 = (byte) -1 [phi:main::@1->main::@2#0] -- vwuz1=vbuc1 + lda #<-1 + sta.z w + sta.z w+1 + // [9] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // main::@3 + // [10] phi from main::@3 to main::@2 [phi:main::@3->main::@2] + // [10] phi (word) main::w#2 = (word) main::w#0 [phi:main::@3->main::@2#0] -- register_copy // main::@2 __b2: // screen[i] = w - // [10] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [11] (byte~) main::$3 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [11] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 -- pwuc1_derefidx_vbuaa=vwuz1 + // [12] *((const word*) screen + (byte~) main::$3) ← (word) main::w#2 -- pwuc1_derefidx_vbuaa=vwuz1 tay lda.z w sta screen,y lda.z w+1 sta screen+1,y // for( byte i:0..7) - // [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [13] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [13] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + // [14] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b1 // main::@return // } - // [14] return + // [15] return rts } // File Data diff --git a/src/test/ref/problem-negative-word-const.sym b/src/test/ref/problem-negative-word-const.sym index 959cc9cf3..299448e7e 100644 --- a/src/test/ref/problem-negative-word-const.sym +++ b/src/test/ref/problem-negative-word-const.sym @@ -10,13 +10,13 @@ (label) main::@return (byte) main::i (byte) main::i#1 reg byte x 16.5 -(byte) main::i#2 reg byte x 7.857142857142857 +(byte) main::i#2 reg byte x 5.5 (word) main::w +(word) main::w#0 w zp[2]:2 5.5 (word) main::w#2 w zp[2]:2 11.0 -(word) main::w#3 w zp[2]:2 22.0 (const word*) screen = (word*) 1024 reg byte x [ main::i#2 main::i#1 ] -zp[2]:2 [ main::w#2 main::w#3 ] +zp[2]:2 [ main::w#2 main::w#0 ] reg byte a [ main::$0 ] reg byte a [ main::$3 ] diff --git a/src/test/ref/procedure-callingconvention-stack-4.log b/src/test/ref/procedure-callingconvention-stack-4.log index 8da129040..825a4ff3f 100644 --- a/src/test/ref/procedure-callingconvention-stack-4.log +++ b/src/test/ref/procedure-callingconvention-stack-4.log @@ -4,7 +4,7 @@ Culled Empty Block (label) plus::@1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i#0 ← (number) 0 + (byte) i#0 ← (byte) 0 to:@2 (void()) main() @@ -97,17 +97,12 @@ __stackcall (byte()) plus((byte) plus::a , (byte) plus::b) (byte) plus::return#0 (byte) plus::return#1 -Adding number conversion cast (unumber) 0 in (byte) i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::a#2 + (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::a#2 + (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::a#2 + (byte) 1 diff --git a/src/test/ref/procedure-callingconvention-stack-5.log b/src/test/ref/procedure-callingconvention-stack-5.log index 0231f5bd1..ccffe5550 100644 --- a/src/test/ref/procedure-callingconvention-stack-5.log +++ b/src/test/ref/procedure-callingconvention-stack-5.log @@ -22,7 +22,7 @@ main::@return: scope:[main] from main return to:@return @1: scope:[] from @begin - (signed word) current#1 ← (number) $30 + (signed word) current#1 ← (signed word) $30 to:@2 __stackcall (signed word()) next() @@ -79,18 +79,13 @@ Adding number conversion cast (unumber) 0 in (number~) main::$2 ← (number) 0 * Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (unumber)(number) 0 * (const byte) SIZEOF_SIGNED_WORD Adding number conversion cast (unumber) 1 in (number~) main::$3 ← (number) 1 * (const byte) SIZEOF_SIGNED_WORD Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (unumber)(number) 1 * (const byte) SIZEOF_SIGNED_WORD -Adding number conversion cast (snumber) $30 in (signed word) current#1 ← (number) $30 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) current#1 ← (snumber)(number) $30 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (signed word*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast $30 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized signed number type (signed byte) $30 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$2 ← (byte) 0 * (const byte) SIZEOF_SIGNED_WORD Inferred type updated to byte in (unumber~) main::$3 ← (byte) 1 * (const byte) SIZEOF_SIGNED_WORD diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index 3d480d4e8..e94d43de6 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -689,13 +689,13 @@ SYMBOL TABLE SSA (const byte*) IO_RAM = (byte*)(number) $d000 (const byte*) KERNAL_ROM = (byte*)(number) $e000 (const byte*) PROCPORT = (byte*)(number) 1 -(const byte) PROCPORT_BASIC_KERNEL_IO = (number) 7 +(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const byte*) PROCPORT_DDR = (byte*)(number) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_KERNEL_IO = (number) 6 -(const byte) PROCPORT_RAM_ALL = (number) 0 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_KERNEL_IO = (byte) 6 +(const byte) PROCPORT_RAM_ALL = (byte) 0 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -4749,13 +4749,13 @@ FINAL SYMBOL TABLE (const byte*) IO_RAM = (byte*) 53248 (const byte*) KERNAL_ROM = (byte*) 57344 (const byte*) PROCPORT = (byte*) 1 -(const byte) PROCPORT_BASIC_KERNEL_IO = (number) 7 +(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_KERNEL_IO = (number) 6 -(const byte) PROCPORT_RAM_ALL = (number) 0 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_KERNEL_IO = (byte) 6 +(const byte) PROCPORT_RAM_ALL = (byte) 0 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/processor-port-test.sym b/src/test/ref/processor-port-test.sym index 91e0ed2c1..2f717d330 100644 --- a/src/test/ref/processor-port-test.sym +++ b/src/test/ref/processor-port-test.sym @@ -5,13 +5,13 @@ (const byte*) IO_RAM = (byte*) 53248 (const byte*) KERNAL_ROM = (byte*) 57344 (const byte*) PROCPORT = (byte*) 1 -(const byte) PROCPORT_BASIC_KERNEL_IO = (number) 7 +(const byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const byte*) PROCPORT_DDR = (byte*) 0 -(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7 -(const byte) PROCPORT_KERNEL_IO = (number) 6 -(const byte) PROCPORT_RAM_ALL = (number) 0 -(const byte) PROCPORT_RAM_CHARROM = (number) 1 -(const byte) PROCPORT_RAM_IO = (number) 5 +(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7 +(const byte) PROCPORT_KERNEL_IO = (byte) 6 +(const byte) PROCPORT_RAM_ALL = (byte) 0 +(const byte) PROCPORT_RAM_CHARROM = (byte) 1 +(const byte) PROCPORT_RAM_IO = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/ptrtest.log b/src/test/ref/ptrtest.log index 99c903c8a..0ec9eec10 100644 --- a/src/test/ref/ptrtest.log +++ b/src/test/ref/ptrtest.log @@ -47,7 +47,7 @@ main::@return: scope:[main] from main::@4 lvalue: scope:[lvalue] from main *((const byte*) lvalue::SCREEN) ← (number) 1 *((const byte*) lvalue::SCREEN + (number) 1) ← (number) 2 - (byte) lvalue::i#0 ← (number) 2 + (byte) lvalue::i#0 ← (byte) 2 to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 (byte) lvalue::i#2 ← phi( lvalue/(byte) lvalue::i#0 lvalue::@2/(byte) lvalue::i#1 ) @@ -67,7 +67,7 @@ lvalue::@return: scope:[lvalue] from lvalue::@1 rvalue: scope:[rvalue] from main::@1 (byte) rvalue::b#0 ← *((const byte*) rvalue::SCREEN) (byte) rvalue::b#1 ← *((const byte*) rvalue::SCREEN + (number) 1) - (byte) rvalue::i#0 ← (number) 2 + (byte) rvalue::i#0 ← (byte) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 (byte) rvalue::b#4 ← phi( rvalue/(byte) rvalue::b#1 rvalue::@2/(byte) rvalue::b#2 ) @@ -91,7 +91,7 @@ rvalue::@return: scope:[rvalue] from rvalue::@3 (void()) lvaluevar() lvaluevar: scope:[lvaluevar] from main::@3 (byte*) lvaluevar::screen#0 ← (byte*)(number) $400 - (byte) lvaluevar::i#0 ← (number) 2 + (byte) lvaluevar::i#0 ← (byte) 2 to:lvaluevar::@1 lvaluevar::@1: scope:[lvaluevar] from lvaluevar lvaluevar::@2 (byte*) lvaluevar::screen#3 ← phi( lvaluevar/(byte*) lvaluevar::screen#0 lvaluevar::@2/(byte*) lvaluevar::screen#1 ) @@ -114,7 +114,7 @@ lvaluevar::@return: scope:[lvaluevar] from lvaluevar::@1 rvaluevar: scope:[rvaluevar] from main::@2 (byte*) rvaluevar::screen#0 ← (byte*)(number) $400 (byte) rvaluevar::b#0 ← (byte) 0 - (byte) rvaluevar::i#0 ← (number) 2 + (byte) rvaluevar::i#0 ← (byte) 2 to:rvaluevar::@1 rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2 (byte) rvaluevar::b#3 ← phi( rvaluevar/(byte) rvaluevar::b#0 rvaluevar::@2/(byte) rvaluevar::b#1 ) @@ -227,24 +227,16 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 1 in *((const byte*) lvalue::SCREEN) ← (number) 1 Adding number conversion cast (unumber) 2 in *((const byte*) lvalue::SCREEN + (number) 1) ← (number) 2 Adding number conversion cast (unumber) 1 in *((const byte*) lvalue::SCREEN + (number) 1) ← ((unumber)) (number) 2 -Adding number conversion cast (unumber) 2 in (byte) lvalue::i#0 ← (number) 2 Adding number conversion cast (unumber) $a in (bool~) lvalue::$0 ← (byte) lvalue::i#2 < (number) $a Adding number conversion cast (unumber) 3 in *((const byte*) lvalue::SCREEN + (byte) lvalue::i#3) ← (number) 3 Adding number conversion cast (unumber) 1 in (byte) rvalue::b#1 ← *((const byte*) rvalue::SCREEN + (number) 1) -Adding number conversion cast (unumber) 2 in (byte) rvalue::i#0 ← (number) 2 Adding number conversion cast (unumber) $a in (bool~) rvalue::$0 ← (byte) rvalue::i#2 < (number) $a -Adding number conversion cast (unumber) 2 in (byte) lvaluevar::i#0 ← (number) 2 Adding number conversion cast (unumber) $a in (bool~) lvaluevar::$0 ← (byte) lvaluevar::i#2 < (number) $a -Adding number conversion cast (unumber) 2 in (byte) rvaluevar::i#0 ← (number) 2 Adding number conversion cast (unumber) $a in (bool~) rvaluevar::$0 ← (byte) rvaluevar::i#2 < (number) $a Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const byte*) lvalue::SCREEN) ← (unumber)(number) 1 Inlining cast *((const byte*) lvalue::SCREEN + (unumber)(number) 1) ← (unumber)(number) 2 -Inlining cast (byte) lvalue::i#0 ← (unumber)(number) 2 Inlining cast *((const byte*) lvalue::SCREEN + (byte) lvalue::i#3) ← (unumber)(number) 3 -Inlining cast (byte) rvalue::i#0 ← (unumber)(number) 2 -Inlining cast (byte) lvaluevar::i#0 ← (unumber)(number) 2 -Inlining cast (byte) rvaluevar::i#0 ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024 @@ -253,31 +245,23 @@ Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 -Simplifying constant integer cast 2 Simplifying constant integer cast $a Simplifying constant integer cast 3 Simplifying constant integer cast 1 -Simplifying constant integer cast 2 Simplifying constant integer cast $a Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 Simplifying constant integer cast $a Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) lvalue::i#2 = (byte) lvalue::i#3 diff --git a/src/test/ref/ptrtestmin.log b/src/test/ref/ptrtestmin.log index 58384eaee..4e8fd68ec 100644 --- a/src/test/ref/ptrtestmin.log +++ b/src/test/ref/ptrtestmin.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 (byte) main::b#0 ← (byte) 0 - (byte) main::i#0 ← (number) 2 + (byte) main::i#0 ← (byte) 2 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::b#3 ← phi( main/(byte) main::b#0 main::@2/(byte) main::b#1 ) @@ -59,18 +59,13 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 2 in (byte) main::i#0 ← (number) 2 Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) main::i#2 < (number) $a Adding number conversion cast (unumber) $3e7 in *((const byte*) main::SCREEN + (number) $3e7) ← (byte) main::b#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 2 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 Simplifying constant integer cast $a Simplifying constant integer cast $3e7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a Finalized unsigned number type (word) $3e7 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/robozzle64-label-problem.asm b/src/test/ref/robozzle64-label-problem.asm index a945c6405..cde6955b5 100644 --- a/src/test/ref/robozzle64-label-problem.asm +++ b/src/test/ref/robozzle64-label-problem.asm @@ -15,10 +15,6 @@ main: { sta.z y __b1: ldx.z y - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u ldy #0 lda.z z1 @@ -27,10 +23,6 @@ main: { lda.z z1+1 sta (screen),y ldx.z y - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u ldy #SIZEOF_WORD lda.z z2 @@ -54,10 +46,13 @@ main: { // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word // mul8u(byte register(X) a) mul8u: { - .label b = $28 .label mb = 7 .label res = 5 .label return = 5 + lda #<$28 + sta.z mb + lda #>$28 + sta.z mb+1 lda #<0 sta.z res sta.z res+1 diff --git a/src/test/ref/robozzle64-label-problem.cfg b/src/test/ref/robozzle64-label-problem.cfg index 9b00b5e7a..91cec4e6e 100644 --- a/src/test/ref/robozzle64-label-problem.cfg +++ b/src/test/ref/robozzle64-label-problem.cfg @@ -40,11 +40,10 @@ main::@return: scope:[main] from main::@3 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from main::@1 main::@2 [20] (byte) mul8u::a#6 ← phi( main::@1/(byte) mul8u::a#1 main::@2/(byte) mul8u::a#2 ) - [20] (word) mul8u::mb#0 ← phi( main::@1/(const byte) mul8u::b#0 main::@2/(const byte) mul8u::b#1 ) to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [21] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [21] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [21] (word) mul8u::mb#2 ← phi( mul8u/(word) $28 mul8u::@3/(word) mul8u::mb#1 ) + [21] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [21] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) [22] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index 1db8f4718..69f1a7f64 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -19,8 +19,8 @@ CONTROL FLOW GRAPH SSA mul8u: scope:[mul8u] from main::@1 main::@3 (byte) mul8u::a#6 ← phi( main::@1/(byte) mul8u::a#1 main::@3/(byte) mul8u::a#2 ) (byte) mul8u::b#2 ← phi( main::@1/(byte) mul8u::b#0 main::@3/(byte) mul8u::b#1 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#2 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -194,7 +194,6 @@ SYMBOL TABLE SSA (word) mul8u::return#5 (word) mul8u::return#6 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (unumber)(number) 1 @@ -204,12 +203,10 @@ Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u: Adding number conversion cast (unumber) $28 in (byte) mul8u::b#0 ← (number) $28 Adding number conversion cast (unumber) $28 in (byte) mul8u::b#1 ← (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (byte) mul8u::b#0 ← (unumber)(number) $28 Inlining cast (byte) mul8u::b#1 ← (unumber)(number) $28 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -219,7 +216,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -230,7 +226,6 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) mul8u::$1 ← (byte) mul8u::a#4 & (byte) 1 Inversing boolean not [9] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [8] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification -Alias (word) mul8u::mb#0 = (byte) mul8u::b#2 Alias (byte) mul8u::a#3 = (byte) mul8u::a#4 (byte) mul8u::a#7 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#4 (word) mul8u::return#1 @@ -269,16 +264,31 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 6 Successful SSA optimization PassNFinalizeNumberTypeConversions Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const byte) mul8u::b#0 +Inlining constant with var siblings (const byte) mul8u::b#1 Inlining constant with var siblings (const word*) main::screen#0 Inlining constant with var siblings (const byte) main::y#0 Constant inlined main::screen#0 = (word*) 1024 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined main::y#0 = (byte) 0 +Constant inlined mul8u::b#1 = (byte) $28 +Constant inlined mul8u::b#0 = (byte) $28 Successful SSA optimization Pass2ConstantInlining Consolidated constant in assignment main::screen#2 Successful SSA optimization Pass2ConstantAdditionElimination Alias (word*) main::screen#1 = (word*) main::screen#3 Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) mul8u::b#2 (byte) $28 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [1] (word) mul8u::mb#0 ← (word)(byte) $28 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) mul8u::mb#0 = (word)$28 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const word) mul8u::mb#0 +Constant inlined mul8u::mb#0 = (word)(byte) $28 +Successful SSA optimization Pass2ConstantInlining +Simplifying constant integer cast $28 +Successful SSA optimization PassNCastSimplification Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4) Added new block during phi lifting main::@5(between main::@4 and main::@1) Adding NOP phi() at start of @begin @@ -291,18 +301,17 @@ CALL GRAPH Calls in [] to main:2 Calls in [main] to mul8u:9 mul8u:15 -Created 8 initial phi equivalence classes +Created 7 initial phi equivalence classes Coalesced [8] mul8u::a#8 ← mul8u::a#1 Coalesced [14] mul8u::a#9 ← mul8u::a#2 Coalesced [23] main::y#5 ← main::y#1 Coalesced [24] main::screen#6 ← main::screen#2 Coalesced [26] mul8u::a#10 ← mul8u::a#6 -Coalesced [27] mul8u::mb#6 ← mul8u::mb#0 -Coalesced [35] mul8u::res#9 ← mul8u::res#1 -Coalesced [39] mul8u::a#11 ← mul8u::a#0 -Coalesced [40] mul8u::res#7 ← mul8u::res#6 -Coalesced [41] mul8u::mb#7 ← mul8u::mb#1 -Coalesced (already) [42] mul8u::res#8 ← mul8u::res#2 +Coalesced [34] mul8u::res#9 ← mul8u::res#1 +Coalesced [38] mul8u::a#11 ← mul8u::a#0 +Coalesced [39] mul8u::res#7 ← mul8u::res#6 +Coalesced [40] mul8u::mb#6 ← mul8u::mb#1 +Coalesced (already) [41] mul8u::res#8 ← mul8u::res#2 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) @7 Culled Empty Block (label) main::@5 @@ -361,11 +370,10 @@ main::@return: scope:[main] from main::@3 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from main::@1 main::@2 [20] (byte) mul8u::a#6 ← phi( main::@1/(byte) mul8u::a#1 main::@2/(byte) mul8u::a#2 ) - [20] (word) mul8u::mb#0 ← phi( main::@1/(const byte) mul8u::b#0 main::@2/(const byte) mul8u::b#1 ) to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [21] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [21] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [21] (word) mul8u::mb#2 ← phi( mul8u/(word) $28 mul8u::@3/(word) mul8u::mb#1 ) + [21] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [21] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) [22] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -408,9 +416,8 @@ VARIABLE REGISTER WEIGHTS (byte) mul8u::a#6 24.0 (byte) mul8u::b (word) mul8u::mb -(word) mul8u::mb#0 2.0 (word) mul8u::mb#1 202.0 -(word) mul8u::mb#2 43.57142857142858 +(word) mul8u::mb#2 43.285714285714285 (word) mul8u::res (word) mul8u::res#1 202.0 (word) mul8u::res#2 46.42857142857143 @@ -424,7 +431,7 @@ Initial phi equivalence classes [ main::screen#1 main::screen#2 ] [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +[ mul8u::mb#2 mul8u::mb#1 ] Added variable mul8u::return#2 to live range equivalence class [ mul8u::return#2 ] Added variable main::z1#0 to live range equivalence class [ main::z1#0 ] Added variable mul8u::return#3 to live range equivalence class [ mul8u::return#3 ] @@ -435,7 +442,7 @@ Complete equivalence classes [ main::screen#1 main::screen#2 ] [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +[ mul8u::mb#2 mul8u::mb#1 ] [ mul8u::return#2 ] [ main::z1#0 ] [ mul8u::return#3 ] @@ -445,7 +452,7 @@ Allocated zp[1]:2 [ main::y#2 main::y#1 ] Allocated zp[2]:3 [ main::screen#1 main::screen#2 ] Allocated zp[1]:5 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] Allocated zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -Allocated zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] Allocated zp[2]:10 [ mul8u::return#2 ] Allocated zp[2]:12 [ main::z1#0 ] Allocated zp[2]:14 [ mul8u::return#3 ] @@ -508,11 +515,6 @@ main: { // [20] phi from main::@1 to mul8u [phi:main::@1->mul8u] mul8u_from___b1: // [20] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy - // [20] phi (word) mul8u::mb#0 = (const byte) mul8u::b#0 [phi:main::@1->mul8u#1] -- vwuz1=vbuc1 - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u // [8] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -541,11 +543,6 @@ main: { // [20] phi from main::@2 to mul8u [phi:main::@2->mul8u] mul8u_from___b2: // [20] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy - // [20] phi (word) mul8u::mb#0 = (const byte) mul8u::b#1 [phi:main::@2->mul8u#1] -- vwuz1=vbuc1 - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u // [13] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -591,17 +588,20 @@ main: { // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word // mul8u(byte zp(5) a) mul8u: { - .label b = $28 .label __1 = $12 - .label mb = 8 .label a = 5 + .label mb = 8 .label res = 6 .label return = $a .label return_1 = $e // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [21] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [21] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [21] phi (word) mul8u::mb#2 = (word) $28 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 + lda #<$28 + sta.z mb + lda #>$28 + sta.z mb+1 + // [21] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -686,7 +686,7 @@ Potential registers zp[1]:2 [ main::y#2 main::y#1 ] : zp[1]:2 , reg byte x , Potential registers zp[2]:3 [ main::screen#1 main::screen#2 ] : zp[2]:3 , Potential registers zp[1]:5 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] : zp[1]:5 , reg byte x , reg byte y , Potential registers zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:6 , -Potential registers zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:8 , +Potential registers zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] : zp[2]:8 , Potential registers zp[2]:10 [ mul8u::return#2 ] : zp[2]:10 , Potential registers zp[2]:12 [ main::z1#0 ] : zp[2]:12 , Potential registers zp[2]:14 [ mul8u::return#3 ] : zp[2]:14 , @@ -694,21 +694,21 @@ Potential registers zp[2]:16 [ main::z2#0 ] : zp[2]:16 , Potential registers zp[1]:18 [ mul8u::$1 ] : zp[1]:18 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [mul8u] 349.43: zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 247.57: zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 236.67: zp[1]:5 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 202: zp[1]:18 [ mul8u::$1 ] 22: zp[2]:10 [ mul8u::return#2 ] 22: zp[2]:14 [ mul8u::return#3 ] +Uplift Scope [mul8u] 349.43: zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 245.29: zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] 236.67: zp[1]:5 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 202: zp[1]:18 [ mul8u::$1 ] 22: zp[2]:10 [ mul8u::return#2 ] 22: zp[2]:14 [ mul8u::return#3 ] Uplift Scope [main] 22: zp[2]:12 [ main::z1#0 ] 22: zp[2]:16 [ main::z2#0 ] 20.17: zp[1]:2 [ main::y#2 main::y#1 ] 11.33: zp[2]:3 [ main::screen#1 main::screen#2 ] Uplift Scope [] -Uplifting [mul8u] best 9036 combination zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::$1 ] zp[2]:10 [ mul8u::return#2 ] zp[2]:14 [ mul8u::return#3 ] -Uplifting [main] best 9036 combination zp[2]:12 [ main::z1#0 ] zp[2]:16 [ main::z2#0 ] zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:3 [ main::screen#1 main::screen#2 ] -Uplifting [] best 9036 combination +Uplifting [mul8u] best 10016 combination zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::$1 ] zp[2]:10 [ mul8u::return#2 ] zp[2]:14 [ mul8u::return#3 ] +Uplifting [main] best 10016 combination zp[2]:12 [ main::z1#0 ] zp[2]:16 [ main::z2#0 ] zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:3 [ main::screen#1 main::screen#2 ] +Uplifting [] best 10016 combination Attempting to uplift remaining variables inzp[1]:2 [ main::y#2 main::y#1 ] -Uplifting [main] best 9036 combination zp[1]:2 [ main::y#2 main::y#1 ] +Uplifting [main] best 10016 combination zp[1]:2 [ main::y#2 main::y#1 ] Coalescing zero page register [ zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:10 [ mul8u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp[2]:14 [ mul8u::return#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 ] ] with [ zp[2]:12 [ main::z1#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 main::z1#0 ] ] with [ zp[2]:16 [ main::z2#0 ] ] - score: 1 Allocated (was zp[2]:6) zp[2]:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 main::z1#0 main::z2#0 ] -Allocated (was zp[2]:8) zp[2]:7 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated (was zp[2]:8) zp[2]:7 [ mul8u::mb#2 mul8u::mb#1 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -764,11 +764,6 @@ main: { // [20] phi from main::@1 to mul8u [phi:main::@1->mul8u] mul8u_from___b1: // [20] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy - // [20] phi (word) mul8u::mb#0 = (const byte) mul8u::b#0 [phi:main::@1->mul8u#1] -- vwuz1=vbuc1 - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u // [8] (word) mul8u::return#2 ← (word) mul8u::res#2 jmp __b2 @@ -788,11 +783,6 @@ main: { // [20] phi from main::@2 to mul8u [phi:main::@2->mul8u] mul8u_from___b2: // [20] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy - // [20] phi (word) mul8u::mb#0 = (const byte) mul8u::b#1 [phi:main::@2->mul8u#1] -- vwuz1=vbuc1 - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u // [13] (word) mul8u::return#3 ← (word) mul8u::res#2 jmp __b3 @@ -830,14 +820,17 @@ main: { // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word // mul8u(byte register(X) a) mul8u: { - .label b = $28 .label mb = 7 .label res = 5 .label return = 5 // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [21] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [21] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [21] phi (word) mul8u::mb#2 = (word) $28 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 + lda #<$28 + sta.z mb + lda #>$28 + sta.z mb+1 + // [21] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -975,12 +968,9 @@ FINAL SYMBOL TABLE (byte) mul8u::a#3 reg byte x 67.66666666666666 (byte) mul8u::a#6 reg byte x 24.0 (byte) mul8u::b -(const byte) mul8u::b#0 b = (byte) $28 -(const byte) mul8u::b#1 b = (byte) $28 (word) mul8u::mb -(word) mul8u::mb#0 mb zp[2]:7 2.0 (word) mul8u::mb#1 mb zp[2]:7 202.0 -(word) mul8u::mb#2 mb zp[2]:7 43.57142857142858 +(word) mul8u::mb#2 mb zp[2]:7 43.285714285714285 (word) mul8u::res (word) mul8u::res#1 res zp[2]:5 202.0 (word) mul8u::res#2 res zp[2]:5 46.42857142857143 @@ -993,12 +983,12 @@ zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:3 [ main::screen#1 main::screen#2 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] zp[2]:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 main::z1#0 main::z2#0 ] -zp[2]:7 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +zp[2]:7 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] FINAL ASSEMBLER -Score: 6994 +Score: 7974 // File Comments // Upstart @@ -1040,11 +1030,6 @@ main: { // [7] call mul8u // [20] phi from main::@1 to mul8u [phi:main::@1->mul8u] // [20] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:main::@1->mul8u#0] -- register_copy - // [20] phi (word) mul8u::mb#0 = (const byte) mul8u::b#0 [phi:main::@1->mul8u#1] -- vwuz1=vbuc1 - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u // mul8u(y,40) // [8] (word) mul8u::return#2 ← (word) mul8u::res#2 @@ -1065,11 +1050,6 @@ main: { // [12] call mul8u // [20] phi from main::@2 to mul8u [phi:main::@2->mul8u] // [20] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:main::@2->mul8u#0] -- register_copy - // [20] phi (word) mul8u::mb#0 = (const byte) mul8u::b#1 [phi:main::@2->mul8u#1] -- vwuz1=vbuc1 - lda #mul8u.b - sta.z mul8u.mb+1 jsr mul8u // mul8u(y,40) // [13] (word) mul8u::return#3 ← (word) mul8u::res#2 @@ -1109,13 +1089,16 @@ main: { // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word // mul8u(byte register(X) a) mul8u: { - .label b = $28 .label mb = 7 .label res = 5 .label return = 5 // [21] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [21] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [21] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [21] phi (word) mul8u::mb#2 = (word) $28 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 + lda #<$28 + sta.z mb + lda #>$28 + sta.z mb+1 + // [21] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res sta.z res+1 diff --git a/src/test/ref/robozzle64-label-problem.sym b/src/test/ref/robozzle64-label-problem.sym index 4b34483a7..9a4705163 100644 --- a/src/test/ref/robozzle64-label-problem.sym +++ b/src/test/ref/robozzle64-label-problem.sym @@ -31,12 +31,9 @@ (byte) mul8u::a#3 reg byte x 67.66666666666666 (byte) mul8u::a#6 reg byte x 24.0 (byte) mul8u::b -(const byte) mul8u::b#0 b = (byte) $28 -(const byte) mul8u::b#1 b = (byte) $28 (word) mul8u::mb -(word) mul8u::mb#0 mb zp[2]:7 2.0 (word) mul8u::mb#1 mb zp[2]:7 202.0 -(word) mul8u::mb#2 mb zp[2]:7 43.57142857142858 +(word) mul8u::mb#2 mb zp[2]:7 43.285714285714285 (word) mul8u::res (word) mul8u::res#1 res zp[2]:5 202.0 (word) mul8u::res#2 res zp[2]:5 46.42857142857143 @@ -49,5 +46,5 @@ zp[1]:2 [ main::y#2 main::y#1 ] zp[2]:3 [ main::screen#1 main::screen#2 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] zp[2]:5 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 main::z1#0 main::z2#0 ] -zp[2]:7 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +zp[2]:7 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] diff --git a/src/test/ref/roll-sprite-msb.cfg b/src/test/ref/roll-sprite-msb.cfg index 354a1cec8..7c8b48071 100644 --- a/src/test/ref/roll-sprite-msb.cfg +++ b/src/test/ref/roll-sprite-msb.cfg @@ -13,7 +13,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 - [5] (word) main::xpos#2 ← phi( main/(byte) $c8 main::@2/(word) main::xpos#1 ) + [5] (word) main::xpos#2 ← phi( main/(word) $c8 main::@2/(word) main::xpos#1 ) [5] (byte) main::s#2 ← phi( main/(byte) 0 main::@2/(byte) main::s#1 ) [6] (byte) position_sprite::spriteno#0 ← (byte) main::s#2 [7] (word) position_sprite::x#0 ← (word) main::xpos#2 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index bf4549d4c..67d99883b 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @6 - (word) main::xpos#0 ← (number) $c8 + (word) main::xpos#0 ← (word) $c8 (byte) main::s#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -117,7 +117,6 @@ SYMBOL TABLE SSA (byte) position_sprite::y#0 (byte) position_sprite::y#1 -Adding number conversion cast (unumber) $c8 in (word) main::xpos#0 ← (number) $c8 Adding number conversion cast (unumber) $32 in (byte) position_sprite::y#0 ← (number) $32 Adding number conversion cast (unumber) $a in (word) main::xpos#1 ← (word) main::xpos#3 + (number) $a Adding number conversion cast (unumber) 2 in (number~) position_sprite::$0 ← (byte) position_sprite::spriteno#1 * (number) 2 @@ -132,13 +131,11 @@ Adding number conversion cast (unumber) position_sprite::$4 in (number~) positio Adding number conversion cast (unumber) $ff in (number~) position_sprite::$5 ← (unumber~) position_sprite::$4 ^ (number) $ff Adding number conversion cast (unumber) position_sprite::$5 in (number~) position_sprite::$5 ← (unumber~) position_sprite::$4 ^ (unumber)(number) $ff Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) main::xpos#0 ← (unumber)(number) $c8 Inlining cast (byte) position_sprite::y#0 ← (unumber)(number) $32 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 53249 Simplifying constant pointer cast (byte*) 53264 -Simplifying constant integer cast $c8 Simplifying constant integer cast $32 Simplifying constant integer cast $a Simplifying constant integer cast 2 @@ -148,7 +145,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $ff Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $c8 Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 2 @@ -194,7 +190,7 @@ Rewriting multiplication to use shift [8] (byte~) position_sprite::$1 ← (byte) Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) main::xpos#0 Inlining constant with var siblings (const byte) main::s#0 -Constant inlined main::xpos#0 = (byte) $c8 +Constant inlined main::xpos#0 = (word) $c8 Constant inlined main::s#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@4(between main::@3 and main::@1) @@ -237,7 +233,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 - [5] (word) main::xpos#2 ← phi( main/(byte) $c8 main::@2/(word) main::xpos#1 ) + [5] (word) main::xpos#2 ← phi( main/(word) $c8 main::@2/(word) main::xpos#1 ) [5] (byte) main::s#2 ← phi( main/(byte) 0 main::@2/(byte) main::s#1 ) [6] (byte) position_sprite::spriteno#0 ← (byte) main::s#2 [7] (word) position_sprite::x#0 ← (word) main::xpos#2 @@ -358,7 +354,7 @@ main: { .label s = 2 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (word) main::xpos#2 = (byte) $c8 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi (word) main::xpos#2 = (word) $c8 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<$c8 sta.z xpos lda #>$c8 @@ -574,7 +570,7 @@ main: { .label xpos = 2 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (word) main::xpos#2 = (byte) $c8 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi (word) main::xpos#2 = (word) $c8 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<$c8 sta.z xpos lda #>$c8 @@ -784,7 +780,7 @@ Score: 555 main: { .label xpos = 2 // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (word) main::xpos#2 = (byte) $c8 [phi:main->main::@1#0] -- vwuz1=vbuc1 + // [5] phi (word) main::xpos#2 = (word) $c8 [phi:main->main::@1#0] -- vwuz1=vwuc1 lda #<$c8 sta.z xpos lda #>$c8 diff --git a/src/test/ref/sandbox.cfg b/src/test/ref/sandbox.cfg index 055b77bea..290e3f5a0 100644 --- a/src/test/ref/sandbox.cfg +++ b/src/test/ref/sandbox.cfg @@ -119,7 +119,7 @@ divr16u: scope:[divr16u] from div16u to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [60] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [60] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [60] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [60] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [60] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) [61] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 diff --git a/src/test/ref/sandbox.log b/src/test/ref/sandbox.log index 92d96fa74..c1cb203ea 100644 --- a/src/test/ref/sandbox.log +++ b/src/test/ref/sandbox.log @@ -80,7 +80,7 @@ divr16u: scope:[divr16u] from div16u (word) divr16u::divisor#5 ← phi( div16u/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -206,7 +206,7 @@ append::@return: scope:[append] from append::@3 utoa: scope:[utoa] from myprintf::@9 (byte*) utoa::dst#15 ← phi( myprintf::@9/(byte*) utoa::dst#5 ) (word) utoa::value#5 ← phi( myprintf::@9/(word) utoa::value#4 ) - (byte) utoa::bStarted#0 ← (number) 0 + (byte) utoa::bStarted#0 ← (byte) 0 (bool~) utoa::$0 ← (byte) utoa::bStarted#0 == (number) 1 (bool~) utoa::$1 ← (word) utoa::value#5 >= (number) $2710 (bool~) utoa::$2 ← (bool~) utoa::$0 || (bool~) utoa::$1 @@ -331,9 +331,9 @@ myprintf: scope:[myprintf] from main::@18 main::@6 (word) myprintf::w1#7 ← phi( main::@18/(word) myprintf::w1#1 main::@6/(word) myprintf::w1#0 ) (byte*) myprintf::dst#22 ← phi( main::@18/(byte*) myprintf::dst#1 main::@6/(byte*) myprintf::dst#0 ) (byte*) myprintf::str#6 ← phi( main::@18/(byte*) myprintf::str#2 main::@6/(byte*) myprintf::str#1 ) - (byte) myprintf::bArg#0 ← (number) 0 - (byte) myprintf::bFormat#0 ← (number) 0 - (byte) myprintf::bLen#0 ← (number) 0 + (byte) myprintf::bArg#0 ← (byte) 0 + (byte) myprintf::bFormat#0 ← (byte) 0 + (byte) myprintf::bLen#0 ← (byte) 0 (byte) myprintf::bLeadZero#0 ← (byte) 0 (byte) myprintf::bDigits#0 ← (byte) 0 (byte) myprintf::bTrailing#0 ← (byte) 0 @@ -2367,7 +2367,6 @@ SYMBOL TABLE SSA (const byte*) zp1 = (byte*)(number) $61 (const byte*) zp2 = (byte*)(number) $62 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -2377,7 +2376,6 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) utoa::bStarted#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (bool~) utoa::$0 ← (byte) utoa::bStarted#0 == (number) 1 Adding number conversion cast (unumber) $2710 in (bool~) utoa::$1 ← (word) utoa::value#5 >= (number) $2710 Adding number conversion cast (unumber) 1 in (bool~) utoa::$4 ← (byte) utoa::bStarted#5 == (number) 1 @@ -2395,9 +2393,6 @@ Adding number conversion cast (unumber) 1 in (byte) utoa::bStarted#3 ← (number Adding number conversion cast (unumber) 0 in *((byte*) utoa::dst#3) ← (number) 0 Adding number conversion cast (unumber) $a in (word) append::sub#3 ← (number) $a Adding number conversion cast (unumber) 1 in (byte) utoa::bStarted#4 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) myprintf::bArg#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) myprintf::bFormat#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) myprintf::bLen#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) myprintf::$0 ← *((byte*) myprintf::str#3) != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) myprintf::$1 ← (byte) myprintf::bFormat#3 != (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) myprintf::dst#2 + (byte) myprintf::bLen#8) ← (number) 0 @@ -2512,9 +2507,7 @@ Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (unumber) $57 in (unumber~) myprintf::$22 ← (number) $57 Adding number conversion cast (unumber) $57 in (unumber~) myprintf::$29 ← (number) $57 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (byte) utoa::bStarted#0 ← (unumber)(number) 0 Inlining cast (word) append::sub#0 ← (unumber)(number) $2710 Inlining cast (byte) utoa::bStarted#1 ← (unumber)(number) 1 Inlining cast (word) append::sub#1 ← (unumber)(number) $3e8 @@ -2525,9 +2518,6 @@ Inlining cast (byte~) utoa::$16 ← (byte)(word) utoa::value#12 Inlining cast *((byte*) utoa::dst#3) ← (unumber)(number) 0 Inlining cast (word) append::sub#3 ← (unumber)(number) $a Inlining cast (byte) utoa::bStarted#4 ← (unumber)(number) 1 -Inlining cast (byte) myprintf::bArg#0 ← (unumber)(number) 0 -Inlining cast (byte) myprintf::bFormat#0 ← (unumber)(number) 0 -Inlining cast (byte) myprintf::bLen#0 ← (unumber)(number) 0 Inlining cast *((byte*) myprintf::dst#2 + (byte) myprintf::bLen#8) ← (unumber)(number) 0 Inlining cast (byte) myprintf::bLeadZero#1 ← (unumber)(number) 1 Inlining cast (byte) myprintf::bTrailing#1 ← (unumber)(number) 1 @@ -2566,7 +2556,6 @@ Simplifying constant pointer cast (byte*) 98 Simplifying constant pointer cast (byte*) 161 Simplifying constant pointer cast (byte*) 162 Simplifying constant pointer cast (byte*) 53272 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2574,7 +2563,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $2710 Simplifying constant integer cast 1 @@ -2595,9 +2583,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -2651,7 +2636,6 @@ Simplifying constant integer cast $c8 Simplifying constant integer cast 8 Simplifying constant integer cast $4d2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2659,7 +2643,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $2710 Finalized unsigned number type (byte) 1 @@ -2680,9 +2663,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -3234,7 +3214,7 @@ Constant inlined myprintf::bLeadZero#1 = (byte) 1 Constant inlined myprintf::digit#1 = (byte) 0 Constant inlined myprintf::bDigits#31 = (byte) 1 Constant inlined myprintf::dst#1 = (const byte*) strTemp -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined myprintf::dst#0 = (const byte*) strTemp Constant inlined myprintf::bArg#0 = (byte) 0 Constant inlined myprintf::bLeadZero#2 = (byte) 0 @@ -3644,7 +3624,7 @@ divr16u: scope:[divr16u] from div16u to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [60] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [60] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [60] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [60] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [60] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) [61] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 @@ -4814,7 +4794,7 @@ divr16u: { // [60] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [60] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [60] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -6754,7 +6734,7 @@ divr16u: { __b1_from_divr16u: // [60] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [60] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [60] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -8779,7 +8759,7 @@ divr16u: { // [60] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [60] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [60] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [60] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/scan-desire-problem.cfg b/src/test/ref/scan-desire-problem.cfg index 5cfb301e1..d4b829448 100644 --- a/src/test/ref/scan-desire-problem.cfg +++ b/src/test/ref/scan-desire-problem.cfg @@ -78,8 +78,8 @@ mul8u: scope:[mul8u] from draw_block [45] phi() to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [46] (word) mul8u::mb#2 ← phi( mul8u/(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [46] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [46] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) + [46] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [46] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [47] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 8d6cd5c8b..e304b7beb 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -97,8 +97,8 @@ memset::@return: scope:[memset] from memset::@1 mul8u: scope:[mul8u] from draw_block (byte) mul8u::a#5 ← phi( draw_block/(byte) mul8u::a#1 ) (byte) mul8u::b#1 ← phi( draw_block/(byte) mul8u::b#0 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#1 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#1 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -147,7 +147,7 @@ main: scope:[main] from @25 call init to:main::@15 main::@15: scope:[main] from main - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@15 main::@6 (byte) main::x#2 ← phi( main::@15/(byte) main::x#0 main::@6/(byte) main::x#1 ) @@ -156,7 +156,7 @@ main::@1: scope:[main] from main::@15 main::@6 to:main::@13 main::@2: scope:[main] from main::@1 (byte) main::x#7 ← phi( main::@1/(byte) main::x#2 ) - (byte) main::y#0 ← (number) 0 + (byte) main::y#0 ← (byte) 0 to:main::@4 main::@4: scope:[main] from main::@16 main::@2 (byte) main::x#5 ← phi( main::@16/(byte) main::x#6 main::@2/(byte) main::x#7 ) @@ -319,20 +319,20 @@ SYMBOL TABLE SSA (const byte*) BGCOL2 = (byte*)(number) $d022 (const byte*) BGCOL3 = (byte*)(number) $d023 (const byte*) BGCOL4 = (byte*)(number) $d024 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*)(number) $d020 (const byte*) D018 = (byte*)(number) $d018 -(const byte) GREEN = (number) 5 -(const byte) RED = (number) 2 +(const byte) GREEN = (byte) 5 +(const byte) RED = (byte) 2 (const byte*) SPRITES_COLS = (byte*)(number) $d027 (const byte*) SPRITES_ENABLE = (byte*)(number) $d015 (const byte*) SPRITES_EXPAND_X = (byte*)(number) $d01d (const byte*) SPRITES_EXPAND_Y = (byte*)(number) $d017 (const byte*) SPRITES_MC = (byte*)(number) $d01c (const byte*) SPRITES_XMSB = (byte*)(number) $d010 -(const byte) WHITE = (number) 1 -(const byte) YELLOW = (number) 7 +(const byte) WHITE = (byte) 1 +(const byte) YELLOW = (byte) 7 (const byte*) charset = (byte*)(number) $2000 (const byte*) colors = (byte*)(number) $d800 (void()) draw_block((byte) draw_block::tileno , (byte) draw_block::x , (byte) draw_block::y , (byte) draw_block::color) @@ -531,16 +531,13 @@ SYMBOL TABLE SSA (const byte*) tileset = (byte*)(number) $2800 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 Adding number conversion cast (unumber) $10 in (bool~) main::$1 ← (byte) main::x#2 < (number) $10 -Adding number conversion cast (unumber) 0 in (byte) main::y#0 ← (number) 0 Adding number conversion cast (unumber) 9 in (bool~) main::$2 ← (byte) main::y#2 < (number) 9 Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 @@ -582,9 +579,6 @@ Adding number conversion cast (unumber) draw_block::$10 in (number~) draw_block: Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 -Inlining cast (byte) main::y#0 ← (unumber)(number) 0 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast (word) memset::num#1 ← (unumber)(number) $3e8 @@ -619,14 +613,11 @@ Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (byte*) 12288 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $10 -Simplifying constant integer cast 0 Simplifying constant integer cast 9 Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 @@ -656,14 +647,11 @@ Simplifying constant integer cast $29 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 @@ -716,7 +704,6 @@ Alias (byte) memset::c#2 = (byte) memset::c#3 Alias (byte*) memset::dst#2 = (byte*) memset::dst#3 Alias (byte*) memset::end#1 = (byte*) memset::end#2 Alias (void*) memset::str#5 = (void*) memset::str#6 -Alias (word) mul8u::mb#0 = (byte) mul8u::b#1 Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 @@ -743,7 +730,7 @@ Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#5 (void*) memset::str#3 Identical Phi Values (byte) memset::c#2 (byte) memset::c#4 -Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 +Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 Identical Phi Values (byte) main::x#3 (byte) main::x#2 Identical Phi Values (byte) draw_block::tileno#2 (byte) draw_block::tileno#0 @@ -773,6 +760,7 @@ Constant (const byte*) init::toD0181_screen#0 = screen Constant (const byte*) init::toD0181_gfx#0 = charset Constant (const byte) mul8u::b#0 = $28 Successful SSA optimization Pass2ConstantIdentification +Constant (const word) mul8u::mb#0 = (word)mul8u::b#0 Constant (const word) init::toD0181_$0 = (word)init::toD0181_screen#0 Constant (const word) init::toD0181_$4 = (word)init::toD0181_gfx#0 Successful SSA optimization Pass2ConstantIdentification @@ -825,6 +813,7 @@ Inlining constant with var siblings (const void*) memset::str#1 Inlining constant with var siblings (const byte) memset::c#1 Inlining constant with var siblings (const word) memset::num#1 Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const word) mul8u::mb#0 Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::y#0 Constant inlined init::toD0181_gfx#0 = (const byte*) charset @@ -835,6 +824,7 @@ Constant inlined init::toD0181_$0 = (word)(const byte*) screen Constant inlined memset::str#0 = (void*)(const byte*) screen Constant inlined init::toD0181_$1 = (word)(const byte*) screen&(word) $3fff Constant inlined init::toD0181_$6 = >(word)(const byte*) charset/(byte) 4 +Constant inlined mul8u::mb#0 = (word)(const byte) mul8u::b#0 Constant inlined init::toD0181_$7 = >(word)(const byte*) charset/(byte) 4&(byte) $f Constant inlined init::toD0181_$4 = (word)(const byte*) charset Constant inlined init::toD0181_$5 = >(word)(const byte*) charset @@ -842,7 +832,7 @@ Constant inlined memset::num#1 = (word) $3e8 Constant inlined main::x#0 = (byte) 0 Constant inlined memset::num#0 = (word) $3e8 Constant inlined main::y#0 = (byte) 0 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined memset::c#0 = (byte) 0 Constant inlined memset::c#1 = (const byte) BLACK Constant inlined init::toD0181_screen#0 = (const byte*) screen @@ -1005,8 +995,8 @@ mul8u: scope:[mul8u] from draw_block [45] phi() to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [46] (word) mul8u::mb#2 ← phi( mul8u/(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [46] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [46] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) + [46] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [46] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [47] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -1568,12 +1558,12 @@ mul8u: { .label return = $17 // [46] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [46] phi (word) mul8u::mb#2 = (const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [46] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #b sta.z mb+1 - // [46] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [46] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -2245,12 +2235,12 @@ mul8u: { .label return = 4 // [46] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [46] phi (word) mul8u::mb#2 = (const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [46] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #b sta.z mb+1 - // [46] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [46] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -2554,20 +2544,20 @@ FINAL SYMBOL TABLE (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 (const byte*) BGCOL4 = (byte*) 53284 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D018 = (byte*) 53272 -(const byte) GREEN = (number) 5 -(const byte) RED = (number) 2 +(const byte) GREEN = (byte) 5 +(const byte) RED = (byte) 2 (const byte*) SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 (const byte*) SPRITES_EXPAND_Y = (byte*) 53271 (const byte*) SPRITES_MC = (byte*) 53276 (const byte*) SPRITES_XMSB = (byte*) 53264 -(const byte) WHITE = (number) 1 -(const byte) YELLOW = (number) 7 +(const byte) WHITE = (byte) 1 +(const byte) YELLOW = (byte) 7 (const byte*) charset = (byte*) 8192 (const byte*) colors = (byte*) 55296 (void()) draw_block((byte) draw_block::tileno , (byte) draw_block::x , (byte) draw_block::y , (byte) draw_block::color) @@ -2970,12 +2960,12 @@ mul8u: { .label res = 4 .label return = 4 // [46] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [46] phi (word) mul8u::mb#2 = (const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [46] phi (word) mul8u::mb#2 = (word)(const byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #b sta.z mb+1 - // [46] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [46] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res sta.z res+1 diff --git a/src/test/ref/scan-desire-problem.sym b/src/test/ref/scan-desire-problem.sym index 1160d1c54..4f6ac0934 100644 --- a/src/test/ref/scan-desire-problem.sym +++ b/src/test/ref/scan-desire-problem.sym @@ -5,20 +5,20 @@ (const byte*) BGCOL2 = (byte*) 53282 (const byte*) BGCOL3 = (byte*) 53283 (const byte*) BGCOL4 = (byte*) 53284 -(const byte) BLACK = (number) 0 -(const byte) BLUE = (number) 6 +(const byte) BLACK = (byte) 0 +(const byte) BLUE = (byte) 6 (const byte*) BORDERCOL = (byte*) 53280 (const byte*) D018 = (byte*) 53272 -(const byte) GREEN = (number) 5 -(const byte) RED = (number) 2 +(const byte) GREEN = (byte) 5 +(const byte) RED = (byte) 2 (const byte*) SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_EXPAND_X = (byte*) 53277 (const byte*) SPRITES_EXPAND_Y = (byte*) 53271 (const byte*) SPRITES_MC = (byte*) 53276 (const byte*) SPRITES_XMSB = (byte*) 53264 -(const byte) WHITE = (number) 1 -(const byte) YELLOW = (number) 7 +(const byte) WHITE = (byte) 1 +(const byte) YELLOW = (byte) 7 (const byte*) charset = (byte*) 8192 (const byte*) colors = (byte*) 55296 (void()) draw_block((byte) draw_block::tileno , (byte) draw_block::x , (byte) draw_block::y , (byte) draw_block::color) diff --git a/src/test/ref/screen-center-angle.cfg b/src/test/ref/screen-center-angle.cfg index 1dc567fb4..04ac545d1 100644 --- a/src/test/ref/screen-center-angle.cfg +++ b/src/test/ref/screen-center-angle.cfg @@ -179,7 +179,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [84] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [85] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [85] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [85] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [85] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [85] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index 4eb65d93a..767ee440b 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -112,7 +112,7 @@ init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex:: (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_lo#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) (byte*) init_font_hex::proto_hi#4 ← phi( init_font_hex::@1/(byte*) init_font_hex::proto_hi#6 init_font_hex::@4/(byte*) init_font_hex::proto_hi#5 ) (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) - (byte) init_font_hex::idx#0 ← (number) 0 + (byte) init_font_hex::idx#0 ← (byte) 0 *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (number) 0 (byte) init_font_hex::idx#1 ← ++ (byte) init_font_hex::idx#0 (byte) init_font_hex::i#0 ← (byte) 0 @@ -209,7 +209,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 ) (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 - (word) atan2_16::angle#0 ← (number) 0 + (word) atan2_16::angle#0 ← (word) 0 (byte) atan2_16::i#0 ← (byte) 0 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6 @@ -574,8 +574,8 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - (byte) init_angle_screen::x#0 ← (number) 0 - (byte) init_angle_screen::xb#0 ← (number) $27 + (byte) init_angle_screen::x#0 ← (byte) 0 + (byte) init_angle_screen::xb#0 ← (byte) $27 to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@9 (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 ) @@ -657,18 +657,18 @@ SYMBOL TABLE SSA (const dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 (const byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e (const byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f -(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (number) 0 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (number) 0 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const byte) CIA_TIMER_CONTROL_STOP = (number) 0 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const byte) CIA_TIMER_CONTROL_STOP = (byte) 0 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -1192,8 +1190,6 @@ Adding number conversion cast (unumber) main::toD0182_$7 in (number~) main::toD0 Adding number conversion cast (unumber) main::toD0182_$8 in (number~) main::toD0182_$8 ← (unumber~) main::toD0182_$3 | (unumber~) main::toD0182_$7 Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c -Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2 @@ -1211,18 +1207,14 @@ Adding number conversion cast (unumber) init_angle_screen::$15 in (number~) init Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28 Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) init_font_hex::idx#0 ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#0) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#6) ← (unumber)(number) 0 Inlining cast *((byte*) init_font_hex::charset#4 + (byte) init_font_hex::idx#3) ← (unumber)(number) 0 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast *((const dword*) CIA2_TIMER_AB) ← (unumber)(number) $ffffffff Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (word~) main::toD0182_$0 ← (word)(byte*) main::toD0182_screen#1 Inlining cast (word~) main::toD0182_$4 ← (word)(byte*) main::toD0182_gfx#1 -Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Successful SSA optimization Pass2InlineCast @@ -1230,92 +1222,11 @@ Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (dword*) 56580 Simplifying constant pointer cast (byte*) 56590 Simplifying constant pointer cast (byte*) 56591 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 6 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 7 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 3 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 2 -Simplifying constant integer cast 5 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 2 -Simplifying constant integer cast 6 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 5 -Simplifying constant integer cast 6 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 -Simplifying constant integer cast 7 -Simplifying constant integer cast 4 -Simplifying constant integer cast 6 -Simplifying constant integer cast 4 -Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 4096 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -1326,7 +1237,6 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -1355,8 +1265,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -1370,7 +1278,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -1380,7 +1287,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 5 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -1410,8 +1316,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -1744,7 +1648,7 @@ Constant inlined init_angle_screen::x#0 = (byte) 0 Constant inlined main::toD0182_$6 = >(word)(const byte*) main::BASE_CHARSET/(byte) 4 Constant inlined main::toD0182_$7 = >(word)(const byte*) main::BASE_CHARSET/(byte) 4&(byte) $f Constant inlined main::toD0182_$0 = (word)(const byte*) main::BASE_SCREEN -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined main::toD0182_$1 = (word)(const byte*) main::BASE_SCREEN&(word) $3fff Constant inlined init_angle_screen::screen_bottomline#0 = (const byte*) SCREEN+(word)(number) $28*(number) $c Constant inlined main::toD0182_$2 = (word)(const byte*) main::BASE_SCREEN&(word) $3fff*(byte) 4 @@ -2101,7 +2005,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [84] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [85] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [85] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [85] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [85] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [85] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -3161,7 +3065,7 @@ atan2_16: { __b6: // [85] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [85] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [85] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -4483,7 +4387,7 @@ atan2_16: { __b6: // [85] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [85] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [85] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -5111,13 +5015,13 @@ FINAL SYMBOL TABLE (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iatan2_16::@10] - // [85] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [85] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 diff --git a/src/test/ref/screen-center-angle.sym b/src/test/ref/screen-center-angle.sym index 93ec73db8..3ed7bc28c 100644 --- a/src/test/ref/screen-center-angle.sym +++ b/src/test/ref/screen-center-angle.sym @@ -5,13 +5,13 @@ (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iSQUARES sta.z squares+1 - // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 + // [121] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -5328,7 +5228,7 @@ init_squares: { sta.z squares lda #>SQUARES sta.z squares+1 - // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 + // [121] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -5770,9 +5670,9 @@ FINAL SYMBOL TABLE (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) HEAP_TOP = (byte*) 40960 @@ -6751,7 +6651,7 @@ init_squares: { sta.z squares lda #>SQUARES sta.z squares+1 - // [121] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vbuc1 + // [121] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares->init_squares::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/screen-center-distance.sym b/src/test/ref/screen-center-distance.sym index af8f3caa4..8b7599d8d 100644 --- a/src/test/ref/screen-center-distance.sym +++ b/src/test/ref/screen-center-distance.sym @@ -5,9 +5,9 @@ (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const dword) CLOCKS_PER_INIT = (number) $12 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const dword) CLOCKS_PER_INIT = (dword) $12 (const byte*) D018 = (byte*) 53272 (const byte*) FONT_HEX_PROTO[] = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte*) HEAP_TOP = (byte*) 40960 diff --git a/src/test/ref/screen-show-spiral-buckets.cfg b/src/test/ref/screen-show-spiral-buckets.cfg index 3edd7292e..4311ba101 100644 --- a/src/test/ref/screen-show-spiral-buckets.cfg +++ b/src/test/ref/screen-show-spiral-buckets.cfg @@ -4,510 +4,507 @@ @1: scope:[] from @begin [1] phi() [2] call malloc - to:@4 -@4: scope:[] from @1 + to:@3 +@3: scope:[] from @1 [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [4] call malloc + to:@4 +@4: scope:[] from @3 + [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 + [6] call malloc to:@5 @5: scope:[] from @4 - [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 - to:@2 -@2: scope:[] from @5 - [6] phi() - [7] call malloc + [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 + [8] call malloc to:@6 -@6: scope:[] from @2 - [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 - [9] call malloc +@6: scope:[] from @5 + [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 + [10] call malloc to:@7 @7: scope:[] from @6 - [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 - [11] call malloc - to:@8 -@8: scope:[] from @7 - [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 - to:@3 -@3: scope:[] from @8 - [13] phi() - [14] call main + [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 + to:@2 +@2: scope:[] from @7 + [12] phi() + [13] call main to:@end -@end: scope:[] from @3 - [15] phi() +@end: scope:[] from @2 + [14] phi() (void()) main() -main: scope:[main] from @3 +main: scope:[main] from @2 asm { sei } - [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 - [18] call init_dist_screen + [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + [17] call init_dist_screen to:main::@15 main::@15: scope:[main] from main - [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 - [20] call init_angle_screen + [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 + [19] call init_angle_screen to:main::@16 main::@16: scope:[main] from main::@15 - [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 - [22] call init_buckets + [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + [21] call init_buckets to:main::@1 main::@1: scope:[main] from main::@11 main::@12 main::@16 - [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#6 main::@12/(byte) main::bucket_idx#1 main::@16/(byte) 0 ) + [22] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#6 main::@12/(byte) main::bucket_idx#1 main::@16/(byte) 0 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 - [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 + [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - [25] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) - [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 - [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) - [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) - [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 + [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 + [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) + [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) + [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@3 main::@8 - [30] (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#5 main::@3/(byte) $ff ) - [30] (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#8 main::@3/(word) $ffff ) - [30] (byte) main::i#2 ← phi( main::@8/(byte) main::i#1 main::@3/(byte) 0 ) - [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 + [29] (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#5 main::@3/(byte) $ff ) + [29] (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#8 main::@3/(word) $ffff ) + [29] (byte) main::i#2 ← phi( main::@8/(byte) main::i#1 main::@3/(byte) 0 ) + [30] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 to:main::@7 main::@7: scope:[main] from main::@5 - [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 + [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 to:main::@11 main::@11: scope:[main] from main::@7 - [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 - [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR - [35] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 + [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR + [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@1 main::@4: scope:[main] from main::@3 main::@7 - [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 - [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 + [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 + [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 to:main::@13 main::@13: scope:[main] from main::@4 - [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@14 main::@14: scope:[main] from main::@13 main::@14 - [39] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) + [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) to:main::@14 main::@12: scope:[main] from main::@4 - [40] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@1 main::@6: scope:[main] from main::@5 - [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 - [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) - [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 - [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 + [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 + [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) + [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 + [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 to:main::@9 main::@9: scope:[main] from main::@6 - [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 - [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 + [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 + [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 to:main::@10 main::@10: scope:[main] from main::@9 - [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) + [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) to:main::@8 main::@8: scope:[main] from main::@10 main::@17 main::@18 - [48] (byte) main::min_angle#5 ← phi( main::@17/(byte) main::min_angle#2 main::@10/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) - [48] (word) main::min_offset#5 ← phi( main::@17/(word) main::min_offset#9 main::@10/(word) main::offset#0 main::@18/(word) main::min_offset#11 ) - [49] (byte) main::i#1 ← ++ (byte) main::i#2 - [50] (word) main::min_offset#8 ← (word) main::min_offset#5 + [47] (byte) main::min_angle#5 ← phi( main::@17/(byte) main::min_angle#2 main::@10/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) + [47] (word) main::min_offset#5 ← phi( main::@17/(word) main::min_offset#9 main::@10/(word) main::offset#0 main::@18/(word) main::min_offset#11 ) + [48] (byte) main::i#1 ← ++ (byte) main::i#2 + [49] (word) main::min_offset#8 ← (word) main::min_offset#5 to:main::@5 main::@17: scope:[main] from main::@9 - [51] (word) main::min_offset#9 ← (word) main::min_offset#2 + [50] (word) main::min_offset#9 ← (word) main::min_offset#2 to:main::@8 main::@18: scope:[main] from main::@6 - [52] (word) main::min_offset#11 ← (word) main::min_offset#2 + [51] (word) main::min_offset#11 ← (word) main::min_offset#2 to:main::@8 (void()) init_buckets((byte*) init_buckets::screen) init_buckets: scope:[init_buckets] from main::@16 - [53] phi() + [52] phi() to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) - [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 - [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 - [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 + [53] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) + [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 + [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 + [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 to:init_buckets::@2 init_buckets::@2: scope:[init_buckets] from init_buckets::@1 - [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 + [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 to:init_buckets::@3 init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 - [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 ) - [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 ) - [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) - [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 - [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 - [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 + [58] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 ) + [58] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 ) + [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) + [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 + [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 + [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 to:init_buckets::@4 init_buckets::@4: scope:[init_buckets] from init_buckets::@3 init_buckets::@8 - [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 ) - [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 - [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 - [67] call malloc + [63] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 ) + [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 + [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 + [66] call malloc to:init_buckets::@8 init_buckets::@8: scope:[init_buckets] from init_buckets::@4 - [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 - [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 - [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 - [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 - [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 - [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 + [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 + [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 + [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 + [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 + [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 + [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 to:init_buckets::@5 init_buckets::@5: scope:[init_buckets] from init_buckets::@5 init_buckets::@8 - [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 ) - [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 - [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 - [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 + [73] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 ) + [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 + [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 + [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 to:init_buckets::@6 init_buckets::@6: scope:[init_buckets] from init_buckets::@5 - [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 + [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 to:init_buckets::@7 init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 - [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 ) - [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 ) - [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 - [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 - [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 - [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) - [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 - [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 - [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 - [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) - [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 - [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 - [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 + [78] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 ) + [78] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 ) + [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) + [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 + [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 + [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 + [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) + [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 + [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 + [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 + [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) + [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 + [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 + [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 to:init_buckets::@return init_buckets::@return: scope:[init_buckets] from init_buckets::@7 - [92] return + [91] return to:@return (void*()) malloc((word) malloc::size) -malloc: scope:[malloc] from @1 @2 @4 @6 @7 init_buckets::@4 init_squares - [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) - [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 - [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 +malloc: scope:[malloc] from @1 @3 @4 @5 @6 init_buckets::@4 init_squares + [92] (word) malloc::size#7 ← phi( @1/(word) $3e8 @3/(word) $3e8 @4/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE @5/(const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER @6/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [92] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 @4/(byte*) heap_head#1 @5/(byte*) heap_head#1 @6/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) + [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 + [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [96] return + [95] return to:@return (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main::@15 - [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c - [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 - [99] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) - [99] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) - [99] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) + [98] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) + [98] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) + [98] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 + [99] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) + [99] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) + [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [106] return + [105] return to:@return init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [114] call atan2_16 - [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 + [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [113] call atan2_16 + [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 + [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 + [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 to:init_angle_screen::@2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from init_angle_screen::@3 - [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [129] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [133] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [132] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [134] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [134] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) + [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [133] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [133] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [135] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [139] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [143] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [142] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [144] return + [143] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [145] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [148] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [148] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [147] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [147] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [147] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [153] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [153] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [152] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [152] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) + [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [159] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [159] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 + [158] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [158] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [158] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 - [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) + [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void()) init_dist_screen((byte*) init_dist_screen::screen) init_dist_screen: scope:[init_dist_screen] from main - [171] phi() - [172] call init_squares + [170] phi() + [171] call init_squares to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen - [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 + [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7 - [174] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) - [174] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) - [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) - [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 + [173] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) + [173] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) + [173] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) + [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - [178] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) - [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [180] call sqr - [181] (word) sqr::return#2 ← (word) sqr::return#0 + [177] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) + [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [179] call sqr + [180] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 - [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 + [182] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) + [182] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) + [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 to:init_dist_screen::@return init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [189] return + [188] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 + [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [193] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [195] call sqr - [196] (word) sqr::return#3 ← (word) sqr::return#0 + [192] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [194] call sqr + [195] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [200] call sqrt - [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [199] call sqrt + [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 + [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 to:init_dist_screen::@5 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 - [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 (byte()) sqrt((word) sqrt::val) sqrt: scope:[sqrt] from init_dist_screen::@13 - [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [213] call bsearch16u - [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [212] call bsearch16u + [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [219] return + [218] return to:@return (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) bsearch16u: scope:[bsearch16u] from sqrt - [220] phi() + [219] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 + [220] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) + [220] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) + [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [224] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [227] return + [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [226] return to:@return bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 + [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 + [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@8 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 + [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 + [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 to:bsearch16u::@9 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 to:bsearch16u::@7 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 + [236] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) + [236] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) + [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 (word()) sqr((byte) sqr::val) sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [239] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [238] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [242] return + [241] return to:@return (void()) init_squares() init_squares: scope:[init_squares] from init_dist_screen - [243] phi() - [244] call malloc + [242] phi() + [243] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [246] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [246] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [246] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(word) 0 ) + [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [250] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [252] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [253] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [255] return + [254] return to:@return diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index 8d11b2637..e6ac1cfcc 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -1,6 +1,3 @@ -Resolved forward reference BUCKETS to (word**) BUCKETS -Resolved forward reference BUCKET_SIZES to (byte*) BUCKET_SIZES -Resolved forward reference NUM_BUCKETS to (const byte) NUM_BUCKETS Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1 @@ -80,6 +77,7 @@ Culled Empty Block (label) main::@31 Culled Empty Block (label) main::@30 Culled Empty Block (label) main::@32 Culled Empty Block (label) main::@33 +Culled Empty Block (label) @23 Culled Empty Block (label) init_buckets::@10 Culled Empty Block (label) @24 Culled Empty Block (label) init_angle_screen::@5 @@ -104,9 +102,9 @@ CONTROL FLOW GRAPH SSA to:@17 (void*()) malloc((word) malloc::size) -malloc: scope:[malloc] from @22 @23 @27 @29 @30 init_buckets::@5 init_squares - (word) malloc::size#7 ← phi( @22/(word) malloc::size#1 @23/(word) malloc::size#3 @27/(word) malloc::size#2 @29/(word) malloc::size#4 @30/(word) malloc::size#5 init_buckets::@5/(word) malloc::size#6 init_squares/(word) malloc::size#0 ) - (byte*) heap_head#18 ← phi( @22/(byte*) heap_head#35 @23/(byte*) heap_head#36 @27/(byte*) heap_head#5 @29/(byte*) heap_head#10 @30/(byte*) heap_head#11 init_buckets::@5/(byte*) heap_head#37 init_squares/(byte*) heap_head#38 ) +malloc: scope:[malloc] from @22 @27 @28 @29 @30 init_buckets::@5 init_squares + (word) malloc::size#7 ← phi( @22/(word) malloc::size#1 @27/(word) malloc::size#2 @28/(word) malloc::size#3 @29/(word) malloc::size#4 @30/(word) malloc::size#5 init_buckets::@5/(word) malloc::size#6 init_squares/(word) malloc::size#0 ) + (byte*) heap_head#18 ← phi( @22/(byte*) heap_head#35 @27/(byte*) heap_head#5 @28/(byte*) heap_head#6 @29/(byte*) heap_head#7 @30/(byte*) heap_head#8 init_buckets::@5/(byte*) heap_head#36 init_squares/(byte*) heap_head#37 ) (byte*~) malloc::$0 ← (byte*) heap_head#18 - (word) malloc::size#7 (byte*) malloc::mem#0 ← (byte*~) malloc::$0 (byte*) heap_head#1 ← (byte*) malloc::mem#0 @@ -204,14 +202,14 @@ bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@2 (word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4 to:bsearch16u::@return @17: scope:[] from @9 - (byte*) heap_head#47 ← phi( @9/(byte*) heap_head#0 ) - (byte) NUM_SQUARES#0 ← (number) $ff + (byte*) heap_head#46 ← phi( @9/(byte*) heap_head#0 ) + (byte) NUM_SQUARES#0 ← (byte) $ff (word*) SQUARES#0 ← (word*) 0 to:@22 (void()) init_squares() init_squares: scope:[init_squares] from init_dist_screen - (byte*) heap_head#38 ← phi( init_dist_screen/(byte*) heap_head#44 ) + (byte*) heap_head#37 ← phi( init_dist_screen/(byte*) heap_head#43 ) (byte) NUM_SQUARES#6 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 ) (byte~) init_squares::$0 ← (byte) NUM_SQUARES#6 * (const byte) SIZEOF_WORD (word) malloc::size#0 ← (byte~) init_squares::$0 @@ -226,13 +224,13 @@ init_squares::@3: scope:[init_squares] from init_squares (byte*) heap_head#3 ← (byte*) heap_head#20 (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1 (word*) init_squares::squares#0 ← (word*) SQUARES#1 - (word) init_squares::sqr#0 ← (number) 0 + (word) init_squares::sqr#0 ← (word) 0 (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1 (byte) init_squares::i#0 ← (byte) 0 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@3 (word*) SQUARES#17 ← phi( init_squares::@1/(word*) SQUARES#17 init_squares::@3/(word*) SQUARES#1 ) - (byte*) heap_head#39 ← phi( init_squares::@1/(byte*) heap_head#39 init_squares::@3/(byte*) heap_head#3 ) + (byte*) heap_head#38 ← phi( init_squares::@1/(byte*) heap_head#38 init_squares::@3/(byte*) heap_head#3 ) (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@3/(byte) init_squares::i#0 ) (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 ) (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@3/(word) init_squares::sqr#0 ) @@ -247,7 +245,7 @@ init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@3 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 ) - (byte*) heap_head#21 ← phi( init_squares::@1/(byte*) heap_head#39 ) + (byte*) heap_head#21 ← phi( init_squares::@1/(byte*) heap_head#38 ) (byte*) heap_head#4 ← (byte*) heap_head#21 (word*) SQUARES#2 ← (word*) SQUARES#8 return @@ -339,7 +337,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 ) (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 ) (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9 - (word) atan2_16::angle#0 ← (number) 0 + (word) atan2_16::angle#0 ← (word) 0 (byte) atan2_16::i#0 ← (byte) 0 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6 @@ -505,16 +503,16 @@ atan2_16::@return: scope:[atan2_16] from atan2_16::@8 return to:@return @22: scope:[] from @17 - (word*) SQUARES#58 ← phi( @17/(word*) SQUARES#0 ) - (byte) NUM_SQUARES#53 ← phi( @17/(byte) NUM_SQUARES#0 ) - (byte*) heap_head#35 ← phi( @17/(byte*) heap_head#47 ) + (word*) SQUARES#54 ← phi( @17/(word*) SQUARES#0 ) + (byte) NUM_SQUARES#48 ← phi( @17/(byte) NUM_SQUARES#0 ) + (byte*) heap_head#35 ← phi( @17/(byte*) heap_head#46 ) (word) malloc::size#1 ← (number) $3e8 call malloc (void*) malloc::return#3 ← (void*) malloc::return#1 to:@27 @27: scope:[] from @22 - (word*) SQUARES#54 ← phi( @22/(word*) SQUARES#58 ) - (byte) NUM_SQUARES#48 ← phi( @22/(byte) NUM_SQUARES#53 ) + (word*) SQUARES#51 ← phi( @22/(word*) SQUARES#54 ) + (byte) NUM_SQUARES#44 ← phi( @22/(byte) NUM_SQUARES#48 ) (byte*) heap_head#22 ← phi( @22/(byte*) heap_head#2 ) (void*) malloc::return#11 ← phi( @22/(void*) malloc::return#3 ) (void*~) $0 ← (void*) malloc::return#11 @@ -525,15 +523,60 @@ atan2_16::@return: scope:[atan2_16] from atan2_16::@8 (void*) malloc::return#4 ← (void*) malloc::return#1 to:@28 @28: scope:[] from @27 - (word*) SQUARES#53 ← phi( @27/(word*) SQUARES#54 ) - (byte) NUM_SQUARES#46 ← phi( @27/(byte) NUM_SQUARES#48 ) - (byte*) SCREEN_DIST#9 ← phi( @27/(byte*) SCREEN_DIST#0 ) + (word*) SQUARES#48 ← phi( @27/(word*) SQUARES#51 ) + (byte) NUM_SQUARES#39 ← phi( @27/(byte) NUM_SQUARES#44 ) + (byte*) SCREEN_DIST#8 ← phi( @27/(byte*) SCREEN_DIST#0 ) (byte*) heap_head#23 ← phi( @27/(byte*) heap_head#2 ) (void*) malloc::return#12 ← phi( @27/(void*) malloc::return#4 ) (void*~) $1 ← (void*) malloc::return#12 (byte*) heap_head#6 ← (byte*) heap_head#23 (byte*) SCREEN_ANGLE#0 ← ((byte*)) (void*~) $1 - to:@23 + (word) malloc::size#3 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE + call malloc + (void*) malloc::return#5 ← (void*) malloc::return#1 + to:@29 +@29: scope:[] from @28 + (byte*) SCREEN_ANGLE#13 ← phi( @28/(byte*) SCREEN_ANGLE#0 ) + (word*) SQUARES#44 ← phi( @28/(word*) SQUARES#48 ) + (byte) NUM_SQUARES#33 ← phi( @28/(byte) NUM_SQUARES#39 ) + (byte*) SCREEN_DIST#7 ← phi( @28/(byte*) SCREEN_DIST#8 ) + (byte*) heap_head#24 ← phi( @28/(byte*) heap_head#2 ) + (void*) malloc::return#13 ← phi( @28/(void*) malloc::return#5 ) + (void*~) $2 ← (void*) malloc::return#13 + (byte*) heap_head#7 ← (byte*) heap_head#24 + (byte*) BUCKET_SIZES#0 ← ((byte*)) (void*~) $2 + (word) malloc::size#4 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER + call malloc + (void*) malloc::return#6 ← (void*) malloc::return#1 + to:@30 +@30: scope:[] from @29 + (byte*) BUCKET_SIZES#24 ← phi( @29/(byte*) BUCKET_SIZES#0 ) + (byte*) SCREEN_ANGLE#10 ← phi( @29/(byte*) SCREEN_ANGLE#13 ) + (word*) SQUARES#35 ← phi( @29/(word*) SQUARES#44 ) + (byte) NUM_SQUARES#24 ← phi( @29/(byte) NUM_SQUARES#33 ) + (byte*) SCREEN_DIST#6 ← phi( @29/(byte*) SCREEN_DIST#7 ) + (byte*) heap_head#25 ← phi( @29/(byte*) heap_head#2 ) + (void*) malloc::return#14 ← phi( @29/(void*) malloc::return#6 ) + (void*~) $3 ← (void*) malloc::return#14 + (byte*) heap_head#8 ← (byte*) heap_head#25 + (word**) BUCKETS#0 ← ((word**)) (void*~) $3 + (word) malloc::size#5 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE + call malloc + (void*) malloc::return#7 ← (void*) malloc::return#1 + to:@31 +@31: scope:[] from @30 + (word**) BUCKETS#30 ← phi( @30/(word**) BUCKETS#0 ) + (byte*) BUCKET_SIZES#23 ← phi( @30/(byte*) BUCKET_SIZES#24 ) + (byte*) SCREEN_ANGLE#9 ← phi( @30/(byte*) SCREEN_ANGLE#10 ) + (word*) SQUARES#34 ← phi( @30/(word*) SQUARES#35 ) + (byte) NUM_SQUARES#23 ← phi( @30/(byte) NUM_SQUARES#24 ) + (byte*) SCREEN_DIST#5 ← phi( @30/(byte*) SCREEN_DIST#6 ) + (byte*) heap_head#26 ← phi( @30/(byte*) heap_head#2 ) + (void*) malloc::return#15 ← phi( @30/(void*) malloc::return#7 ) + (void*~) $4 ← (void*) malloc::return#15 + (byte*) heap_head#9 ← (byte*) heap_head#26 + (byte*) BUCKET_IDX#0 ← ((byte*)) (void*~) $4 + to:@26 (void()) main() main: scope:[main] from @26 @@ -542,7 +585,7 @@ main: scope:[main] from @26 (byte*) BUCKET_SIZES#16 ← phi( @26/(byte*) BUCKET_SIZES#19 ) (byte*) SCREEN_ANGLE#3 ← phi( @26/(byte*) SCREEN_ANGLE#5 ) (word*) SQUARES#21 ← phi( @26/(word*) SQUARES#25 ) - (byte*) heap_head#40 ← phi( @26/(byte*) heap_head#46 ) + (byte*) heap_head#39 ← phi( @26/(byte*) heap_head#45 ) (byte) NUM_SQUARES#14 ← phi( @26/(byte) NUM_SQUARES#17 ) (byte*) SCREEN_DIST#1 ← phi( @26/(byte*) SCREEN_DIST#3 ) asm { sei } @@ -556,51 +599,51 @@ main::@34: scope:[main] from main (byte*) SCREEN_DIST#4 ← phi( main/(byte*) SCREEN_DIST#1 ) (byte*) SCREEN_ANGLE#1 ← phi( main/(byte*) SCREEN_ANGLE#3 ) (word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 ) - (byte*) heap_head#24 ← phi( main/(byte*) heap_head#16 ) + (byte*) heap_head#27 ← phi( main/(byte*) heap_head#16 ) (byte) NUM_SQUARES#9 ← phi( main/(byte) NUM_SQUARES#4 ) (byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#9 - (byte*) heap_head#7 ← (byte*) heap_head#24 + (byte*) heap_head#10 ← (byte*) heap_head#27 (word*) SQUARES#3 ← (word*) SQUARES#12 (byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_ANGLE#1 call init_angle_screen to:main::@35 main::@35: scope:[main] from main::@34 (byte*) BUCKET_IDX#12 ← phi( main::@34/(byte*) BUCKET_IDX#13 ) - (byte*) SCREEN_ANGLE#20 ← phi( main::@34/(byte*) SCREEN_ANGLE#1 ) - (word*) SQUARES#44 ← phi( main::@34/(word*) SQUARES#3 ) - (byte) NUM_SQUARES#33 ← phi( main::@34/(byte) NUM_SQUARES#1 ) + (byte*) SCREEN_ANGLE#19 ← phi( main::@34/(byte*) SCREEN_ANGLE#1 ) + (word*) SQUARES#45 ← phi( main::@34/(word*) SQUARES#3 ) + (byte) NUM_SQUARES#34 ← phi( main::@34/(byte) NUM_SQUARES#1 ) (word**) BUCKETS#15 ← phi( main::@34/(word**) BUCKETS#19 ) (byte*) BUCKET_SIZES#11 ← phi( main::@34/(byte*) BUCKET_SIZES#12 ) - (byte*) heap_head#41 ← phi( main::@34/(byte*) heap_head#7 ) + (byte*) heap_head#40 ← phi( main::@34/(byte*) heap_head#10 ) (byte*) SCREEN_DIST#2 ← phi( main::@34/(byte*) SCREEN_DIST#4 ) (byte*) init_buckets::screen#0 ← (byte*) SCREEN_DIST#2 call init_buckets to:main::@36 main::@36: scope:[main] from main::@35 - (byte*) SCREEN_ANGLE#19 ← phi( main::@35/(byte*) SCREEN_ANGLE#20 ) - (word*) SQUARES#37 ← phi( main::@35/(word*) SQUARES#44 ) - (byte) NUM_SQUARES#26 ← phi( main::@35/(byte) NUM_SQUARES#33 ) + (byte*) SCREEN_ANGLE#18 ← phi( main::@35/(byte*) SCREEN_ANGLE#19 ) + (word*) SQUARES#38 ← phi( main::@35/(word*) SQUARES#45 ) + (byte) NUM_SQUARES#27 ← phi( main::@35/(byte) NUM_SQUARES#34 ) (byte*) BUCKET_SIZES#15 ← phi( main::@35/(byte*) BUCKET_SIZES#11 ) (word**) BUCKETS#12 ← phi( main::@35/(word**) BUCKETS#15 ) - (byte*) heap_head#25 ← phi( main::@35/(byte*) heap_head#14 ) - (byte*) heap_head#8 ← (byte*) heap_head#25 - (byte) main::bucket_idx#0 ← (number) 0 + (byte*) heap_head#28 ← phi( main::@35/(byte*) heap_head#14 ) + (byte*) heap_head#11 ← (byte*) heap_head#28 + (byte) main::bucket_idx#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@18 main::@21 main::@36 - (byte*) SCREEN_ANGLE#15 ← phi( main::@18/(byte*) SCREEN_ANGLE#17 main::@21/(byte*) SCREEN_ANGLE#18 main::@36/(byte*) SCREEN_ANGLE#19 ) - (word*) SQUARES#26 ← phi( main::@18/(word*) SQUARES#35 main::@21/(word*) SQUARES#36 main::@36/(word*) SQUARES#37 ) - (byte*) heap_head#48 ← phi( main::@18/(byte*) heap_head#54 main::@21/(byte*) heap_head#55 main::@36/(byte*) heap_head#8 ) - (byte) NUM_SQUARES#18 ← phi( main::@18/(byte) NUM_SQUARES#24 main::@21/(byte) NUM_SQUARES#25 main::@36/(byte) NUM_SQUARES#26 ) + (byte*) SCREEN_ANGLE#15 ← phi( main::@18/(byte*) SCREEN_ANGLE#16 main::@21/(byte*) SCREEN_ANGLE#17 main::@36/(byte*) SCREEN_ANGLE#18 ) + (word*) SQUARES#26 ← phi( main::@18/(word*) SQUARES#36 main::@21/(word*) SQUARES#37 main::@36/(word*) SQUARES#38 ) + (byte*) heap_head#47 ← phi( main::@18/(byte*) heap_head#53 main::@21/(byte*) heap_head#54 main::@36/(byte*) heap_head#11 ) + (byte) NUM_SQUARES#18 ← phi( main::@18/(byte) NUM_SQUARES#25 main::@21/(byte) NUM_SQUARES#26 main::@36/(byte) NUM_SQUARES#27 ) (byte*) BUCKET_SIZES#10 ← phi( main::@18/(byte*) BUCKET_SIZES#13 main::@21/(byte*) BUCKET_SIZES#14 main::@36/(byte*) BUCKET_SIZES#15 ) (word**) BUCKETS#7 ← phi( main::@18/(word**) BUCKETS#10 main::@21/(word**) BUCKETS#11 main::@36/(word**) BUCKETS#12 ) (byte) main::bucket_idx#6 ← phi( main::@18/(byte) main::bucket_idx#8 main::@21/(byte) main::bucket_idx#9 main::@36/(byte) main::bucket_idx#0 ) if(true) goto main::@4 to:main::@28 main::@4: scope:[main] from main::@1 main::@4 - (byte*) SCREEN_ANGLE#13 ← phi( main::@1/(byte*) SCREEN_ANGLE#15 main::@4/(byte*) SCREEN_ANGLE#13 ) - (word*) SQUARES#48 ← phi( main::@1/(word*) SQUARES#26 main::@4/(word*) SQUARES#48 ) - (byte*) heap_head#67 ← phi( main::@1/(byte*) heap_head#48 main::@4/(byte*) heap_head#67 ) - (byte) NUM_SQUARES#39 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@4/(byte) NUM_SQUARES#39 ) + (byte*) SCREEN_ANGLE#14 ← phi( main::@1/(byte*) SCREEN_ANGLE#15 main::@4/(byte*) SCREEN_ANGLE#14 ) + (word*) SQUARES#49 ← phi( main::@1/(word*) SQUARES#26 main::@4/(word*) SQUARES#49 ) + (byte*) heap_head#66 ← phi( main::@1/(byte*) heap_head#47 main::@4/(byte*) heap_head#66 ) + (byte) NUM_SQUARES#40 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@4/(byte) NUM_SQUARES#40 ) (byte*) BUCKET_SIZES#5 ← phi( main::@1/(byte*) BUCKET_SIZES#10 main::@4/(byte*) BUCKET_SIZES#5 ) (word**) BUCKETS#4 ← phi( main::@1/(word**) BUCKETS#7 main::@4/(word**) BUCKETS#4 ) (byte) main::bucket_idx#4 ← phi( main::@1/(byte) main::bucket_idx#6 main::@4/(byte) main::bucket_idx#4 ) @@ -608,10 +651,10 @@ main::@4: scope:[main] from main::@1 main::@4 if((bool~) main::$3) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@4 - (byte*) SCREEN_ANGLE#10 ← phi( main::@4/(byte*) SCREEN_ANGLE#13 ) - (word*) SQUARES#46 ← phi( main::@4/(word*) SQUARES#48 ) - (byte*) heap_head#62 ← phi( main::@4/(byte*) heap_head#67 ) - (byte) NUM_SQUARES#35 ← phi( main::@4/(byte) NUM_SQUARES#39 ) + (byte*) SCREEN_ANGLE#11 ← phi( main::@4/(byte*) SCREEN_ANGLE#14 ) + (word*) SQUARES#47 ← phi( main::@4/(word*) SQUARES#49 ) + (byte*) heap_head#61 ← phi( main::@4/(byte*) heap_head#66 ) + (byte) NUM_SQUARES#36 ← phi( main::@4/(byte) NUM_SQUARES#40 ) (byte*) BUCKET_SIZES#1 ← phi( main::@4/(byte*) BUCKET_SIZES#5 ) (word**) BUCKETS#1 ← phi( main::@4/(word**) BUCKETS#4 ) (byte) main::bucket_idx#2 ← phi( main::@4/(byte) main::bucket_idx#4 ) @@ -624,12 +667,12 @@ main::@5: scope:[main] from main::@4 if((bool~) main::$6) goto main::@7 to:main::@6 main::@7: scope:[main] from main::@10 main::@5 - (byte*) SCREEN_ANGLE#22 ← phi( main::@10/(byte*) SCREEN_ANGLE#21 main::@5/(byte*) SCREEN_ANGLE#10 ) + (byte*) SCREEN_ANGLE#21 ← phi( main::@10/(byte*) SCREEN_ANGLE#20 main::@5/(byte*) SCREEN_ANGLE#11 ) (byte*) BUCKET_SIZES#18 ← phi( main::@10/(byte*) BUCKET_SIZES#17 main::@5/(byte*) BUCKET_SIZES#1 ) (word**) BUCKETS#17 ← phi( main::@10/(word**) BUCKETS#16 main::@5/(word**) BUCKETS#1 ) - (word*) SQUARES#38 ← phi( main::@10/(word*) SQUARES#45 main::@5/(word*) SQUARES#46 ) - (byte*) heap_head#56 ← phi( main::@10/(byte*) heap_head#61 main::@5/(byte*) heap_head#62 ) - (byte) NUM_SQUARES#27 ← phi( main::@10/(byte) NUM_SQUARES#34 main::@5/(byte) NUM_SQUARES#35 ) + (word*) SQUARES#39 ← phi( main::@10/(word*) SQUARES#46 main::@5/(word*) SQUARES#47 ) + (byte*) heap_head#55 ← phi( main::@10/(byte*) heap_head#60 main::@5/(byte*) heap_head#61 ) + (byte) NUM_SQUARES#28 ← phi( main::@10/(byte) NUM_SQUARES#35 main::@5/(byte) NUM_SQUARES#36 ) (byte) main::bucket_idx#3 ← phi( main::@10/(byte) main::bucket_idx#5 main::@5/(byte) main::bucket_idx#2 ) (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#3 (bool~) main::$18 ← (byte) main::bucket_idx#1 == (const byte) NUM_BUCKETS @@ -639,23 +682,23 @@ main::@7: scope:[main] from main::@10 main::@5 main::@6: scope:[main] from main::@5 (byte*) BUCKET_SIZES#22 ← phi( main::@5/(byte*) BUCKET_SIZES#1 ) (word**) BUCKETS#24 ← phi( main::@5/(word**) BUCKETS#1 ) - (word*) SQUARES#52 ← phi( main::@5/(word*) SQUARES#46 ) - (byte*) heap_head#74 ← phi( main::@5/(byte*) heap_head#62 ) - (byte) NUM_SQUARES#45 ← phi( main::@5/(byte) NUM_SQUARES#35 ) + (word*) SQUARES#53 ← phi( main::@5/(word*) SQUARES#47 ) + (byte*) heap_head#73 ← phi( main::@5/(byte*) heap_head#61 ) + (byte) NUM_SQUARES#46 ← phi( main::@5/(byte) NUM_SQUARES#36 ) (byte) main::bucket_idx#11 ← phi( main::@5/(byte) main::bucket_idx#2 ) - (byte*) SCREEN_ANGLE#8 ← phi( main::@5/(byte*) SCREEN_ANGLE#10 ) + (byte*) SCREEN_ANGLE#8 ← phi( main::@5/(byte*) SCREEN_ANGLE#11 ) (word*) main::bucket#4 ← phi( main::@5/(word*) main::bucket#0 ) (byte) main::bucket_size#3 ← phi( main::@5/(byte) main::bucket_size#0 ) - (byte) main::min_angle#0 ← (number) $ff - (word) main::min_offset#0 ← (number) $ffff - (byte) main::i#0 ← (number) 0 + (byte) main::min_angle#0 ← (byte) $ff + (word) main::min_offset#0 ← (word) $ffff + (byte) main::i#0 ← (byte) 0 to:main::@8 main::@8: scope:[main] from main::@11 main::@6 (byte*) BUCKET_SIZES#20 ← phi( main::@11/(byte*) BUCKET_SIZES#21 main::@6/(byte*) BUCKET_SIZES#22 ) (word**) BUCKETS#20 ← phi( main::@11/(word**) BUCKETS#23 main::@6/(word**) BUCKETS#24 ) - (word*) SQUARES#49 ← phi( main::@11/(word*) SQUARES#51 main::@6/(word*) SQUARES#52 ) - (byte*) heap_head#68 ← phi( main::@11/(byte*) heap_head#73 main::@6/(byte*) heap_head#74 ) - (byte) NUM_SQUARES#40 ← phi( main::@11/(byte) NUM_SQUARES#44 main::@6/(byte) NUM_SQUARES#45 ) + (word*) SQUARES#50 ← phi( main::@11/(word*) SQUARES#52 main::@6/(word*) SQUARES#53 ) + (byte*) heap_head#67 ← phi( main::@11/(byte*) heap_head#72 main::@6/(byte*) heap_head#73 ) + (byte) NUM_SQUARES#41 ← phi( main::@11/(byte) NUM_SQUARES#45 main::@6/(byte) NUM_SQUARES#46 ) (byte) main::bucket_idx#7 ← phi( main::@11/(byte) main::bucket_idx#10 main::@6/(byte) main::bucket_idx#11 ) (byte) main::min_angle#4 ← phi( main::@11/(byte) main::min_angle#5 main::@6/(byte) main::min_angle#0 ) (byte*) SCREEN_ANGLE#6 ← phi( main::@11/(byte*) SCREEN_ANGLE#7 main::@6/(byte*) SCREEN_ANGLE#8 ) @@ -667,11 +710,11 @@ main::@8: scope:[main] from main::@11 main::@6 if((bool~) main::$7) goto main::@9 to:main::@10 main::@9: scope:[main] from main::@8 - (byte*) BUCKET_SIZES#26 ← phi( main::@8/(byte*) BUCKET_SIZES#20 ) + (byte*) BUCKET_SIZES#27 ← phi( main::@8/(byte*) BUCKET_SIZES#20 ) (word**) BUCKETS#29 ← phi( main::@8/(word**) BUCKETS#20 ) - (word*) SQUARES#57 ← phi( main::@8/(word*) SQUARES#49 ) - (byte*) heap_head#81 ← phi( main::@8/(byte*) heap_head#68 ) - (byte) NUM_SQUARES#51 ← phi( main::@8/(byte) NUM_SQUARES#40 ) + (word*) SQUARES#57 ← phi( main::@8/(word*) SQUARES#50 ) + (byte*) heap_head#80 ← phi( main::@8/(byte*) heap_head#67 ) + (byte) NUM_SQUARES#51 ← phi( main::@8/(byte) NUM_SQUARES#41 ) (byte) main::bucket_idx#14 ← phi( main::@8/(byte) main::bucket_idx#7 ) (word) main::min_offset#7 ← phi( main::@8/(word) main::min_offset#4 ) (byte) main::bucket_size#6 ← phi( main::@8/(byte) main::bucket_size#1 ) @@ -688,12 +731,12 @@ main::@9: scope:[main] from main::@8 if((bool~) main::$10) goto main::@11 to:main::@15 main::@10: scope:[main] from main::@8 - (byte*) SCREEN_ANGLE#21 ← phi( main::@8/(byte*) SCREEN_ANGLE#6 ) + (byte*) SCREEN_ANGLE#20 ← phi( main::@8/(byte*) SCREEN_ANGLE#6 ) (byte*) BUCKET_SIZES#17 ← phi( main::@8/(byte*) BUCKET_SIZES#20 ) (word**) BUCKETS#16 ← phi( main::@8/(word**) BUCKETS#20 ) - (word*) SQUARES#45 ← phi( main::@8/(word*) SQUARES#49 ) - (byte*) heap_head#61 ← phi( main::@8/(byte*) heap_head#68 ) - (byte) NUM_SQUARES#34 ← phi( main::@8/(byte) NUM_SQUARES#40 ) + (word*) SQUARES#46 ← phi( main::@8/(word*) SQUARES#50 ) + (byte*) heap_head#60 ← phi( main::@8/(byte*) heap_head#67 ) + (byte) NUM_SQUARES#35 ← phi( main::@8/(byte) NUM_SQUARES#41 ) (byte) main::bucket_idx#5 ← phi( main::@8/(byte) main::bucket_idx#7 ) (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#4 ) (bool~) main::$14 ← (word) main::min_offset#2 != (number) $ffff @@ -701,14 +744,14 @@ main::@10: scope:[main] from main::@8 if((bool~) main::$15) goto main::@7 to:main::@18 main::@11: scope:[main] from main::@15 main::@16 main::@9 - (byte*) BUCKET_SIZES#21 ← phi( main::@15/(byte*) BUCKET_SIZES#24 main::@16/(byte*) BUCKET_SIZES#25 main::@9/(byte*) BUCKET_SIZES#26 ) + (byte*) BUCKET_SIZES#21 ← phi( main::@15/(byte*) BUCKET_SIZES#25 main::@16/(byte*) BUCKET_SIZES#26 main::@9/(byte*) BUCKET_SIZES#27 ) (word**) BUCKETS#23 ← phi( main::@15/(word**) BUCKETS#27 main::@16/(word**) BUCKETS#28 main::@9/(word**) BUCKETS#29 ) - (word*) SQUARES#51 ← phi( main::@15/(word*) SQUARES#55 main::@16/(word*) SQUARES#56 main::@9/(word*) SQUARES#57 ) - (byte*) heap_head#73 ← phi( main::@15/(byte*) heap_head#79 main::@16/(byte*) heap_head#80 main::@9/(byte*) heap_head#81 ) - (byte) NUM_SQUARES#44 ← phi( main::@15/(byte) NUM_SQUARES#49 main::@16/(byte) NUM_SQUARES#50 main::@9/(byte) NUM_SQUARES#51 ) + (word*) SQUARES#52 ← phi( main::@15/(word*) SQUARES#55 main::@16/(word*) SQUARES#56 main::@9/(word*) SQUARES#57 ) + (byte*) heap_head#72 ← phi( main::@15/(byte*) heap_head#78 main::@16/(byte*) heap_head#79 main::@9/(byte*) heap_head#80 ) + (byte) NUM_SQUARES#45 ← phi( main::@15/(byte) NUM_SQUARES#49 main::@16/(byte) NUM_SQUARES#50 main::@9/(byte) NUM_SQUARES#51 ) (byte) main::bucket_idx#10 ← phi( main::@15/(byte) main::bucket_idx#12 main::@16/(byte) main::bucket_idx#13 main::@9/(byte) main::bucket_idx#14 ) (byte) main::min_angle#5 ← phi( main::@15/(byte) main::min_angle#2 main::@16/(byte) main::min_angle#1 main::@9/(byte) main::min_angle#3 ) - (byte*) SCREEN_ANGLE#7 ← phi( main::@15/(byte*) SCREEN_ANGLE#2 main::@16/(byte*) SCREEN_ANGLE#11 main::@9/(byte*) SCREEN_ANGLE#4 ) + (byte*) SCREEN_ANGLE#7 ← phi( main::@15/(byte*) SCREEN_ANGLE#2 main::@16/(byte*) SCREEN_ANGLE#12 main::@9/(byte*) SCREEN_ANGLE#4 ) (word) main::min_offset#5 ← phi( main::@15/(word) main::min_offset#6 main::@16/(word) main::min_offset#1 main::@9/(word) main::min_offset#7 ) (word*) main::bucket#3 ← phi( main::@15/(word*) main::bucket#5 main::@16/(word*) main::bucket#6 main::@9/(word*) main::bucket#1 ) (byte) main::bucket_size#2 ← phi( main::@15/(byte) main::bucket_size#4 main::@16/(byte) main::bucket_size#5 main::@9/(byte) main::bucket_size#6 ) @@ -716,10 +759,10 @@ main::@11: scope:[main] from main::@15 main::@16 main::@9 (byte) main::i#1 ← ++ (byte) main::i#4 to:main::@8 main::@15: scope:[main] from main::@9 - (byte*) BUCKET_SIZES#24 ← phi( main::@9/(byte*) BUCKET_SIZES#26 ) + (byte*) BUCKET_SIZES#25 ← phi( main::@9/(byte*) BUCKET_SIZES#27 ) (word**) BUCKETS#27 ← phi( main::@9/(word**) BUCKETS#29 ) (word*) SQUARES#55 ← phi( main::@9/(word*) SQUARES#57 ) - (byte*) heap_head#79 ← phi( main::@9/(byte*) heap_head#81 ) + (byte*) heap_head#78 ← phi( main::@9/(byte*) heap_head#80 ) (byte) NUM_SQUARES#49 ← phi( main::@9/(byte) NUM_SQUARES#51 ) (byte) main::bucket_idx#12 ← phi( main::@9/(byte) main::bucket_idx#14 ) (word) main::min_offset#6 ← phi( main::@9/(word) main::min_offset#7 ) @@ -736,13 +779,13 @@ main::@15: scope:[main] from main::@9 if((bool~) main::$13) goto main::@11 to:main::@16 main::@16: scope:[main] from main::@15 - (byte*) BUCKET_SIZES#25 ← phi( main::@15/(byte*) BUCKET_SIZES#24 ) + (byte*) BUCKET_SIZES#26 ← phi( main::@15/(byte*) BUCKET_SIZES#25 ) (word**) BUCKETS#28 ← phi( main::@15/(word**) BUCKETS#27 ) (word*) SQUARES#56 ← phi( main::@15/(word*) SQUARES#55 ) - (byte*) heap_head#80 ← phi( main::@15/(byte*) heap_head#79 ) + (byte*) heap_head#79 ← phi( main::@15/(byte*) heap_head#78 ) (byte) NUM_SQUARES#50 ← phi( main::@15/(byte) NUM_SQUARES#49 ) (byte) main::bucket_idx#13 ← phi( main::@15/(byte) main::bucket_idx#12 ) - (byte*) SCREEN_ANGLE#11 ← phi( main::@15/(byte*) SCREEN_ANGLE#2 ) + (byte*) SCREEN_ANGLE#12 ← phi( main::@15/(byte*) SCREEN_ANGLE#2 ) (word*) main::bucket#6 ← phi( main::@15/(word*) main::bucket#5 ) (byte) main::bucket_size#5 ← phi( main::@15/(byte) main::bucket_size#4 ) (byte) main::i#6 ← phi( main::@15/(byte) main::i#5 ) @@ -752,10 +795,10 @@ main::@16: scope:[main] from main::@15 (word) main::min_offset#1 ← (word) main::offset#2 to:main::@11 main::@18: scope:[main] from main::@10 - (byte*) SCREEN_ANGLE#17 ← phi( main::@10/(byte*) SCREEN_ANGLE#21 ) - (word*) SQUARES#35 ← phi( main::@10/(word*) SQUARES#45 ) - (byte*) heap_head#54 ← phi( main::@10/(byte*) heap_head#61 ) - (byte) NUM_SQUARES#24 ← phi( main::@10/(byte) NUM_SQUARES#34 ) + (byte*) SCREEN_ANGLE#16 ← phi( main::@10/(byte*) SCREEN_ANGLE#20 ) + (word*) SQUARES#36 ← phi( main::@10/(word*) SQUARES#46 ) + (byte*) heap_head#53 ← phi( main::@10/(byte*) heap_head#60 ) + (byte) NUM_SQUARES#25 ← phi( main::@10/(byte) NUM_SQUARES#35 ) (byte*) BUCKET_SIZES#13 ← phi( main::@10/(byte*) BUCKET_SIZES#17 ) (word**) BUCKETS#10 ← phi( main::@10/(word**) BUCKETS#16 ) (byte) main::bucket_idx#8 ← phi( main::@10/(byte) main::bucket_idx#5 ) @@ -766,100 +809,48 @@ main::@18: scope:[main] from main::@10 *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@1 main::@21: scope:[main] from main::@7 - (byte*) SCREEN_ANGLE#18 ← phi( main::@7/(byte*) SCREEN_ANGLE#22 ) - (word*) SQUARES#36 ← phi( main::@7/(word*) SQUARES#38 ) - (byte*) heap_head#55 ← phi( main::@7/(byte*) heap_head#56 ) - (byte) NUM_SQUARES#25 ← phi( main::@7/(byte) NUM_SQUARES#27 ) + (byte*) SCREEN_ANGLE#17 ← phi( main::@7/(byte*) SCREEN_ANGLE#21 ) + (word*) SQUARES#37 ← phi( main::@7/(word*) SQUARES#39 ) + (byte*) heap_head#54 ← phi( main::@7/(byte*) heap_head#55 ) + (byte) NUM_SQUARES#26 ← phi( main::@7/(byte) NUM_SQUARES#28 ) (byte*) BUCKET_SIZES#14 ← phi( main::@7/(byte*) BUCKET_SIZES#18 ) (word**) BUCKETS#11 ← phi( main::@7/(word**) BUCKETS#17 ) (byte) main::bucket_idx#9 ← phi( main::@7/(byte) main::bucket_idx#1 ) *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@1 main::@25: scope:[main] from main::@7 - (word*) SQUARES#27 ← phi( main::@7/(word*) SQUARES#38 ) - (byte*) heap_head#49 ← phi( main::@7/(byte*) heap_head#56 ) - (byte) NUM_SQUARES#19 ← phi( main::@7/(byte) NUM_SQUARES#27 ) + (word*) SQUARES#27 ← phi( main::@7/(word*) SQUARES#39 ) + (byte*) heap_head#48 ← phi( main::@7/(byte*) heap_head#55 ) + (byte) NUM_SQUARES#19 ← phi( main::@7/(byte) NUM_SQUARES#28 ) *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@28 main::@28: scope:[main] from main::@1 main::@25 main::@29 (word*) SQUARES#22 ← phi( main::@1/(word*) SQUARES#26 main::@25/(word*) SQUARES#27 main::@29/(word*) SQUARES#28 ) - (byte*) heap_head#42 ← phi( main::@1/(byte*) heap_head#48 main::@25/(byte*) heap_head#49 main::@29/(byte*) heap_head#50 ) + (byte*) heap_head#41 ← phi( main::@1/(byte*) heap_head#47 main::@25/(byte*) heap_head#48 main::@29/(byte*) heap_head#49 ) (byte) NUM_SQUARES#15 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@25/(byte) NUM_SQUARES#19 main::@29/(byte) NUM_SQUARES#20 ) if(true) goto main::@29 to:main::@return main::@29: scope:[main] from main::@28 (word*) SQUARES#28 ← phi( main::@28/(word*) SQUARES#22 ) - (byte*) heap_head#50 ← phi( main::@28/(byte*) heap_head#42 ) + (byte*) heap_head#49 ← phi( main::@28/(byte*) heap_head#41 ) (byte) NUM_SQUARES#20 ← phi( main::@28/(byte) NUM_SQUARES#15 ) *((const byte*) COLS+(number) $3e7) ← ++ *((const byte*) COLS+(number) $3e7) to:main::@28 main::@return: scope:[main] from main::@28 (word*) SQUARES#13 ← phi( main::@28/(word*) SQUARES#22 ) - (byte*) heap_head#26 ← phi( main::@28/(byte*) heap_head#42 ) + (byte*) heap_head#29 ← phi( main::@28/(byte*) heap_head#41 ) (byte) NUM_SQUARES#10 ← phi( main::@28/(byte) NUM_SQUARES#15 ) (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10 - (byte*) heap_head#9 ← (byte*) heap_head#26 + (byte*) heap_head#12 ← (byte*) heap_head#29 (word*) SQUARES#4 ← (word*) SQUARES#13 return to:@return -@23: scope:[] from @28 - (byte*) SCREEN_ANGLE#16 ← phi( @28/(byte*) SCREEN_ANGLE#0 ) - (word*) SQUARES#50 ← phi( @28/(word*) SQUARES#53 ) - (byte) NUM_SQUARES#41 ← phi( @28/(byte) NUM_SQUARES#46 ) - (byte*) SCREEN_DIST#8 ← phi( @28/(byte*) SCREEN_DIST#9 ) - (byte*) heap_head#36 ← phi( @28/(byte*) heap_head#6 ) - (word) malloc::size#3 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE - call malloc - (void*) malloc::return#5 ← (void*) malloc::return#1 - to:@29 -@29: scope:[] from @23 - (byte*) SCREEN_ANGLE#14 ← phi( @23/(byte*) SCREEN_ANGLE#16 ) - (word*) SQUARES#47 ← phi( @23/(word*) SQUARES#50 ) - (byte) NUM_SQUARES#36 ← phi( @23/(byte) NUM_SQUARES#41 ) - (byte*) SCREEN_DIST#7 ← phi( @23/(byte*) SCREEN_DIST#8 ) - (byte*) heap_head#27 ← phi( @23/(byte*) heap_head#2 ) - (void*) malloc::return#13 ← phi( @23/(void*) malloc::return#5 ) - (void*~) $2 ← (void*) malloc::return#13 - (byte*) heap_head#10 ← (byte*) heap_head#27 - (byte*) BUCKET_SIZES#0 ← ((byte*)) (void*~) $2 - (word) malloc::size#4 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER - call malloc - (void*) malloc::return#6 ← (void*) malloc::return#1 - to:@30 -@30: scope:[] from @29 - (byte*) BUCKET_SIZES#27 ← phi( @29/(byte*) BUCKET_SIZES#0 ) - (byte*) SCREEN_ANGLE#12 ← phi( @29/(byte*) SCREEN_ANGLE#14 ) - (word*) SQUARES#39 ← phi( @29/(word*) SQUARES#47 ) - (byte) NUM_SQUARES#28 ← phi( @29/(byte) NUM_SQUARES#36 ) - (byte*) SCREEN_DIST#6 ← phi( @29/(byte*) SCREEN_DIST#7 ) - (byte*) heap_head#28 ← phi( @29/(byte*) heap_head#2 ) - (void*) malloc::return#14 ← phi( @29/(void*) malloc::return#6 ) - (void*~) $3 ← (void*) malloc::return#14 - (byte*) heap_head#11 ← (byte*) heap_head#28 - (word**) BUCKETS#0 ← ((word**)) (void*~) $3 - (word) malloc::size#5 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE - call malloc - (void*) malloc::return#7 ← (void*) malloc::return#1 - to:@31 -@31: scope:[] from @30 - (word**) BUCKETS#30 ← phi( @30/(word**) BUCKETS#0 ) - (byte*) BUCKET_SIZES#23 ← phi( @30/(byte*) BUCKET_SIZES#27 ) - (byte*) SCREEN_ANGLE#9 ← phi( @30/(byte*) SCREEN_ANGLE#12 ) - (word*) SQUARES#34 ← phi( @30/(word*) SQUARES#39 ) - (byte) NUM_SQUARES#23 ← phi( @30/(byte) NUM_SQUARES#28 ) - (byte*) SCREEN_DIST#5 ← phi( @30/(byte*) SCREEN_DIST#6 ) - (byte*) heap_head#29 ← phi( @30/(byte*) heap_head#2 ) - (void*) malloc::return#15 ← phi( @30/(void*) malloc::return#7 ) - (void*~) $4 ← (void*) malloc::return#15 - (byte*) heap_head#12 ← (byte*) heap_head#29 - (byte*) BUCKET_IDX#0 ← ((byte*)) (void*~) $4 - to:@26 (void()) init_buckets((byte*) init_buckets::screen) init_buckets: scope:[init_buckets] from main::@35 (byte*) BUCKET_IDX#11 ← phi( main::@35/(byte*) BUCKET_IDX#12 ) (word**) BUCKETS#25 ← phi( main::@35/(word**) BUCKETS#15 ) - (byte*) heap_head#75 ← phi( main::@35/(byte*) heap_head#41 ) + (byte*) heap_head#74 ← phi( main::@35/(byte*) heap_head#40 ) (byte*) init_buckets::screen#6 ← phi( main::@35/(byte*) init_buckets::screen#0 ) (byte*) BUCKET_SIZES#6 ← phi( main::@35/(byte*) BUCKET_SIZES#11 ) (byte) init_buckets::i#0 ← (byte) 0 @@ -867,7 +858,7 @@ init_buckets: scope:[init_buckets] from main::@35 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 (byte*) BUCKET_IDX#10 ← phi( init_buckets/(byte*) BUCKET_IDX#11 init_buckets::@1/(byte*) BUCKET_IDX#10 ) (word**) BUCKETS#21 ← phi( init_buckets/(word**) BUCKETS#25 init_buckets::@1/(word**) BUCKETS#21 ) - (byte*) heap_head#69 ← phi( init_buckets/(byte*) heap_head#75 init_buckets::@1/(byte*) heap_head#69 ) + (byte*) heap_head#68 ← phi( init_buckets/(byte*) heap_head#74 init_buckets::@1/(byte*) heap_head#68 ) (byte*) init_buckets::screen#4 ← phi( init_buckets/(byte*) init_buckets::screen#6 init_buckets::@1/(byte*) init_buckets::screen#4 ) (byte) init_buckets::i#2 ← phi( init_buckets/(byte) init_buckets::i#0 init_buckets::@1/(byte) init_buckets::i#1 ) (byte*) BUCKET_SIZES#2 ← phi( init_buckets/(byte*) BUCKET_SIZES#6 init_buckets::@1/(byte*) BUCKET_SIZES#2 ) @@ -879,7 +870,7 @@ init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 init_buckets::@2: scope:[init_buckets] from init_buckets::@1 (byte*) BUCKET_IDX#9 ← phi( init_buckets::@1/(byte*) BUCKET_IDX#10 ) (word**) BUCKETS#18 ← phi( init_buckets::@1/(word**) BUCKETS#21 ) - (byte*) heap_head#63 ← phi( init_buckets::@1/(byte*) heap_head#69 ) + (byte*) heap_head#62 ← phi( init_buckets::@1/(byte*) heap_head#68 ) (byte*) BUCKET_SIZES#7 ← phi( init_buckets::@1/(byte*) BUCKET_SIZES#2 ) (byte*) init_buckets::screen#1 ← phi( init_buckets::@1/(byte*) init_buckets::screen#4 ) (byte*) init_buckets::dist#0 ← (byte*) init_buckets::screen#1 @@ -889,7 +880,7 @@ init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 (byte*) init_buckets::screen#11 ← phi( init_buckets::@2/(byte*) init_buckets::screen#1 init_buckets::@3/(byte*) init_buckets::screen#11 ) (byte*) BUCKET_IDX#8 ← phi( init_buckets::@2/(byte*) BUCKET_IDX#9 init_buckets::@3/(byte*) BUCKET_IDX#8 ) (word**) BUCKETS#13 ← phi( init_buckets::@2/(word**) BUCKETS#18 init_buckets::@3/(word**) BUCKETS#13 ) - (byte*) heap_head#57 ← phi( init_buckets::@2/(byte*) heap_head#63 init_buckets::@3/(byte*) heap_head#57 ) + (byte*) heap_head#56 ← phi( init_buckets::@2/(byte*) heap_head#62 init_buckets::@3/(byte*) heap_head#56 ) (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) init_buckets::i1#0 init_buckets::@3/(word) init_buckets::i1#1 ) (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#0 init_buckets::@3/(byte*) init_buckets::dist#1 ) (byte*) BUCKET_SIZES#3 ← phi( init_buckets::@2/(byte*) BUCKET_SIZES#7 init_buckets::@3/(byte*) BUCKET_SIZES#3 ) @@ -903,7 +894,7 @@ init_buckets::@4: scope:[init_buckets] from init_buckets::@3 (byte*) init_buckets::screen#10 ← phi( init_buckets::@3/(byte*) init_buckets::screen#11 ) (byte*) BUCKET_IDX#7 ← phi( init_buckets::@3/(byte*) BUCKET_IDX#8 ) (word**) BUCKETS#8 ← phi( init_buckets::@3/(word**) BUCKETS#13 ) - (byte*) heap_head#51 ← phi( init_buckets::@3/(byte*) heap_head#57 ) + (byte*) heap_head#50 ← phi( init_buckets::@3/(byte*) heap_head#56 ) (byte*) BUCKET_SIZES#9 ← phi( init_buckets::@3/(byte*) BUCKET_SIZES#3 ) (word) init_buckets::i2#0 ← (word) 0 to:init_buckets::@5 @@ -911,7 +902,7 @@ init_buckets::@5: scope:[init_buckets] from init_buckets::@11 init_buckets::@4 (byte*) init_buckets::screen#9 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 init_buckets::@4/(byte*) init_buckets::screen#10 ) (byte*) BUCKET_IDX#6 ← phi( init_buckets::@11/(byte*) BUCKET_IDX#5 init_buckets::@4/(byte*) BUCKET_IDX#7 ) (word**) BUCKETS#5 ← phi( init_buckets::@11/(word**) BUCKETS#2 init_buckets::@4/(word**) BUCKETS#8 ) - (byte*) heap_head#37 ← phi( init_buckets::@11/(byte*) heap_head#13 init_buckets::@4/(byte*) heap_head#51 ) + (byte*) heap_head#36 ← phi( init_buckets::@11/(byte*) heap_head#13 init_buckets::@4/(byte*) heap_head#50 ) (word) init_buckets::i2#2 ← phi( init_buckets::@11/(word) init_buckets::i2#1 init_buckets::@4/(word) init_buckets::i2#0 ) (byte*) BUCKET_SIZES#4 ← phi( init_buckets::@11/(byte*) BUCKET_SIZES#8 init_buckets::@4/(byte*) BUCKET_SIZES#9 ) (byte~) init_buckets::$3 ← *((byte*) BUCKET_SIZES#4 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER @@ -936,14 +927,14 @@ init_buckets::@11: scope:[init_buckets] from init_buckets::@5 if((bool~) init_buckets::$5) goto init_buckets::@5 to:init_buckets::@6 init_buckets::@6: scope:[init_buckets] from init_buckets::@11 - (byte*) heap_head#64 ← phi( init_buckets::@11/(byte*) heap_head#13 ) + (byte*) heap_head#63 ← phi( init_buckets::@11/(byte*) heap_head#13 ) (word**) BUCKETS#14 ← phi( init_buckets::@11/(word**) BUCKETS#2 ) (byte*) init_buckets::screen#7 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 ) (byte*) BUCKET_IDX#3 ← phi( init_buckets::@11/(byte*) BUCKET_IDX#5 ) (byte) init_buckets::i3#0 ← (byte) 0 to:init_buckets::@7 init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 - (byte*) heap_head#58 ← phi( init_buckets::@6/(byte*) heap_head#64 init_buckets::@7/(byte*) heap_head#58 ) + (byte*) heap_head#57 ← phi( init_buckets::@6/(byte*) heap_head#63 init_buckets::@7/(byte*) heap_head#57 ) (word**) BUCKETS#9 ← phi( init_buckets::@6/(word**) BUCKETS#14 init_buckets::@7/(word**) BUCKETS#9 ) (byte*) init_buckets::screen#5 ← phi( init_buckets::@6/(byte*) init_buckets::screen#7 init_buckets::@7/(byte*) init_buckets::screen#5 ) (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) init_buckets::i3#0 init_buckets::@7/(byte) init_buckets::i3#1 ) @@ -954,7 +945,7 @@ init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 if((bool~) init_buckets::$6) goto init_buckets::@7 to:init_buckets::@8 init_buckets::@8: scope:[init_buckets] from init_buckets::@7 - (byte*) heap_head#52 ← phi( init_buckets::@7/(byte*) heap_head#58 ) + (byte*) heap_head#51 ← phi( init_buckets::@7/(byte*) heap_head#57 ) (byte*) BUCKET_IDX#4 ← phi( init_buckets::@7/(byte*) BUCKET_IDX#1 ) (word**) BUCKETS#6 ← phi( init_buckets::@7/(word**) BUCKETS#9 ) (byte*) init_buckets::screen#2 ← phi( init_buckets::@7/(byte*) init_buckets::screen#5 ) @@ -962,7 +953,7 @@ init_buckets::@8: scope:[init_buckets] from init_buckets::@7 (word) init_buckets::i4#0 ← (word) 0 to:init_buckets::@9 init_buckets::@9: scope:[init_buckets] from init_buckets::@8 init_buckets::@9 - (byte*) heap_head#43 ← phi( init_buckets::@8/(byte*) heap_head#52 init_buckets::@9/(byte*) heap_head#43 ) + (byte*) heap_head#42 ← phi( init_buckets::@8/(byte*) heap_head#51 init_buckets::@9/(byte*) heap_head#42 ) (word) init_buckets::i4#2 ← phi( init_buckets::@8/(word) init_buckets::i4#0 init_buckets::@9/(word) init_buckets::i4#1 ) (byte*) BUCKET_IDX#2 ← phi( init_buckets::@8/(byte*) BUCKET_IDX#4 init_buckets::@9/(byte*) BUCKET_IDX#2 ) (byte*) init_buckets::screen#3 ← phi( init_buckets::@8/(byte*) init_buckets::screen#2 init_buckets::@9/(byte*) init_buckets::screen#3 ) @@ -982,7 +973,7 @@ init_buckets::@9: scope:[init_buckets] from init_buckets::@8 init_buckets::@9 if((bool~) init_buckets::$11) goto init_buckets::@9 to:init_buckets::@return init_buckets::@return: scope:[init_buckets] from init_buckets::@9 - (byte*) heap_head#31 ← phi( init_buckets::@9/(byte*) heap_head#43 ) + (byte*) heap_head#31 ← phi( init_buckets::@9/(byte*) heap_head#42 ) (byte*) heap_head#14 ← (byte*) heap_head#31 return to:@return @@ -1000,8 +991,8 @@ init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_an (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) - (byte) init_angle_screen::x#0 ← (number) 0 - (byte) init_angle_screen::xb#0 ← (number) $27 + (byte) init_angle_screen::x#0 ← (byte) 0 + (byte) init_angle_screen::xb#0 ← (byte) $27 to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@9 (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 ) @@ -1072,7 +1063,7 @@ init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@ init_dist_screen: scope:[init_dist_screen] from main (byte*) init_dist_screen::screen#2 ← phi( main/(byte*) init_dist_screen::screen#0 ) (word*) SQUARES#23 ← phi( main/(word*) SQUARES#21 ) - (byte*) heap_head#44 ← phi( main/(byte*) heap_head#40 ) + (byte*) heap_head#43 ← phi( main/(byte*) heap_head#39 ) (byte) NUM_SQUARES#3 ← (number) $30 call init_squares to:init_dist_screen::@19 @@ -1089,7 +1080,7 @@ init_dist_screen::@19: scope:[init_dist_screen] from init_dist_screen (byte) init_dist_screen::y#0 ← (byte) 0 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@19 init_dist_screen::@7 - (byte*) heap_head#76 ← phi( init_dist_screen::@19/(byte*) heap_head#15 init_dist_screen::@7/(byte*) heap_head#45 ) + (byte*) heap_head#75 ← phi( init_dist_screen::@19/(byte*) heap_head#15 init_dist_screen::@7/(byte*) heap_head#44 ) (byte) NUM_SQUARES#47 ← phi( init_dist_screen::@19/(byte) NUM_SQUARES#52 init_dist_screen::@7/(byte) NUM_SQUARES#16 ) (byte*) init_dist_screen::screen_bottomline#14 ← phi( init_dist_screen::@19/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) (byte*) init_dist_screen::screen_topline#14 ← phi( init_dist_screen::@19/(byte*) init_dist_screen::screen_topline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) @@ -1101,7 +1092,7 @@ init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@19 init_ if((bool~) init_dist_screen::$3) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - (byte*) heap_head#70 ← phi( init_dist_screen::@1/(byte*) heap_head#76 ) + (byte*) heap_head#69 ← phi( init_dist_screen::@1/(byte*) heap_head#75 ) (byte) NUM_SQUARES#42 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#47 ) (byte) init_dist_screen::y#9 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 ) (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 ) @@ -1112,7 +1103,7 @@ init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 (number~) init_dist_screen::$7 ← (number~) init_dist_screen::$6 to:init_dist_screen::@4 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - (byte*) heap_head#71 ← phi( init_dist_screen::@1/(byte*) heap_head#76 ) + (byte*) heap_head#70 ← phi( init_dist_screen::@1/(byte*) heap_head#75 ) (byte) NUM_SQUARES#43 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#47 ) (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 ) (byte*) init_dist_screen::screen_bottomline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 ) @@ -1123,7 +1114,7 @@ init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 (number~) init_dist_screen::$5 ← (number~) init_dist_screen::$4 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - (byte*) heap_head#65 ← phi( init_dist_screen::@2/(byte*) heap_head#70 init_dist_screen::@3/(byte*) heap_head#71 ) + (byte*) heap_head#64 ← phi( init_dist_screen::@2/(byte*) heap_head#69 init_dist_screen::@3/(byte*) heap_head#70 ) (byte) NUM_SQUARES#37 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#42 init_dist_screen::@3/(byte) NUM_SQUARES#43 ) (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 ) (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 ) @@ -1137,7 +1128,7 @@ init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_d to:init_dist_screen::@20 init_dist_screen::@20: scope:[init_dist_screen] from init_dist_screen::@4 (word*) SQUARES#41 ← phi( init_dist_screen::@4/(word*) SQUARES#19 ) - (byte*) heap_head#59 ← phi( init_dist_screen::@4/(byte*) heap_head#65 ) + (byte*) heap_head#58 ← phi( init_dist_screen::@4/(byte*) heap_head#64 ) (byte) NUM_SQUARES#29 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#37 ) (byte) init_dist_screen::y#5 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#7 ) (byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#8 ) @@ -1145,14 +1136,14 @@ init_dist_screen::@20: scope:[init_dist_screen] from init_dist_screen::@4 (word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 ) (word~) init_dist_screen::$9 ← (word) sqr::return#5 (word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9 - (byte) init_dist_screen::x#0 ← (number) 0 - (byte) init_dist_screen::xb#0 ← (number) $27 + (byte) init_dist_screen::x#0 ← (byte) 0 + (byte) init_dist_screen::xb#0 ← (byte) $27 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@20 init_dist_screen::@22 (byte) init_dist_screen::xb#8 ← phi( init_dist_screen::@20/(byte) init_dist_screen::xb#0 init_dist_screen::@22/(byte) init_dist_screen::xb#1 ) (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@20/(word) init_dist_screen::yds#0 init_dist_screen::@22/(word) init_dist_screen::yds#7 ) (word*) SQUARES#31 ← phi( init_dist_screen::@20/(word*) SQUARES#41 init_dist_screen::@22/(word*) SQUARES#42 ) - (byte*) heap_head#53 ← phi( init_dist_screen::@20/(byte*) heap_head#59 init_dist_screen::@22/(byte*) heap_head#60 ) + (byte*) heap_head#52 ← phi( init_dist_screen::@20/(byte*) heap_head#58 init_dist_screen::@22/(byte*) heap_head#59 ) (byte) NUM_SQUARES#21 ← phi( init_dist_screen::@20/(byte) NUM_SQUARES#29 init_dist_screen::@22/(byte) NUM_SQUARES#30 ) (byte) init_dist_screen::y#4 ← phi( init_dist_screen::@20/(byte) init_dist_screen::y#5 init_dist_screen::@22/(byte) init_dist_screen::y#6 ) (byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@20/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@22/(byte*) init_dist_screen::screen_bottomline#3 ) @@ -1162,7 +1153,7 @@ init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@20 init_ if((bool~) init_dist_screen::$10) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - (byte*) heap_head#82 ← phi( init_dist_screen::@5/(byte*) heap_head#53 ) + (byte*) heap_head#81 ← phi( init_dist_screen::@5/(byte*) heap_head#52 ) (byte) init_dist_screen::y#14 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#4 ) (byte) init_dist_screen::xb#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#8 ) (byte*) init_dist_screen::screen_bottomline#13 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#4 ) @@ -1178,7 +1169,7 @@ init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 to:init_dist_screen::@9 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 (word*) SQUARES#24 ← phi( init_dist_screen::@5/(word*) SQUARES#31 ) - (byte*) heap_head#45 ← phi( init_dist_screen::@5/(byte*) heap_head#53 ) + (byte*) heap_head#44 ← phi( init_dist_screen::@5/(byte*) heap_head#52 ) (byte) NUM_SQUARES#16 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#21 ) (byte) init_dist_screen::y#3 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#4 ) (byte*) init_dist_screen::screen_bottomline#2 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#4 ) @@ -1190,7 +1181,7 @@ init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 if((bool~) init_dist_screen::$21) goto init_dist_screen::@1 to:init_dist_screen::@return init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 - (byte*) heap_head#77 ← phi( init_dist_screen::@6/(byte*) heap_head#82 ) + (byte*) heap_head#76 ← phi( init_dist_screen::@6/(byte*) heap_head#81 ) (byte) init_dist_screen::y#12 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#14 ) (byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#7 ) (byte*) init_dist_screen::screen_bottomline#9 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#13 ) @@ -1204,7 +1195,7 @@ init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 (number~) init_dist_screen::$16 ← (number~) init_dist_screen::$15 to:init_dist_screen::@10 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - (byte*) heap_head#78 ← phi( init_dist_screen::@6/(byte*) heap_head#82 ) + (byte*) heap_head#77 ← phi( init_dist_screen::@6/(byte*) heap_head#81 ) (byte) init_dist_screen::y#13 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#14 ) (byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#7 ) (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#13 ) @@ -1218,7 +1209,7 @@ init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 (number~) init_dist_screen::$14 ← (number~) init_dist_screen::$13 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - (byte*) heap_head#72 ← phi( init_dist_screen::@8/(byte*) heap_head#77 init_dist_screen::@9/(byte*) heap_head#78 ) + (byte*) heap_head#71 ← phi( init_dist_screen::@8/(byte*) heap_head#76 init_dist_screen::@9/(byte*) heap_head#77 ) (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#12 init_dist_screen::@9/(byte) init_dist_screen::y#13 ) (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#5 init_dist_screen::@9/(byte) init_dist_screen::xb#6 ) (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#10 ) @@ -1234,7 +1225,7 @@ init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_ (word) sqr::return#3 ← (word) sqr::return#1 to:init_dist_screen::@21 init_dist_screen::@21: scope:[init_dist_screen] from init_dist_screen::@10 - (byte*) heap_head#66 ← phi( init_dist_screen::@10/(byte*) heap_head#72 ) + (byte*) heap_head#65 ← phi( init_dist_screen::@10/(byte*) heap_head#71 ) (byte) init_dist_screen::y#8 ← phi( init_dist_screen::@10/(byte) init_dist_screen::y#11 ) (byte) init_dist_screen::xb#3 ← phi( init_dist_screen::@10/(byte) init_dist_screen::xb#4 ) (byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#7 ) @@ -1255,7 +1246,7 @@ init_dist_screen::@21: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@22: scope:[init_dist_screen] from init_dist_screen::@21 (word) init_dist_screen::yds#7 ← phi( init_dist_screen::@21/(word) init_dist_screen::yds#1 ) (word*) SQUARES#42 ← phi( init_dist_screen::@21/(word*) SQUARES#20 ) - (byte*) heap_head#60 ← phi( init_dist_screen::@21/(byte*) heap_head#66 ) + (byte*) heap_head#59 ← phi( init_dist_screen::@21/(byte*) heap_head#65 ) (byte) NUM_SQUARES#30 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#13 ) (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@21/(byte) init_dist_screen::y#8 ) (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@21/(byte) init_dist_screen::xb#3 ) @@ -1274,7 +1265,7 @@ init_dist_screen::@22: scope:[init_dist_screen] from init_dist_screen::@21 to:init_dist_screen::@5 init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 (word*) SQUARES#15 ← phi( init_dist_screen::@7/(word*) SQUARES#24 ) - (byte*) heap_head#33 ← phi( init_dist_screen::@7/(byte*) heap_head#45 ) + (byte*) heap_head#33 ← phi( init_dist_screen::@7/(byte*) heap_head#44 ) (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@7/(byte) NUM_SQUARES#16 ) (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11 (byte*) heap_head#16 ← (byte*) heap_head#33 @@ -1287,14 +1278,14 @@ init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 (byte*) BUCKET_SIZES#19 ← phi( @31/(byte*) BUCKET_SIZES#23 ) (byte*) SCREEN_ANGLE#5 ← phi( @31/(byte*) SCREEN_ANGLE#9 ) (word*) SQUARES#25 ← phi( @31/(word*) SQUARES#34 ) - (byte*) heap_head#46 ← phi( @31/(byte*) heap_head#12 ) + (byte*) heap_head#45 ← phi( @31/(byte*) heap_head#9 ) (byte) NUM_SQUARES#17 ← phi( @31/(byte) NUM_SQUARES#23 ) (byte*) SCREEN_DIST#3 ← phi( @31/(byte*) SCREEN_DIST#5 ) call main to:@32 @32: scope:[] from @26 (word*) SQUARES#16 ← phi( @26/(word*) SQUARES#4 ) - (byte*) heap_head#34 ← phi( @26/(byte*) heap_head#9 ) + (byte*) heap_head#34 ← phi( @26/(byte*) heap_head#12 ) (byte) NUM_SQUARES#12 ← phi( @26/(byte) NUM_SQUARES#2 ) (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12 (byte*) heap_head#17 ← (byte*) heap_head#34 @@ -1310,7 +1301,6 @@ SYMBOL TABLE SSA (void*~) $4 (label) @17 (label) @22 -(label) @23 (label) @26 (label) @27 (label) @28 @@ -1404,10 +1394,10 @@ SYMBOL TABLE SSA (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -2428,12 +2410,8 @@ Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (nu Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9 Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8 Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::bucket_idx#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in (bool~) main::$5 ← (byte) main::bucket_size#0 > (number) 0 -Adding number conversion cast (unumber) $ff in (byte) main::min_angle#0 ← (number) $ff -Adding number conversion cast (unumber) $ffff in (word) main::min_offset#0 ← (number) $ffff -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $ffff in (bool~) main::$14 ← (word) main::min_offset#2 != (number) $ffff Adding number conversion cast (unumber) $3e7 in *((const byte*) COLS+(number) $3e7) ← ++ *((const byte*) COLS+(number) $3e7) Adding number conversion cast (unumber) 0 in *((byte*) BUCKET_SIZES#2 + (byte) init_buckets::i#2) ← (number) 0 @@ -2443,8 +2421,6 @@ Adding number conversion cast (unumber) 0 in *((byte*) BUCKET_IDX#1 + (byte) ini Adding number conversion cast (unumber) 1 in (byte) init_buckets::i3#1 ← (byte) init_buckets::i3#2 + rangenext(0,NUM_BUCKETS-1) Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c -Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2 @@ -2472,15 +2448,13 @@ Adding number conversion cast (unumber) init_dist_screen::$7 in (number~) init_d Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2 Adding number conversion cast (unumber) init_dist_screen::$4 in (number~) init_dist_screen::$4 ← (unumber)(number) $18 - (byte) init_dist_screen::y2#2 Adding number conversion cast (unumber) init_dist_screen::$5 in (number~) init_dist_screen::$5 ← (unumber~) init_dist_screen::$4 -Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#65 ← phi( init_dist_screen::@2/(byte*) heap_head#70 init_dist_screen::@3/(byte*) heap_head#71 ) +Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#64 ← phi( init_dist_screen::@2/(byte*) heap_head#69 init_dist_screen::@3/(byte*) heap_head#70 ) (byte) NUM_SQUARES#37 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#42 init_dist_screen::@3/(byte) NUM_SQUARES#43 ) (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 ) (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 ) (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 ) (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#29 init_dist_screen::@3/(word*) SQUARES#30 ) (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 ) -Adding number conversion cast (unumber) 0 in (byte) init_dist_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_dist_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_dist_screen::$11 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (unumber)(number) 2 @@ -2493,7 +2467,7 @@ Adding number conversion cast (unumber) init_dist_screen::$16 in (number~) init_ Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$13 ← (number) $27 - (byte) init_dist_screen::x2#2 Adding number conversion cast (unumber) init_dist_screen::$13 in (number~) init_dist_screen::$13 ← (unumber)(number) $27 - (byte) init_dist_screen::x2#2 Adding number conversion cast (unumber) init_dist_screen::$14 in (number~) init_dist_screen::$14 ← (unumber~) init_dist_screen::$13 -Adding number conversion cast (unumber) init_dist_screen::$17 in (byte*) heap_head#72 ← phi( init_dist_screen::@8/(byte*) heap_head#77 init_dist_screen::@9/(byte*) heap_head#78 ) +Adding number conversion cast (unumber) init_dist_screen::$17 in (byte*) heap_head#71 ← phi( init_dist_screen::@8/(byte*) heap_head#76 init_dist_screen::@9/(byte*) heap_head#77 ) (byte) init_dist_screen::y#11 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#12 init_dist_screen::@9/(byte) init_dist_screen::y#13 ) (byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#5 init_dist_screen::@9/(byte) init_dist_screen::xb#6 ) (byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#10 ) @@ -2507,19 +2481,12 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1 Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) -Inlining cast (byte) NUM_SQUARES#0 ← (unumber)(number) $ff Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 -Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0 Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 -Inlining cast (byte) main::bucket_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::min_angle#0 ← (unumber)(number) $ff -Inlining cast (word) main::min_offset#0 ← (unumber)(number) $ffff -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) BUCKET_SIZES#0 ← (byte*)(void*~) $2 Inlining cast (word**) BUCKETS#0 ← (word**)(void*~) $3 Inlining cast (byte*) BUCKET_IDX#0 ← (byte*)(void*~) $4 @@ -2527,13 +2494,9 @@ Inlining cast *((byte*) BUCKET_SIZES#2 + (byte) init_buckets::i#2) ← (unumber) Inlining cast *((word**) BUCKETS#2 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$4 Inlining cast *((byte*) BUCKET_IDX#1 + (byte) init_buckets::i3#2) ← (unumber)(number) 0 Inlining cast (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30 -Inlining cast (byte) init_dist_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_dist_screen::xb#0 ← (unumber)(number) $27 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53280 @@ -2547,15 +2510,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -2571,12 +2531,8 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast $ff -Simplifying constant integer cast $ffff -Simplifying constant integer cast 0 Simplifying constant integer cast $ffff Simplifying constant integer cast $3e7 Simplifying constant integer cast 0 @@ -2584,8 +2540,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -2602,8 +2556,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $18 Simplifying constant integer cast $18 Simplifying constant integer cast $18 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -2619,14 +2571,11 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -2643,12 +2592,8 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (word) $8000 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff -Finalized unsigned number type (word) $ffff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $ffff Finalized unsigned number type (word) $3e7 Finalized unsigned number type (byte) 0 @@ -2656,8 +2601,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -2672,8 +2615,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -2713,11 +2654,11 @@ Inversing boolean not [128] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi Inversing boolean not [137] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [136] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 Inversing boolean not [148] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [147] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4 Inversing boolean not [172] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [171] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 -Inversing boolean not [227] (bool~) main::$6 ← (byte) main::bucket_size#0 <= (byte) 0 from [226] (bool~) main::$5 ← (byte) main::bucket_size#0 > (byte) 0 -Inversing boolean not [232] (bool~) main::$19 ← (byte) main::bucket_idx#1 != (const byte) NUM_BUCKETS from [231] (bool~) main::$18 ← (byte) main::bucket_idx#1 == (const byte) NUM_BUCKETS -Inversing boolean not [247] (bool~) main::$10 ← *((byte*) main::fill#0) == (const byte) FILL_CHAR from [246] (bool~) main::$9 ← *((byte*) main::fill#0) != (const byte) FILL_CHAR -Inversing boolean not [251] (bool~) main::$15 ← (word) main::min_offset#2 == (word) $ffff from [250] (bool~) main::$14 ← (word) main::min_offset#2 != (word) $ffff -Inversing boolean not [259] (bool~) main::$13 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [258] (bool~) main::$12 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2 +Inversing boolean not [248] (bool~) main::$6 ← (byte) main::bucket_size#0 <= (byte) 0 from [247] (bool~) main::$5 ← (byte) main::bucket_size#0 > (byte) 0 +Inversing boolean not [253] (bool~) main::$19 ← (byte) main::bucket_idx#1 != (const byte) NUM_BUCKETS from [252] (bool~) main::$18 ← (byte) main::bucket_idx#1 == (const byte) NUM_BUCKETS +Inversing boolean not [268] (bool~) main::$10 ← *((byte*) main::fill#0) == (const byte) FILL_CHAR from [267] (bool~) main::$9 ← *((byte*) main::fill#0) != (const byte) FILL_CHAR +Inversing boolean not [272] (bool~) main::$15 ← (word) main::min_offset#2 == (word) $ffff from [271] (bool~) main::$14 ← (word) main::min_offset#2 != (word) $ffff +Inversing boolean not [280] (bool~) main::$13 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [279] (bool~) main::$12 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2 Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 Alias (void*) malloc::return#0 = (void*) malloc::return#9 (void*) malloc::return#1 @@ -2731,12 +2672,12 @@ Alias (word*) bsearch16u::return#1 = (word*) bsearch16u::return#4 Alias (word*) bsearch16u::items#0 = (word*~) bsearch16u::$15 Alias (word*~) bsearch16u::$2 = (word*~) bsearch16u::$1 Alias (word*) bsearch16u::return#2 = (word*~) bsearch16u::$4 -Alias (byte*) heap_head#0 = (byte*) heap_head#47 (byte*) heap_head#35 +Alias (byte*) heap_head#0 = (byte*) heap_head#46 (byte*) heap_head#35 Alias (word) malloc::size#0 = (byte~) init_squares::$0 Alias (void*) malloc::return#10 = (void*) malloc::return#2 Alias (byte) NUM_SQUARES#6 = (byte) NUM_SQUARES#7 Alias (byte*) heap_head#20 = (byte*) heap_head#3 -Alias (byte*) heap_head#21 = (byte*) heap_head#39 (byte*) heap_head#4 +Alias (byte*) heap_head#21 = (byte*) heap_head#38 (byte*) heap_head#4 Alias (word*) SQUARES#17 = (word*) SQUARES#8 (word*) SQUARES#2 Alias (word) sqr::return#0 = (word) sqr::return#4 (word) sqr::return#1 Alias (word*) bsearch16u::return#3 = (word*) bsearch16u::return#5 @@ -2780,43 +2721,52 @@ Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12 Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 -Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#53 (byte) NUM_SQUARES#48 (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 -Alias (word*) SQUARES#0 = (word*) SQUARES#58 (word*) SQUARES#54 (word*) SQUARES#53 (word*) SQUARES#50 (word*) SQUARES#47 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#25 +Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#48 (byte) NUM_SQUARES#44 (byte) NUM_SQUARES#39 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 +Alias (word*) SQUARES#0 = (word*) SQUARES#54 (word*) SQUARES#51 (word*) SQUARES#48 (word*) SQUARES#44 (word*) SQUARES#35 (word*) SQUARES#34 (word*) SQUARES#25 Alias (void*) malloc::return#11 = (void*) malloc::return#3 Alias (byte*) heap_head#22 = (byte*) heap_head#5 Alias (void*) malloc::return#12 = (void*) malloc::return#4 -Alias (byte*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#9 (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#6 (byte*) SCREEN_DIST#5 (byte*) SCREEN_DIST#3 -Alias (byte*) heap_head#23 = (byte*) heap_head#6 (byte*) heap_head#36 -Alias (byte*) SCREEN_ANGLE#1 = (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#20 (byte*) SCREEN_ANGLE#19 +Alias (byte*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#6 (byte*) SCREEN_DIST#5 (byte*) SCREEN_DIST#3 +Alias (byte*) heap_head#23 = (byte*) heap_head#6 +Alias (void*) malloc::return#13 = (void*) malloc::return#5 +Alias (byte*) SCREEN_ANGLE#0 = (byte*) SCREEN_ANGLE#13 (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#9 (byte*) SCREEN_ANGLE#5 +Alias (byte*) heap_head#24 = (byte*) heap_head#7 +Alias (void*) malloc::return#14 = (void*) malloc::return#6 +Alias (byte*) BUCKET_SIZES#0 = (byte*) BUCKET_SIZES#24 (byte*) BUCKET_SIZES#23 (byte*) BUCKET_SIZES#19 +Alias (byte*) heap_head#25 = (byte*) heap_head#8 +Alias (void*) malloc::return#15 = (void*) malloc::return#7 +Alias (word**) BUCKETS#0 = (word**) BUCKETS#30 (word**) BUCKETS#26 +Alias (byte*) heap_head#26 = (byte*) heap_head#9 (byte*) heap_head#45 +Alias (byte*) SCREEN_ANGLE#1 = (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#19 (byte*) SCREEN_ANGLE#18 Alias (byte*) SCREEN_DIST#1 = (byte*) SCREEN_DIST#4 (byte*) SCREEN_DIST#2 Alias (byte*) BUCKET_SIZES#11 = (byte*) BUCKET_SIZES#12 (byte*) BUCKET_SIZES#16 (byte*) BUCKET_SIZES#15 Alias (word**) BUCKETS#12 = (word**) BUCKETS#19 (word**) BUCKETS#22 (word**) BUCKETS#15 Alias (byte*) BUCKET_IDX#12 = (byte*) BUCKET_IDX#13 (byte*) BUCKET_IDX#14 -Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#26 -Alias (byte*) heap_head#24 = (byte*) heap_head#7 (byte*) heap_head#41 -Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#44 (word*) SQUARES#37 -Alias (byte*) heap_head#25 = (byte*) heap_head#8 +Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#27 +Alias (byte*) heap_head#10 = (byte*) heap_head#27 (byte*) heap_head#40 +Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#45 (word*) SQUARES#38 +Alias (byte*) heap_head#11 = (byte*) heap_head#28 Alias (byte) main::bucket_idx#11 = (byte) main::bucket_idx#2 (byte) main::bucket_idx#4 Alias (word**) BUCKETS#1 = (word**) BUCKETS#4 (word**) BUCKETS#24 Alias (byte*) BUCKET_SIZES#1 = (byte*) BUCKET_SIZES#5 (byte*) BUCKET_SIZES#22 -Alias (byte) NUM_SQUARES#35 = (byte) NUM_SQUARES#39 (byte) NUM_SQUARES#45 -Alias (byte*) heap_head#62 = (byte*) heap_head#67 (byte*) heap_head#74 -Alias (word*) SQUARES#46 = (word*) SQUARES#48 (word*) SQUARES#52 -Alias (byte*) SCREEN_ANGLE#10 = (byte*) SCREEN_ANGLE#13 (byte*) SCREEN_ANGLE#8 +Alias (byte) NUM_SQUARES#36 = (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#46 +Alias (byte*) heap_head#61 = (byte*) heap_head#66 (byte*) heap_head#73 +Alias (word*) SQUARES#47 = (word*) SQUARES#49 (word*) SQUARES#53 +Alias (byte*) SCREEN_ANGLE#11 = (byte*) SCREEN_ANGLE#14 (byte*) SCREEN_ANGLE#8 Alias (byte) main::bucket_size#0 = (byte) main::bucket_size#3 Alias (word*) main::bucket#0 = (word*) main::bucket#4 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#5 (byte) main::i#6 Alias (word*) main::bucket#1 = (word*) main::bucket#2 (word*) main::bucket#5 (word*) main::bucket#6 -Alias (byte*) SCREEN_ANGLE#11 = (byte*) SCREEN_ANGLE#4 (byte*) SCREEN_ANGLE#6 (byte*) SCREEN_ANGLE#21 (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#17 +Alias (byte*) SCREEN_ANGLE#12 = (byte*) SCREEN_ANGLE#4 (byte*) SCREEN_ANGLE#6 (byte*) SCREEN_ANGLE#20 (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#16 Alias (byte) main::min_angle#2 = (byte) main::min_angle#3 (byte) main::min_angle#4 Alias (byte) main::bucket_size#1 = (byte) main::bucket_size#6 (byte) main::bucket_size#4 (byte) main::bucket_size#5 Alias (word) main::min_offset#2 = (word) main::min_offset#7 (word) main::min_offset#4 (word) main::min_offset#6 (word) main::min_offset#3 Alias (byte) main::bucket_idx#12 = (byte) main::bucket_idx#14 (byte) main::bucket_idx#7 (byte) main::bucket_idx#5 (byte) main::bucket_idx#13 (byte) main::bucket_idx#8 -Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#51 (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#49 (byte) NUM_SQUARES#50 -Alias (byte*) heap_head#54 = (byte*) heap_head#81 (byte*) heap_head#68 (byte*) heap_head#61 (byte*) heap_head#79 (byte*) heap_head#80 -Alias (word*) SQUARES#35 = (word*) SQUARES#57 (word*) SQUARES#49 (word*) SQUARES#45 (word*) SQUARES#55 (word*) SQUARES#56 +Alias (byte) NUM_SQUARES#25 = (byte) NUM_SQUARES#51 (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#49 (byte) NUM_SQUARES#50 +Alias (byte*) heap_head#53 = (byte*) heap_head#80 (byte*) heap_head#67 (byte*) heap_head#60 (byte*) heap_head#78 (byte*) heap_head#79 +Alias (word*) SQUARES#36 = (word*) SQUARES#57 (word*) SQUARES#50 (word*) SQUARES#46 (word*) SQUARES#55 (word*) SQUARES#56 Alias (word**) BUCKETS#10 = (word**) BUCKETS#29 (word**) BUCKETS#20 (word**) BUCKETS#16 (word**) BUCKETS#27 (word**) BUCKETS#28 -Alias (byte*) BUCKET_SIZES#13 = (byte*) BUCKET_SIZES#26 (byte*) BUCKET_SIZES#20 (byte*) BUCKET_SIZES#17 (byte*) BUCKET_SIZES#24 (byte*) BUCKET_SIZES#25 +Alias (byte*) BUCKET_SIZES#13 = (byte*) BUCKET_SIZES#27 (byte*) BUCKET_SIZES#20 (byte*) BUCKET_SIZES#17 (byte*) BUCKET_SIZES#25 (byte*) BUCKET_SIZES#26 Alias (byte*) main::fill#0 = (byte*~) main::$8 Alias (word) main::offset#0 = (word) main::offset#1 (word) main::offset#2 (word) main::min_offset#1 Alias (byte*) main::angle#0 = (byte*~) main::$11 (byte*) main::angle#1 @@ -2824,29 +2774,20 @@ Alias (byte*) main::fill1#0 = (byte*~) main::$16 Alias (byte) main::bucket_idx#1 = (byte) main::bucket_idx#9 Alias (word**) BUCKETS#11 = (word**) BUCKETS#17 Alias (byte*) BUCKET_SIZES#14 = (byte*) BUCKET_SIZES#18 -Alias (byte) NUM_SQUARES#19 = (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#27 -Alias (byte*) heap_head#49 = (byte*) heap_head#55 (byte*) heap_head#56 -Alias (word*) SQUARES#27 = (word*) SQUARES#36 (word*) SQUARES#38 -Alias (byte*) SCREEN_ANGLE#18 = (byte*) SCREEN_ANGLE#22 +Alias (byte) NUM_SQUARES#19 = (byte) NUM_SQUARES#26 (byte) NUM_SQUARES#28 +Alias (byte*) heap_head#48 = (byte*) heap_head#54 (byte*) heap_head#55 +Alias (word*) SQUARES#27 = (word*) SQUARES#37 (word*) SQUARES#39 +Alias (byte*) SCREEN_ANGLE#17 = (byte*) SCREEN_ANGLE#21 Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#2 -Alias (byte*) heap_head#26 = (byte*) heap_head#50 (byte*) heap_head#42 (byte*) heap_head#9 +Alias (byte*) heap_head#12 = (byte*) heap_head#49 (byte*) heap_head#41 (byte*) heap_head#29 Alias (word*) SQUARES#13 = (word*) SQUARES#28 (word*) SQUARES#22 (word*) SQUARES#4 -Alias (byte*) SCREEN_ANGLE#0 = (byte*) SCREEN_ANGLE#16 (byte*) SCREEN_ANGLE#14 (byte*) SCREEN_ANGLE#12 (byte*) SCREEN_ANGLE#9 (byte*) SCREEN_ANGLE#5 -Alias (void*) malloc::return#13 = (void*) malloc::return#5 -Alias (byte*) heap_head#10 = (byte*) heap_head#27 -Alias (void*) malloc::return#14 = (void*) malloc::return#6 -Alias (byte*) BUCKET_SIZES#0 = (byte*) BUCKET_SIZES#27 (byte*) BUCKET_SIZES#23 (byte*) BUCKET_SIZES#19 -Alias (byte*) heap_head#11 = (byte*) heap_head#28 -Alias (void*) malloc::return#15 = (void*) malloc::return#7 -Alias (word**) BUCKETS#0 = (word**) BUCKETS#30 (word**) BUCKETS#26 -Alias (byte*) heap_head#12 = (byte*) heap_head#29 (byte*) heap_head#46 Alias (byte*) init_buckets::screen#1 = (byte*) init_buckets::screen#4 (byte*) init_buckets::dist#0 Alias (byte*) BUCKET_SIZES#2 = (byte*) BUCKET_SIZES#7 -Alias (byte*) heap_head#63 = (byte*) heap_head#69 +Alias (byte*) heap_head#62 = (byte*) heap_head#68 Alias (word**) BUCKETS#18 = (word**) BUCKETS#21 Alias (byte*) BUCKET_IDX#10 = (byte*) BUCKET_IDX#9 Alias (byte*) BUCKET_SIZES#3 = (byte*) BUCKET_SIZES#9 -Alias (byte*) heap_head#51 = (byte*) heap_head#57 +Alias (byte*) heap_head#50 = (byte*) heap_head#56 Alias (word**) BUCKETS#13 = (word**) BUCKETS#8 Alias (byte*) BUCKET_IDX#7 = (byte*) BUCKET_IDX#8 Alias (byte*) init_buckets::screen#10 = (byte*) init_buckets::screen#11 @@ -2857,12 +2798,12 @@ Alias (word**) BUCKETS#14 = (word**) BUCKETS#2 (word**) BUCKETS#5 Alias (byte*) BUCKET_SIZES#4 = (byte*) BUCKET_SIZES#8 Alias (byte*) BUCKET_IDX#3 = (byte*) BUCKET_IDX#5 (byte*) BUCKET_IDX#6 Alias (byte*) init_buckets::screen#7 = (byte*) init_buckets::screen#8 (byte*) init_buckets::screen#9 -Alias (byte*) heap_head#13 = (byte*) heap_head#30 (byte*) heap_head#64 +Alias (byte*) heap_head#13 = (byte*) heap_head#30 (byte*) heap_head#63 Alias (byte*) init_buckets::screen#2 = (byte*) init_buckets::screen#5 (byte*) init_buckets::dist#2 Alias (word**) BUCKETS#6 = (word**) BUCKETS#9 Alias (byte*) BUCKET_IDX#1 = (byte*) BUCKET_IDX#4 -Alias (byte*) heap_head#52 = (byte*) heap_head#58 -Alias (byte*) heap_head#14 = (byte*) heap_head#31 (byte*) heap_head#43 +Alias (byte*) heap_head#51 = (byte*) heap_head#57 +Alias (byte*) heap_head#14 = (byte*) heap_head#31 (byte*) heap_head#42 Alias (byte*) init_angle_screen::screen_topline#0 = (byte*~) init_angle_screen::$0 Alias (byte*) init_angle_screen::screen_bottomline#0 = (byte*~) init_angle_screen::$1 Alias (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#3 (byte) init_angle_screen::x#4 @@ -2888,7 +2829,7 @@ Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::sc Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#14 (byte*) init_dist_screen::screen_bottomline#12 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#2 Alias (byte) NUM_SQUARES#42 = (byte) NUM_SQUARES#47 (byte) NUM_SQUARES#43 -Alias (byte*) heap_head#70 = (byte*) heap_head#76 (byte*) heap_head#71 +Alias (byte*) heap_head#69 = (byte*) heap_head#75 (byte*) heap_head#70 Alias (byte~) init_dist_screen::$7 = (byte~) init_dist_screen::$6 Alias (byte~) init_dist_screen::$5 = (byte~) init_dist_screen::$4 Alias (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$8 @@ -2897,7 +2838,7 @@ Alias (byte*) init_dist_screen::screen_topline#6 = (byte*) init_dist_screen::scr Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 Alias (byte) init_dist_screen::y#5 = (byte) init_dist_screen::y#7 Alias (byte) NUM_SQUARES#29 = (byte) NUM_SQUARES#37 -Alias (byte*) heap_head#59 = (byte*) heap_head#65 +Alias (byte*) heap_head#58 = (byte*) heap_head#64 Alias (word*) SQUARES#19 = (word*) SQUARES#41 Alias (word) init_dist_screen::yds#0 = (word~) init_dist_screen::$9 Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#3 (byte) init_dist_screen::x#7 (byte) init_dist_screen::x#8 @@ -2908,7 +2849,7 @@ Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::sc Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#9 Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#8 (byte) init_dist_screen::xb#6 Alias (byte) init_dist_screen::y#12 = (byte) init_dist_screen::y#14 (byte) init_dist_screen::y#4 (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#13 -Alias (byte*) heap_head#16 = (byte*) heap_head#82 (byte*) heap_head#53 (byte*) heap_head#45 (byte*) heap_head#77 (byte*) heap_head#78 (byte*) heap_head#33 +Alias (byte*) heap_head#16 = (byte*) heap_head#81 (byte*) heap_head#52 (byte*) heap_head#44 (byte*) heap_head#76 (byte*) heap_head#77 (byte*) heap_head#33 Alias (byte) init_dist_screen::x2#0 = (byte~) init_dist_screen::$11 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 Alias (byte~) init_dist_screen::$16 = (byte~) init_dist_screen::$15 Alias (byte~) init_dist_screen::$14 = (byte~) init_dist_screen::$13 @@ -2922,7 +2863,7 @@ Alias (byte) init_dist_screen::x#4 = (byte) init_dist_screen::x#5 (byte) init_di Alias (byte*) init_dist_screen::screen_bottomline#3 = (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#7 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#3 (byte) init_dist_screen::xb#4 Alias (byte) init_dist_screen::y#11 = (byte) init_dist_screen::y#8 (byte) init_dist_screen::y#6 -Alias (byte*) heap_head#60 = (byte*) heap_head#66 (byte*) heap_head#72 +Alias (byte*) heap_head#59 = (byte*) heap_head#65 (byte*) heap_head#71 Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$18 Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$19 Alias (byte) sqrt::return#2 = (byte) sqrt::return#4 @@ -2946,11 +2887,11 @@ Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Alias (byte) main::i#2 = (byte) main::i#4 Alias (byte) main::bucket_size#1 = (byte) main::bucket_size#2 Alias (word*) main::bucket#1 = (word*) main::bucket#3 -Alias (byte*) SCREEN_ANGLE#11 = (byte*) SCREEN_ANGLE#7 +Alias (byte*) SCREEN_ANGLE#12 = (byte*) SCREEN_ANGLE#7 Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#12 -Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#44 -Alias (byte*) heap_head#54 = (byte*) heap_head#73 -Alias (word*) SQUARES#35 = (word*) SQUARES#51 +Alias (byte) NUM_SQUARES#25 = (byte) NUM_SQUARES#45 +Alias (byte*) heap_head#53 = (byte*) heap_head#72 +Alias (word*) SQUARES#36 = (word*) SQUARES#52 Alias (word**) BUCKETS#10 = (word**) BUCKETS#23 Alias (byte*) BUCKET_SIZES#13 = (byte*) BUCKET_SIZES#21 Alias (word*) SQUARES#19 = (word*) SQUARES#29 @@ -2958,7 +2899,7 @@ Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::sc Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#6 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#5 Alias (byte) NUM_SQUARES#29 = (byte) NUM_SQUARES#42 -Alias (byte*) heap_head#59 = (byte*) heap_head#70 +Alias (byte*) heap_head#58 = (byte*) heap_head#69 Alias (word*) SQUARES#15 = (word*) SQUARES#18 Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3 Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#13 @@ -2967,14 +2908,14 @@ Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#4 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#3 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 Alias (byte) init_dist_screen::y#11 = (byte) init_dist_screen::y#12 -Alias (byte*) heap_head#16 = (byte*) heap_head#60 +Alias (byte*) heap_head#16 = (byte*) heap_head#59 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2 Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1 Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0 Identical Phi Values (word) bsearch16u::key#1 (word) bsearch16u::key#4 Identical Phi Values (byte) NUM_SQUARES#6 (byte) NUM_SQUARES#3 -Identical Phi Values (byte*) heap_head#38 (byte*) heap_head#44 +Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#43 Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1 Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#20 Identical Phi Values (word*) SQUARES#17 (word*) SQUARES#1 @@ -2991,49 +2932,49 @@ Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19 Identical Phi Values (byte*) heap_head#22 (byte*) heap_head#1 Identical Phi Values (byte*) heap_head#23 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#24 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#1 Identical Phi Values (byte*) SCREEN_DIST#1 (byte*) SCREEN_DIST#0 Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0 -Identical Phi Values (byte*) heap_head#40 (byte*) heap_head#12 +Identical Phi Values (byte*) heap_head#39 (byte*) heap_head#26 Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0 Identical Phi Values (byte*) SCREEN_ANGLE#1 (byte*) SCREEN_ANGLE#0 Identical Phi Values (byte*) BUCKET_SIZES#11 (byte*) BUCKET_SIZES#0 Identical Phi Values (word**) BUCKETS#12 (word**) BUCKETS#0 Identical Phi Values (byte*) BUCKET_IDX#12 (byte*) BUCKET_IDX#0 Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11 -Identical Phi Values (byte*) heap_head#24 (byte*) heap_head#16 +Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#16 Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15 -Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#14 +Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#14 Identical Phi Values (byte) main::bucket_idx#11 (byte) main::bucket_idx#6 Identical Phi Values (word**) BUCKETS#1 (word**) BUCKETS#7 Identical Phi Values (byte*) BUCKET_SIZES#1 (byte*) BUCKET_SIZES#10 -Identical Phi Values (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#18 -Identical Phi Values (byte*) heap_head#62 (byte*) heap_head#48 -Identical Phi Values (word*) SQUARES#46 (word*) SQUARES#26 -Identical Phi Values (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#15 +Identical Phi Values (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#18 +Identical Phi Values (byte*) heap_head#61 (byte*) heap_head#47 +Identical Phi Values (word*) SQUARES#47 (word*) SQUARES#26 +Identical Phi Values (byte*) SCREEN_ANGLE#11 (byte*) SCREEN_ANGLE#15 Identical Phi Values (byte) main::bucket_size#1 (byte) main::bucket_size#0 Identical Phi Values (word*) main::bucket#1 (word*) main::bucket#0 -Identical Phi Values (byte*) SCREEN_ANGLE#11 (byte*) SCREEN_ANGLE#10 +Identical Phi Values (byte*) SCREEN_ANGLE#12 (byte*) SCREEN_ANGLE#11 Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#11 -Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#35 -Identical Phi Values (byte*) heap_head#54 (byte*) heap_head#62 -Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#46 +Identical Phi Values (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#36 +Identical Phi Values (byte*) heap_head#53 (byte*) heap_head#61 +Identical Phi Values (word*) SQUARES#36 (word*) SQUARES#47 Identical Phi Values (word**) BUCKETS#10 (word**) BUCKETS#1 Identical Phi Values (byte*) BUCKET_SIZES#13 (byte*) BUCKET_SIZES#1 -Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#1 -Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#1 -Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#1 Identical Phi Values (byte*) BUCKET_SIZES#6 (byte*) BUCKET_SIZES#11 Identical Phi Values (byte*) init_buckets::screen#6 (byte*) init_buckets::screen#0 -Identical Phi Values (byte*) heap_head#75 (byte*) heap_head#24 +Identical Phi Values (byte*) heap_head#74 (byte*) heap_head#10 Identical Phi Values (word**) BUCKETS#25 (word**) BUCKETS#12 Identical Phi Values (byte*) BUCKET_IDX#11 (byte*) BUCKET_IDX#12 Identical Phi Values (byte*) BUCKET_SIZES#2 (byte*) BUCKET_SIZES#6 Identical Phi Values (byte*) init_buckets::screen#1 (byte*) init_buckets::screen#6 -Identical Phi Values (byte*) heap_head#63 (byte*) heap_head#75 +Identical Phi Values (byte*) heap_head#62 (byte*) heap_head#74 Identical Phi Values (word**) BUCKETS#18 (word**) BUCKETS#25 Identical Phi Values (byte*) BUCKET_IDX#10 (byte*) BUCKET_IDX#11 Identical Phi Values (byte*) BUCKET_SIZES#3 (byte*) BUCKET_SIZES#2 -Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#63 +Identical Phi Values (byte*) heap_head#50 (byte*) heap_head#62 Identical Phi Values (word**) BUCKETS#13 (word**) BUCKETS#18 Identical Phi Values (byte*) BUCKET_IDX#7 (byte*) BUCKET_IDX#10 Identical Phi Values (byte*) init_buckets::screen#10 (byte*) init_buckets::screen#1 @@ -3045,16 +2986,16 @@ Identical Phi Values (byte*) heap_head#13 (byte*) heap_head#1 Identical Phi Values (byte*) BUCKET_IDX#1 (byte*) BUCKET_IDX#3 Identical Phi Values (byte*) init_buckets::screen#2 (byte*) init_buckets::screen#7 Identical Phi Values (word**) BUCKETS#6 (word**) BUCKETS#14 -Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#13 +Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#13 Identical Phi Values (word**) BUCKETS#3 (word**) BUCKETS#6 Identical Phi Values (byte*) init_buckets::screen#3 (byte*) init_buckets::screen#2 Identical Phi Values (byte*) BUCKET_IDX#2 (byte*) BUCKET_IDX#1 -Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#52 +Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#51 Identical Phi Values (byte*) init_angle_screen::screen#1 (byte*) init_angle_screen::screen#0 Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#5 Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#6 Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#6 -Identical Phi Values (byte*) heap_head#44 (byte*) heap_head#40 +Identical Phi Values (byte*) heap_head#43 (byte*) heap_head#39 Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#21 Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0 Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#21 @@ -3063,11 +3004,11 @@ Identical Phi Values (byte*) init_dist_screen::screen_topline#10 (byte*) init_di Identical Phi Values (byte*) init_dist_screen::screen_bottomline#10 (byte*) init_dist_screen::screen_bottomline#11 Identical Phi Values (byte) init_dist_screen::y#11 (byte) init_dist_screen::y#10 Identical Phi Values (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#29 -Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#59 +Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#58 Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#19 Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0 Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#10 -Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#26 +Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#12 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#19 @@ -3077,25 +3018,25 @@ Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17 Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19 Identical Phi Values (byte) main::bucket_idx#3 (byte) main::bucket_idx#6 Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#18 -Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#48 +Identical Phi Values (byte*) heap_head#48 (byte*) heap_head#47 Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#26 Identical Phi Values (word**) BUCKETS#11 (word**) BUCKETS#7 Identical Phi Values (byte*) BUCKET_SIZES#14 (byte*) BUCKET_SIZES#10 -Identical Phi Values (byte*) SCREEN_ANGLE#18 (byte*) SCREEN_ANGLE#15 +Identical Phi Values (byte*) SCREEN_ANGLE#17 (byte*) SCREEN_ANGLE#15 Identical Phi Values (word*) SQUARES#19 (word*) SQUARES#1 Identical Phi Values (byte) NUM_SQUARES#29 (byte) NUM_SQUARES#3 -Identical Phi Values (byte*) heap_head#59 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#58 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word**) BUCKETS#7 (word**) BUCKETS#0 Identical Phi Values (byte*) BUCKET_SIZES#10 (byte*) BUCKET_SIZES#0 Identical Phi Values (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#3 -Identical Phi Values (byte*) heap_head#48 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#47 (byte*) heap_head#1 Identical Phi Values (word*) SQUARES#26 (word*) SQUARES#1 Identical Phi Values (byte*) SCREEN_ANGLE#15 (byte*) SCREEN_ANGLE#0 Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#18 -Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#48 +Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#47 Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#26 -Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#1 +Identical Phi Values (byte*) heap_head#36 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bsearch16u::$5 [13] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7 Simple Condition (bool~) bsearch16u::$12 [25] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9 @@ -3111,24 +3052,24 @@ Simple Condition (bool~) atan2_16::$19 [149] if((byte) 0==(byte) atan2_16::shift Simple Condition (bool~) atan2_16::$20 [152] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$21 [169] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15 Simple Condition (bool~) atan2_16::$14 [173] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -Simple Condition (bool~) main::$3 [220] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@4 -Simple Condition (bool~) main::$6 [228] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7 -Simple Condition (bool~) main::$19 [233] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@21 -Simple Condition (bool~) main::$7 [240] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@9 -Simple Condition (bool~) main::$10 [248] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@11 -Simple Condition (bool~) main::$15 [252] if((word) main::min_offset#2==(word) $ffff) goto main::@7 -Simple Condition (bool~) main::$13 [260] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@11 -Simple Condition (bool~) init_buckets::$0 [310] if((byte) init_buckets::i#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@1 -Simple Condition (bool~) init_buckets::$2 [319] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 -Simple Condition (bool~) init_buckets::$5 [334] if((word) init_buckets::i2#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@5 -Simple Condition (bool~) init_buckets::$6 [341] if((byte) init_buckets::i3#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@7 -Simple Condition (bool~) init_buckets::$11 [357] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 -Simple Condition (bool~) init_angle_screen::$2 [372] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 -Simple Condition (bool~) init_angle_screen::$16 [409] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 -Simple Condition (bool~) init_dist_screen::$3 [425] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -Simple Condition (bool~) init_dist_screen::$10 [444] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 -Simple Condition (bool~) init_dist_screen::$12 [449] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -Simple Condition (bool~) init_dist_screen::$21 [455] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 +Simple Condition (bool~) main::$3 [241] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@4 +Simple Condition (bool~) main::$6 [249] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7 +Simple Condition (bool~) main::$19 [254] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@21 +Simple Condition (bool~) main::$7 [261] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@9 +Simple Condition (bool~) main::$10 [269] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@11 +Simple Condition (bool~) main::$15 [273] if((word) main::min_offset#2==(word) $ffff) goto main::@7 +Simple Condition (bool~) main::$13 [281] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@11 +Simple Condition (bool~) init_buckets::$0 [309] if((byte) init_buckets::i#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@1 +Simple Condition (bool~) init_buckets::$2 [318] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 +Simple Condition (bool~) init_buckets::$5 [333] if((word) init_buckets::i2#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@5 +Simple Condition (bool~) init_buckets::$6 [340] if((byte) init_buckets::i3#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@7 +Simple Condition (bool~) init_buckets::$11 [356] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 +Simple Condition (bool~) init_angle_screen::$2 [371] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 +Simple Condition (bool~) init_angle_screen::$16 [408] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 +Simple Condition (bool~) init_dist_screen::$3 [424] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 +Simple Condition (bool~) init_dist_screen::$10 [443] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 +Simple Condition (bool~) init_dist_screen::$12 [448] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 +Simple Condition (bool~) init_dist_screen::$21 [454] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [169] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement @@ -3146,13 +3087,13 @@ Constant (const word) atan2_16::angle#0 = 0 Constant (const byte) atan2_16::i#0 = 0 Constant (const word) malloc::size#1 = $3e8 Constant (const word) malloc::size#2 = $3e8 +Constant (const word) malloc::size#3 = NUM_BUCKETS*SIZEOF_BYTE +Constant (const word) malloc::size#4 = NUM_BUCKETS*SIZEOF_POINTER +Constant (const word) malloc::size#5 = NUM_BUCKETS*SIZEOF_BYTE Constant (const byte) main::bucket_idx#0 = 0 Constant (const byte) main::min_angle#0 = $ff Constant (const word) main::min_offset#0 = $ffff Constant (const byte) main::i#0 = 0 -Constant (const word) malloc::size#3 = NUM_BUCKETS*SIZEOF_BYTE -Constant (const word) malloc::size#4 = NUM_BUCKETS*SIZEOF_POINTER -Constant (const word) malloc::size#5 = NUM_BUCKETS*SIZEOF_BYTE Constant (const byte) init_buckets::i#0 = 0 Constant (const word) init_buckets::i1#0 = 0 Constant (const word) init_buckets::i2#0 = 0 @@ -3168,30 +3109,30 @@ Constant (const byte) init_dist_screen::xb#0 = $27 Successful SSA optimization Pass2ConstantIdentification Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3 Successful SSA optimization Pass2ConstantIdentification -if() condition always true - replacing block destination [217] if(true) goto main::@4 -if() condition always true - replacing block destination [274] if(true) goto main::@29 +if() condition always true - replacing block destination [238] if(true) goto main::@4 +if() condition always true - replacing block destination [295] if(true) goto main::@29 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [167] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ Resolved ranged comparison value [169] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1 -Resolved ranged next value [308] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ -Resolved ranged comparison value [310] if(init_buckets::i#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@1 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1 -Resolved ranged next value [317] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++ -Resolved ranged comparison value [319] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8 -Resolved ranged next value [332] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ -Resolved ranged comparison value [334] if(init_buckets::i2#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@5 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1 -Resolved ranged next value [339] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ -Resolved ranged comparison value [341] if(init_buckets::i3#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@7 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1 -Resolved ranged next value [355] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++ -Resolved ranged comparison value [357] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8 -Resolved ranged next value [407] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++ -Resolved ranged comparison value [409] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d -Resolved ranged next value [453] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ -Resolved ranged comparison value [455] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d -Rewriting conditional comparison [372] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 -Rewriting conditional comparison [444] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 -De-inlining pointer[w] to *(pointer+w) [323] (word) malloc::size#6 ← *((byte*) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER -De-inlining pointer[w] to *(pointer+w) [331] *((word**) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$4 -De-inlining pointer[w] to *(pointer+w) [349] (word*) init_buckets::bucket#0 ← *((word**) BUCKETS#0 + (word~) init_buckets::$13) +Resolved ranged next value [307] init_buckets::i#1 ← ++ init_buckets::i#2 to ++ +Resolved ranged comparison value [309] if(init_buckets::i#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@1 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1 +Resolved ranged next value [316] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++ +Resolved ranged comparison value [318] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8 +Resolved ranged next value [331] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++ +Resolved ranged comparison value [333] if(init_buckets::i2#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@5 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1 +Resolved ranged next value [338] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++ +Resolved ranged comparison value [340] if(init_buckets::i3#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@7 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1 +Resolved ranged next value [354] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++ +Resolved ranged comparison value [356] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8 +Resolved ranged next value [406] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++ +Resolved ranged comparison value [408] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d +Resolved ranged next value [452] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++ +Resolved ranged comparison value [454] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d +Rewriting conditional comparison [371] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 +Rewriting conditional comparison [443] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 +De-inlining pointer[w] to *(pointer+w) [322] (word) malloc::size#6 ← *((byte*) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER +De-inlining pointer[w] to *(pointer+w) [330] *((word**) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$4 +De-inlining pointer[w] to *(pointer+w) [348] (word*) init_buckets::bucket#0 ← *((word**) BUCKETS#0 + (word~) init_buckets::$13) Successful SSA optimization Pass2DeInlineWordDerefIdx Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 @@ -3268,17 +3209,17 @@ Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [25] (void*) malloc::return#10 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [90] (void*) malloc::return#11 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [94] (void*) malloc::return#12 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 -Inlining Noop Cast [132] (void*) malloc::return#13 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 -Inlining Noop Cast [136] (void*) malloc::return#14 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 -Inlining Noop Cast [140] (void*) malloc::return#15 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [98] (void*) malloc::return#13 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [102] (void*) malloc::return#14 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [106] (void*) malloc::return#15 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [156] (void*) malloc::return#16 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Successful SSA optimization Pass2NopCastInlining Inlining Noop Cast [27] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1 Inlining Noop Cast [92] (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 keeping SCREEN_DIST#0 Inlining Noop Cast [96] (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 keeping SCREEN_ANGLE#0 -Inlining Noop Cast [134] (byte*) BUCKET_SIZES#0 ← (byte*)(void*~) $2 keeping BUCKET_SIZES#0 -Inlining Noop Cast [138] (word**) BUCKETS#0 ← (word**)(void*~) $3 keeping BUCKETS#0 -Inlining Noop Cast [142] (byte*) BUCKET_IDX#0 ← (byte*)(void*~) $4 keeping BUCKET_IDX#0 +Inlining Noop Cast [100] (byte*) BUCKET_SIZES#0 ← (byte*)(void*~) $2 keeping BUCKET_SIZES#0 +Inlining Noop Cast [104] (word**) BUCKETS#0 ← (word**)(void*~) $3 keeping BUCKETS#0 +Inlining Noop Cast [108] (byte*) BUCKET_IDX#0 ← (byte*)(void*~) $4 keeping BUCKET_IDX#0 Inlining Noop Cast [189] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$5 keeping init_angle_screen::xw#0 Inlining Noop Cast [192] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$8 keeping init_angle_screen::yw#0 Successful SSA optimization Pass2NopCastInlining @@ -3289,8 +3230,8 @@ Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$3 / (co Rewriting division to use shift [60] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 Rewriting multiplication to use shift [74] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [78] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [107] (byte~) main::$23 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [115] (byte~) main::$24 ← (byte) main::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [119] (byte~) main::$23 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [127] (byte~) main::$24 ← (byte) main::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [154] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER Rewriting multiplication to use shift [158] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER Rewriting multiplication to use shift [170] (word~) init_buckets::$13 ← (word~) init_buckets::$7 * (const byte) SIZEOF_POINTER @@ -3328,11 +3269,11 @@ Inlining constant with var siblings (const byte) init_dist_screen::x#0 Inlining constant with var siblings (const byte) init_dist_screen::xb#0 Inlining constant with var siblings (const byte*) heap_head#0 Constant inlined init_buckets::i1#0 = (word) 0 -Constant inlined init_squares::sqr#0 = (byte) 0 +Constant inlined init_squares::sqr#0 = (word) 0 Constant inlined main::bucket_idx#0 = (byte) 0 Constant inlined init_angle_screen::y#0 = (byte) 0 Constant inlined init_angle_screen::x#0 = (byte) 0 -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined init_buckets::i#0 = (byte) 0 Constant inlined init_dist_screen::y#0 = (byte) 0 Constant inlined init_dist_screen::xb#0 = (byte) $27 @@ -3399,10 +3340,10 @@ Calls in [sqrt] to bsearch16u:288 Calls in [init_squares] to malloc:328 Created 54 initial phi equivalence classes -Coalesced [6] heap_head#84 ← heap_head#1 +Coalesced [6] heap_head#82 ← heap_head#1 Coalesced (already) [9] heap_head#83 ← heap_head#1 -Coalesced (already) [12] heap_head#85 ← heap_head#1 -Coalesced (already) [15] heap_head#86 ← heap_head#1 +Coalesced (already) [12] heap_head#84 ← heap_head#1 +Coalesced (already) [15] heap_head#85 ← heap_head#1 Coalesced (already) [44] main::bucket_idx#15 ← main::bucket_idx#6 Coalesced [51] main::bucket_idx#16 ← main::bucket_idx#1 Coalesced [59] main::min_offset#10 ← main::offset#0 @@ -3415,7 +3356,7 @@ Coalesced (already) [67] main::min_angle#7 ← main::min_angle#2 Not coalescing [68] main::min_offset#11 ← main::min_offset#2 Coalesced (already) [69] main::min_angle#9 ← main::min_angle#2 Not coalescing [75] init_buckets::dist#6 ← init_buckets::screen#0 -Coalesced (already) [85] heap_head#87 ← heap_head#1 +Coalesced (already) [85] heap_head#86 ← heap_head#1 Coalesced [86] malloc::size#8 ← malloc::size#6 Not coalescing [99] init_buckets::dist#8 ← init_buckets::screen#0 Coalesced [114] init_buckets::dist#9 ← init_buckets::dist#3 @@ -3489,7 +3430,7 @@ Coalesced [319] bsearch16u::num#9 ← bsearch16u::num#0 Coalesced [320] bsearch16u::items#11 ← bsearch16u::items#8 Coalesced [321] bsearch16u::num#11 ← bsearch16u::num#3 Coalesced (already) [322] bsearch16u::items#13 ← bsearch16u::items#2 -Coalesced (already) [327] heap_head#88 ← heap_head#1 +Coalesced (already) [327] heap_head#87 ← heap_head#1 Coalesced [331] init_squares::squares#4 ← init_squares::squares#0 Coalesced [341] init_squares::sqr#3 ← init_squares::sqr#1 Coalesced [342] init_squares::squares#3 ← init_squares::squares#1 @@ -3520,13 +3461,12 @@ Culled Empty Block (label) bsearch16u::@1 Culled Empty Block (label) bsearch16u::@18 Culled Empty Block (label) init_squares::@4 Renumbering block @22 to @1 -Renumbering block @23 to @2 -Renumbering block @26 to @3 -Renumbering block @27 to @4 -Renumbering block @28 to @5 -Renumbering block @29 to @6 -Renumbering block @30 to @7 -Renumbering block @31 to @8 +Renumbering block @26 to @2 +Renumbering block @27 to @3 +Renumbering block @28 to @4 +Renumbering block @29 to @5 +Renumbering block @30 to @6 +Renumbering block @31 to @7 Renumbering block bsearch16u::@2 to bsearch16u::@1 Renumbering block bsearch16u::@3 to bsearch16u::@2 Renumbering block bsearch16u::@6 to bsearch16u::@3 @@ -3581,7 +3521,6 @@ Renumbering block init_dist_screen::@22 to init_dist_screen::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 -Adding NOP phi() at start of @3 Adding NOP phi() at start of @end Adding NOP phi() at start of init_buckets Adding NOP phi() at start of init_dist_screen @@ -3595,512 +3534,509 @@ FINAL CONTROL FLOW GRAPH @1: scope:[] from @begin [1] phi() [2] call malloc - to:@4 -@4: scope:[] from @1 + to:@3 +@3: scope:[] from @1 [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [4] call malloc + to:@4 +@4: scope:[] from @3 + [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 + [6] call malloc to:@5 @5: scope:[] from @4 - [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 - to:@2 -@2: scope:[] from @5 - [6] phi() - [7] call malloc + [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 + [8] call malloc to:@6 -@6: scope:[] from @2 - [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 - [9] call malloc +@6: scope:[] from @5 + [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 + [10] call malloc to:@7 @7: scope:[] from @6 - [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 - [11] call malloc - to:@8 -@8: scope:[] from @7 - [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 - to:@3 -@3: scope:[] from @8 - [13] phi() - [14] call main + [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 + to:@2 +@2: scope:[] from @7 + [12] phi() + [13] call main to:@end -@end: scope:[] from @3 - [15] phi() +@end: scope:[] from @2 + [14] phi() (void()) main() -main: scope:[main] from @3 +main: scope:[main] from @2 asm { sei } - [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 - [18] call init_dist_screen + [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + [17] call init_dist_screen to:main::@15 main::@15: scope:[main] from main - [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 - [20] call init_angle_screen + [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 + [19] call init_angle_screen to:main::@16 main::@16: scope:[main] from main::@15 - [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 - [22] call init_buckets + [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + [21] call init_buckets to:main::@1 main::@1: scope:[main] from main::@11 main::@12 main::@16 - [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#6 main::@12/(byte) main::bucket_idx#1 main::@16/(byte) 0 ) + [22] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#6 main::@12/(byte) main::bucket_idx#1 main::@16/(byte) 0 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 - [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 + [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - [25] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) - [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 - [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) - [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) - [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 + [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) + [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 + [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) + [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) + [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 to:main::@5 main::@5: scope:[main] from main::@3 main::@8 - [30] (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#5 main::@3/(byte) $ff ) - [30] (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#8 main::@3/(word) $ffff ) - [30] (byte) main::i#2 ← phi( main::@8/(byte) main::i#1 main::@3/(byte) 0 ) - [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 + [29] (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#5 main::@3/(byte) $ff ) + [29] (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#8 main::@3/(word) $ffff ) + [29] (byte) main::i#2 ← phi( main::@8/(byte) main::i#1 main::@3/(byte) 0 ) + [30] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 to:main::@7 main::@7: scope:[main] from main::@5 - [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 + [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 to:main::@11 main::@11: scope:[main] from main::@7 - [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 - [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR - [35] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 + [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR + [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@1 main::@4: scope:[main] from main::@3 main::@7 - [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 - [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 + [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 + [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 to:main::@13 main::@13: scope:[main] from main::@4 - [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@14 main::@14: scope:[main] from main::@13 main::@14 - [39] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) + [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) to:main::@14 main::@12: scope:[main] from main::@4 - [40] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) + [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) to:main::@1 main::@6: scope:[main] from main::@5 - [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 - [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) - [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 - [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 + [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 + [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) + [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 + [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 to:main::@9 main::@9: scope:[main] from main::@6 - [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 - [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 + [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 + [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 to:main::@10 main::@10: scope:[main] from main::@9 - [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) + [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) to:main::@8 main::@8: scope:[main] from main::@10 main::@17 main::@18 - [48] (byte) main::min_angle#5 ← phi( main::@17/(byte) main::min_angle#2 main::@10/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) - [48] (word) main::min_offset#5 ← phi( main::@17/(word) main::min_offset#9 main::@10/(word) main::offset#0 main::@18/(word) main::min_offset#11 ) - [49] (byte) main::i#1 ← ++ (byte) main::i#2 - [50] (word) main::min_offset#8 ← (word) main::min_offset#5 + [47] (byte) main::min_angle#5 ← phi( main::@17/(byte) main::min_angle#2 main::@10/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 ) + [47] (word) main::min_offset#5 ← phi( main::@17/(word) main::min_offset#9 main::@10/(word) main::offset#0 main::@18/(word) main::min_offset#11 ) + [48] (byte) main::i#1 ← ++ (byte) main::i#2 + [49] (word) main::min_offset#8 ← (word) main::min_offset#5 to:main::@5 main::@17: scope:[main] from main::@9 - [51] (word) main::min_offset#9 ← (word) main::min_offset#2 + [50] (word) main::min_offset#9 ← (word) main::min_offset#2 to:main::@8 main::@18: scope:[main] from main::@6 - [52] (word) main::min_offset#11 ← (word) main::min_offset#2 + [51] (word) main::min_offset#11 ← (word) main::min_offset#2 to:main::@8 (void()) init_buckets((byte*) init_buckets::screen) init_buckets: scope:[init_buckets] from main::@16 - [53] phi() + [52] phi() to:init_buckets::@1 init_buckets::@1: scope:[init_buckets] from init_buckets init_buckets::@1 - [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) - [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 - [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 - [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 + [53] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 ) + [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 + [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 + [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 to:init_buckets::@2 init_buckets::@2: scope:[init_buckets] from init_buckets::@1 - [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 + [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 to:init_buckets::@3 init_buckets::@3: scope:[init_buckets] from init_buckets::@2 init_buckets::@3 - [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 ) - [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 ) - [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) - [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 - [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 - [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 + [58] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 ) + [58] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 ) + [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) + [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 + [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 + [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 to:init_buckets::@4 init_buckets::@4: scope:[init_buckets] from init_buckets::@3 init_buckets::@8 - [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 ) - [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 - [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 - [67] call malloc + [63] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 ) + [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 + [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 + [66] call malloc to:init_buckets::@8 init_buckets::@8: scope:[init_buckets] from init_buckets::@4 - [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 - [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 - [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 - [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 - [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 - [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 + [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 + [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 + [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 + [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 + [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 + [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 to:init_buckets::@5 init_buckets::@5: scope:[init_buckets] from init_buckets::@5 init_buckets::@8 - [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 ) - [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 - [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 - [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 + [73] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 ) + [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 + [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 + [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 to:init_buckets::@6 init_buckets::@6: scope:[init_buckets] from init_buckets::@5 - [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 + [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 to:init_buckets::@7 init_buckets::@7: scope:[init_buckets] from init_buckets::@6 init_buckets::@7 - [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 ) - [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 ) - [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) - [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 - [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 - [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 - [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) - [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 - [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 - [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 - [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) - [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 - [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 - [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 + [78] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 ) + [78] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 ) + [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) + [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 + [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 + [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 + [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) + [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 + [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 + [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 + [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) + [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 + [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 + [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 to:init_buckets::@return init_buckets::@return: scope:[init_buckets] from init_buckets::@7 - [92] return + [91] return to:@return (void*()) malloc((word) malloc::size) -malloc: scope:[malloc] from @1 @2 @4 @6 @7 init_buckets::@4 init_squares - [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) - [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) - [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 - [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 +malloc: scope:[malloc] from @1 @3 @4 @5 @6 init_buckets::@4 init_squares + [92] (word) malloc::size#7 ← phi( @1/(word) $3e8 @3/(word) $3e8 @4/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE @5/(const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER @6/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) + [92] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 @4/(byte*) heap_head#1 @5/(byte*) heap_head#1 @6/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) + [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 + [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc - [96] return + [95] return to:@return (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main::@15 - [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c - [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c + [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 - [99] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) - [99] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) - [99] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) + [98] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) + [98] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) + [98] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 - [100] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) - [100] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) - [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 + [99] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) + [99] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) + [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 - [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 - [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 - [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 - [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 + [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 + [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 + [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 + [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 - [106] return + [105] return to:@return init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 - [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 - [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 - [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 - [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 - [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 - [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - [114] call atan2_16 - [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 + [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 + [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 + [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 + [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 + [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + [113] call atan2_16 + [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 - [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 - [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 - [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 - [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 - [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 - [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 - [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 - [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 - [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 - [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 - [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 + [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 + [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 + [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 + [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 + [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 + [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 + [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 + [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 + [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 + [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 + [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 to:init_angle_screen::@2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from init_angle_screen::@3 - [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 + [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 - [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 + [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 - [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) - [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 + [129] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) + [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 - [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 + [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 - [133] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) + [132] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) - [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) - [134] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) - [134] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) - [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 + [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) + [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) + [133] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) + [133] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) + [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 - [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) - [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 - [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 + [135] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) + [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 + [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 - [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 + [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 - [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) - [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 + [139] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) + [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 - [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 + [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 - [143] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) + [142] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 - [144] return + [143] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 - [145] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 - [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 - [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 + [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 + [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 + [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 - [148] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) - [148] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) - [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) - [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 + [147] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) + [147] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) + [147] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) + [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 - [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 + [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 - [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 - [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 + [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 + [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 - [153] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) - [153] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) - [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 + [152] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) + [152] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) + [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 - [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 - [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 - [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 - [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) + [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 + [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 + [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 + [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 - [159] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) - [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) - [159] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) - [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 - [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 + [158] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) + [158] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) + [158] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) + [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 + [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 - [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 - [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 - [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 - [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) + [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 + [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 + [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 + [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 - [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 - [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 - [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 + [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 + [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 + [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 - [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 + [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 - [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 + [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void()) init_dist_screen((byte*) init_dist_screen::screen) init_dist_screen: scope:[init_dist_screen] from main - [171] phi() - [172] call init_squares + [170] phi() + [171] call init_squares to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen - [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 + [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7 - [174] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) - [174] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) - [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) - [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 - [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 + [173] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) + [173] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) + [173] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) + [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 + [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 - [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 + [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 - [178] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) - [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - [180] call sqr - [181] (word) sqr::return#2 ← (word) sqr::return#0 + [177] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) + [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + [179] call sqr + [180] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 - [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 - [183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) - [183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) - [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 + [182] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) + [182] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) + [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 - [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 - [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 - [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 - [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 + [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 + [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 + [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 + [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 to:init_dist_screen::@return init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 - [189] return + [188] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 - [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 - [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 + [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 + [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 - [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 + [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 - [193] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) - [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - [195] call sqr - [196] (word) sqr::return#3 ← (word) sqr::return#0 + [192] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) + [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + [194] call sqr + [195] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 - [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 - [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - [200] call sqrt - [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 + [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + [199] call sqrt + [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 - [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 - [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 - [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 - [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 + [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 + [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 + [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 + [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 to:init_dist_screen::@5 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 - [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 + [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 - [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 + [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 (byte()) sqrt((word) sqrt::val) sqrt: scope:[sqrt] from init_dist_screen::@13 - [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 - [213] call bsearch16u - [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 + [212] call bsearch16u + [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt - [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 - [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 - [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 + [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 + [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 + [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 - [219] return + [218] return to:@return (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) bsearch16u: scope:[bsearch16u] from sqrt - [220] phi() + [219] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 - [221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) - [221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) - [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 + [220] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) + [220] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) + [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 - [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 + [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 - [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD + [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 - [225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) + [224] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 - [226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) - [227] return + [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) + [226] return to:@return bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 - [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 - [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 - [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 - [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) - [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 + [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 + [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 + [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 + [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) + [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@8 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 - [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 + [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 - [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 + [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 to:bsearch16u::@9 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 - [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD - [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 + [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD + [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 to:bsearch16u::@7 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 - [237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) - [237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) - [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 + [236] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) + [236] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) + [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 (word()) sqr((byte) sqr::val) sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 - [239] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) - [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 - [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) + [238] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) + [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 + [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr - [242] return + [241] return to:@return (void()) init_squares() init_squares: scope:[init_squares] from init_dist_screen - [243] phi() - [244] call malloc + [242] phi() + [243] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares - [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 + [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 - [247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) - [247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) - [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 - [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD - [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 - [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 - [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 - [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 - [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 + [246] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) + [246] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) + [246] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(word) 0 ) + [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 + [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD + [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 + [250] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 + [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 + [252] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 + [253] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 - [255] return + [254] return to:@return null depth in calling loop Loop head: init_buckets::@4 tails: init_buckets::@8 blocks: init_buckets::@8 init_buckets::@4 in scope malloc @@ -4114,9 +4050,9 @@ VARIABLE REGISTER WEIGHTS (void*) BUCKET_SIZES#0 0.024691358024691357 (byte) NUM_SQUARES (byte*) SCREEN_ANGLE -(void*) SCREEN_ANGLE#0 0.045454545454545456 +(void*) SCREEN_ANGLE#0 0.046511627906976744 (byte*) SCREEN_DIST -(void*) SCREEN_DIST#0 0.125 +(void*) SCREEN_DIST#0 0.13333333333333333 (word*) SQUARES (void*) SQUARES#1 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) @@ -4200,7 +4136,7 @@ VARIABLE REGISTER WEIGHTS (word*) bsearch16u::return#3 4.0 (word*) bsearch16u::return#6 4.0 (byte*) heap_head -(byte*) heap_head#1 0.2446808510638298 +(byte*) heap_head#1 0.24731182795698928 (byte*) heap_head#18 23.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$11 202.0 @@ -4758,113 +4694,108 @@ __b1_from___bbegin: // @1 __b1: // [2] call malloc - // [93] phi from @1 to malloc [phi:@1->malloc] + // [92] phi from @1 to malloc [phi:@1->malloc] malloc_from___b1: - // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 + // [92] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP sta.z heap_head+1 jsr malloc - jmp __b4 - // @4 -__b4: + jmp __b3 + // @3 +__b3: // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SCREEN_DIST lda.z malloc.mem+1 sta.z SCREEN_DIST+1 // [4] call malloc - // [93] phi from @4 to malloc [phi:@4->malloc] -malloc_from___b4: - // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 + // [92] phi from @3 to malloc [phi:@3->malloc] +malloc_from___b3: + // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc - jmp __b5 - // @5 -__b5: + jmp __b4 + // @4 +__b4: // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SCREEN_ANGLE lda.z malloc.mem+1 sta.z SCREEN_ANGLE+1 - // [6] phi from @5 to @2 [phi:@5->@2] -__b2_from___b5: - jmp __b2 - // @2 -__b2: - // [7] call malloc - // [93] phi from @2 to malloc [phi:@2->malloc] -malloc_from___b2: - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 + // [6] call malloc + // [92] phi from @4 to malloc [phi:@4->malloc] +malloc_from___b4: + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@4->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_BYTE sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy jsr malloc - jmp __b6 - // @6 -__b6: - // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp __b5 + // @5 +__b5: + // [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKET_SIZES lda.z malloc.mem+1 sta.z BUCKET_SIZES+1 - // [9] call malloc - // [93] phi from @6 to malloc [phi:@6->malloc] -malloc_from___b6: - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 + // [8] call malloc + // [92] phi from @5 to malloc [phi:@5->malloc] +malloc_from___b5: + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@5->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_POINTER sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@5->malloc#1] -- register_copy jsr malloc - jmp __b7 - // @7 -__b7: - // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp __b6 + // @6 +__b6: + // [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKETS lda.z malloc.mem+1 sta.z BUCKETS+1 - // [11] call malloc - // [93] phi from @7 to malloc [phi:@7->malloc] -malloc_from___b7: - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 + // [10] call malloc + // [92] phi from @6 to malloc [phi:@6->malloc] +malloc_from___b6: + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@6->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_BYTE sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy jsr malloc - jmp __b8 - // @8 -__b8: - // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp __b7 + // @7 +__b7: + // [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKET_IDX lda.z malloc.mem+1 sta.z BUCKET_IDX+1 - // [13] phi from @8 to @3 [phi:@8->@3] -__b3_from___b8: - jmp __b3 - // @3 -__b3: - // [14] call main + // [12] phi from @7 to @2 [phi:@7->@2] +__b2_from___b7: + jmp __b2 + // @2 +__b2: + // [13] call main jsr main - // [15] phi from @3 to @end [phi:@3->@end] -__bend_from___b3: + // [14] phi from @2 to @end [phi:@2->@end] +__bend_from___b2: jmp __bend // @end __bend: @@ -4887,40 +4818,40 @@ main: { .label min_offset_1 = 7 // asm { sei } sei - // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z init_dist_screen.screen lda.z SCREEN_DIST+1 sta.z init_dist_screen.screen+1 - // [18] call init_dist_screen - // [171] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [17] call init_dist_screen + // [170] phi from main to init_dist_screen [phi:main->init_dist_screen] init_dist_screen_from_main: jsr init_dist_screen jmp __b15 // main::@15 __b15: - // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 + // [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 lda.z SCREEN_ANGLE sta.z init_angle_screen.screen lda.z SCREEN_ANGLE+1 sta.z init_angle_screen.screen+1 - // [20] call init_angle_screen + // [19] call init_angle_screen jsr init_angle_screen jmp __b16 // main::@16 __b16: - // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z init_buckets.screen lda.z SCREEN_DIST+1 sta.z init_buckets.screen+1 - // [22] call init_buckets - // [53] phi from main::@16 to init_buckets [phi:main::@16->init_buckets] + // [21] call init_buckets + // [52] phi from main::@16 to init_buckets [phi:main::@16->init_buckets] init_buckets_from___b16: jsr init_buckets - // [23] phi from main::@16 to main::@1 [phi:main::@16->main::@1] + // [22] phi from main::@16 to main::@1 [phi:main::@16->main::@1] __b1_from___b16: - // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 + // [22] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bucket_idx jmp __b1 @@ -4929,58 +4860,58 @@ main: { jmp __b2 // main::@2 __b2: - // [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne __b2 jmp __b3 // main::@3 __b3: - // [25] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + // [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z bucket_idx asl sta.z __23 - // [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuz3 + // [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuz3 ldy.z __23 lda (BUCKETS),y sta.z bucket iny lda (BUCKETS),y sta.z bucket+1 - // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 + // [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z bucket_idx lda (BUCKET_SIZES),y sta.z bucket_size - // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 + // [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 lda.z bucket_size cmp #0 beq __b4 - // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [29] phi from main::@3 to main::@5 [phi:main::@3->main::@5] __b5_from___b3: - // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 + // [29] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z min_angle - // [30] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 + // [29] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 lda #<$ffff sta.z min_offset lda #>$ffff sta.z min_offset+1 - // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 + // [29] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b5 // main::@5 __b5: - // [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuz1_lt_vbuz2_then_la1 + // [30] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuz1_lt_vbuz2_then_la1 lda.z i cmp.z bucket_size bcc __b6 jmp __b7 // main::@7 __b7: - // [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 + // [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 lda.z min_offset cmp #<$ffff bne !+ @@ -4991,7 +4922,7 @@ main: { jmp __b11 // main::@11 __b11: - // [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 + // [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 lda.z min_offset clc adc #SCREEN_FILL sta.z fill1+1 - // [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 + // [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 lda #FILL_CHAR ldy #0 sta (fill1),y - // [35] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1] + // [22] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1] __b1_from___b11: __b1_from___b12: - // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy + // [22] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy jmp __b1 // main::@4 __b4: - // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 + // [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 inc.z bucket_idx - // [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS cmp.z bucket_idx bne __b12 jmp __b13 // main::@13 __b13: - // [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp __b14 // main::@14 __b14: - // [39] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp __b14 // main::@12 __b12: - // [40] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp __b1_from___b12 // main::@6 __b6: - // [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __24 - // [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuz3 + // [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuz3 ldy.z __24 lda (bucket),y sta.z offset iny lda (bucket),y sta.z offset+1 - // [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #SCREEN_FILL sta.z fill+1 - // [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 + // [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 lda #FILL_CHAR ldy #0 cmp (fill),y @@ -5063,7 +4994,7 @@ main: { jmp __b9 // main::@9 __b9: - // [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 + // [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 lda.z SCREEN_ANGLE clc adc.z offset @@ -5071,7 +5002,7 @@ main: { lda.z SCREEN_ANGLE+1 adc.z offset+1 sta.z angle+1 - // [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 + // [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 ldy #0 lda (angle),y cmp.z min_angle @@ -5081,35 +5012,35 @@ main: { jmp __b10 // main::@10 __b10: - // [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 + // [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (angle),y sta.z min_angle - // [48] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8] + // [47] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8] __b8_from___b10: __b8_from___b17: __b8_from___b18: - // [48] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy - // [48] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy + // [47] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy + // [47] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy jmp __b8 // main::@8 __b8: - // [49] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + // [48] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [50] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [49] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda.z min_offset_1 sta.z min_offset lda.z min_offset_1+1 sta.z min_offset+1 - // [30] phi from main::@8 to main::@5 [phi:main::@8->main::@5] + // [29] phi from main::@8 to main::@5 [phi:main::@8->main::@5] __b5_from___b8: - // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy - // [30] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy - // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy + // [29] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy + // [29] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy + // [29] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy jmp __b5 // main::@17 __b17: - // [51] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [50] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda.z min_offset sta.z min_offset_1 lda.z min_offset+1 @@ -5117,7 +5048,7 @@ main: { jmp __b8_from___b17 // main::@18 __b18: - // [52] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [51] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda.z min_offset sta.z min_offset_1 lda.z min_offset+1 @@ -5147,54 +5078,54 @@ init_buckets: { .label __15 = $59 .label __16 = $5f .label __17 = $66 - // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + // [53] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] __b1_from_init_buckets: - // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 + // [53] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 // Init bucket sizes to 0 - // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [53] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] __b1_from___b1: - // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [53] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy jmp __b1 // init_buckets::@1 __b1: - // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z i sta (BUCKET_SIZES),y - // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 + // [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 + // [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS-1+1 cmp.z i bne __b1_from___b1 jmp __b2 // init_buckets::@2 __b2: - // [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + // [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 lda.z screen sta.z dist lda.z screen+1 sta.z dist+1 - // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [58] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] __b3_from___b2: - // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + // [58] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 lda #<0 sta.z i1 lda #>0 sta.z i1+1 - // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy + // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy jmp __b3 - // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] + // [58] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] __b3_from___b3: - // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy - // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy + // [58] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy + // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy jmp __b3 // init_buckets::@3 __b3: - // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) + // [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) ldy #0 lda (dist),y tay @@ -5202,39 +5133,39 @@ init_buckets: { clc adc #1 sta (BUCKET_SIZES),y - // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc.z dist bne !+ inc.z dist+1 !: - // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc.z i1 bne !+ inc.z i1+1 !: - // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + // [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 lda.z i1+1 cmp #>$3e8 bne __b3_from___b3 lda.z i1 cmp #<$3e8 bne __b3_from___b3 - // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] + // [63] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] __b4_from___b3: - // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 + // [63] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 lda #<0 sta.z i2 lda #>0 sta.z i2+1 jmp __b4 // Allocate the buckets - // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] + // [63] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] __b4_from___b8: - // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy + // [63] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy jmp __b4 // init_buckets::@4 __b4: - // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 + // [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z BUCKET_SIZES clc adc.z i2 @@ -5242,7 +5173,7 @@ init_buckets: { lda.z BUCKET_SIZES+1 adc.z i2+1 sta.z __15+1 - // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 + // [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 ldy #0 lda.z __15 asl @@ -5250,28 +5181,28 @@ init_buckets: { lda #0 rol sta.z malloc.size+1 - // [67] call malloc - // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] + // [66] call malloc + // [92] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] malloc_from___b4: - // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy + // [92] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy jsr malloc jmp __b8 // init_buckets::@8 __b8: - // [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z __4 lda.z malloc.mem+1 sta.z __4+1 - // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda.z i2 asl sta.z __12 lda.z i2+1 rol sta.z __12+1 - // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz3 + // [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz3 lda.z BUCKETS clc adc.z __12 @@ -5279,89 +5210,89 @@ init_buckets: { lda.z BUCKETS+1 adc.z __12+1 sta.z __16+1 - // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 + // [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 ldy #0 lda.z __4 sta (__16),y iny lda.z __4+1 sta (__16),y - // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + // [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc.z i2 bne !+ inc.z i2+1 !: - // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 + // [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 lda.z i2+1 cmp #>NUM_BUCKETS-1+1 bne __b4_from___b8 lda.z i2 cmp #init_buckets::@5] + // [73] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5] __b5_from___b8: - // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuz1=vbuc1 + // [73] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuz1=vbuc1 lda #0 sta.z i3 jmp __b5 // Iterate all distances and fill the buckets with indices into the screens - // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [73] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] __b5_from___b5: - // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + // [73] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy jmp __b5 // init_buckets::@5 __b5: - // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 + // [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 lda #0 ldy.z i3 sta (BUCKET_IDX),y - // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 + // [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 inc.z i3 - // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuz1_neq_vbuc1_then_la1 + // [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS-1+1 cmp.z i3 bne __b5_from___b5 jmp __b6 // init_buckets::@6 __b6: - // [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + // [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 lda.z screen sta.z dist_1 lda.z screen+1 sta.z dist_1+1 - // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] + // [78] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] __b7_from___b6: - // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 + // [78] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 lda #<0 sta.z i4 lda #>0 sta.z i4+1 - // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy + // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy jmp __b7 - // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] + // [78] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] __b7_from___b7: - // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy - // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy + // [78] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy + // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy jmp __b7 // init_buckets::@7 __b7: - // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 + // [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_1),y sta.z distance - // [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 + // [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 lda.z distance sta.z __7 lda #0 sta.z __7+1 - // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda.z __7 asl sta.z __13 lda.z __7+1 rol sta.z __13+1 - // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz3 + // [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz3 lda.z BUCKETS clc adc.z __13 @@ -5369,14 +5300,14 @@ init_buckets: { lda.z BUCKETS+1 adc.z __13+1 sta.z __17+1 - // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 + // [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 ldy #0 lda (__17),y sta.z bucket iny lda (__17),y sta.z bucket+1 - // [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 + // [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 lda.z dist_1 sec sbc.z screen @@ -5384,35 +5315,35 @@ init_buckets: { lda.z dist_1+1 sbc.z screen+1 sta.z __8+1 - // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 + // [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 ldy.z distance lda (BUCKET_IDX),y asl sta.z __14 - // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuz2=vwuz3 + // [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuz2=vwuz3 ldy.z __14 lda.z __8 sta (bucket),y iny lda.z __8+1 sta (bucket),y - // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 + // [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 ldy.z distance lda (BUCKET_IDX),y clc adc #1 sta (BUCKET_IDX),y - // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc.z dist_1 bne !+ inc.z dist_1+1 !: - // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc.z i4 bne !+ inc.z i4+1 !: - // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 + // [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 lda.z i4+1 cmp #>$3e8 bne __b7_from___b7 @@ -5422,7 +5353,7 @@ init_buckets: { jmp __breturn // init_buckets::@return __breturn: - // [92] return + // [91] return rts } // malloc @@ -5432,7 +5363,7 @@ init_buckets: { malloc: { .label mem = $6d .label size = $17 - // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz3 + // [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz3 lda.z heap_head sec sbc.z size @@ -5440,7 +5371,7 @@ malloc: { lda.z heap_head+1 sbc.z size+1 sta.z mem+1 - // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 @@ -5448,7 +5379,7 @@ malloc: { jmp __breturn // malloc::@return __breturn: - // [96] return + // [95] return rts } // init_angle_screen @@ -5473,7 +5404,7 @@ init_angle_screen: { .label x = $1e .label xb = $1f .label y = $19 - // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -5481,7 +5412,7 @@ init_angle_screen: { lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 - // [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -5489,41 +5420,41 @@ init_angle_screen: { lda.z screen+1 adc #>$28*$c sta.z screen_bottomline+1 - // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] __b1_from_init_angle_screen: - // [99] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [99] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [99] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [99] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] __b1_from___b4: - // [99] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [99] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [99] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy jmp __b1 // init_angle_screen::@1 __b1: - // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] __b2_from___b1: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b2 // init_angle_screen::@2 __b2: - // [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b3 jmp __b4 // init_angle_screen::@4 __b4: - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 @@ -5531,7 +5462,7 @@ init_angle_screen: { lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_bottomline @@ -5539,55 +5470,55 @@ init_angle_screen: { bcc !+ inc.z screen_bottomline+1 !: - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1_from___b4 jmp __breturn // init_angle_screen::@return __breturn: - // [106] return + // [105] return rts // init_angle_screen::@3 __b3: - // [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z x asl sta.z __3 - // [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 + // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc.z __3 sta.z __4 - // [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z __4 ldy #0 sta.z xw+1 sty.z xw - // [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z y asl sta.z __7 - // [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 + // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z __7 ldy #0 sta.z yw+1 sty.z yw - // [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 + // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2 lda.z xw sta.z atan2_16.x lda.z xw+1 sta.z atan2_16.x+1 - // [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 + // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2 lda.z yw sta.z atan2_16.y lda.z yw+1 sta.z atan2_16.y+1 - // [114] call atan2_16 + // [113] call atan2_16 jsr atan2_16 - // [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 + // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 lda.z atan2_16.return sta.z atan2_16.return_1 lda.z atan2_16.return+1 @@ -5595,12 +5526,12 @@ init_angle_screen: { jmp __b5 // init_angle_screen::@5 __b5: - // [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 + // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 lda.z atan2_16.return_1 sta.z angle_w lda.z atan2_16.return_1+1 sta.z angle_w+1 - // [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 + // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc.z angle_w @@ -5608,48 +5539,48 @@ init_angle_screen: { lda #0 adc.z angle_w+1 sta.z __11+1 - // [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w - // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z ang_w ldy.z xb sta (screen_bottomline),y - // [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 + // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda.z ang_w eor #$ff clc adc #1 sta.z __13 - // [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 + // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __13 ldy.z xb sta (screen_topline),y - // [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 + // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax.z ang_w axs #-[$80] stx.z __14 - // [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 + // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __14 ldy.z x sta (screen_topline),y - // [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 + // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc.z ang_w sta.z __15 - // [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 + // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __15 ldy.z x sta (screen_bottomline),y - // [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [100] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] + // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] __b2_from___b5: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy + // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy + // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp __b2 } // atan2_16 @@ -5674,13 +5605,13 @@ atan2_16: { .label x = $76 .label y = $78 .label return_1 = $7a - // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b1 jmp __b2 // atan2_16::@2 __b2: - // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y @@ -5688,20 +5619,20 @@ atan2_16: { lda #0 sbc.z y+1 sta.z __2+1 - // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] __b3_from___b1: __b3_from___b2: - // [130] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [129] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp __b3 // atan2_16::@3 __b3: - // [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b4 jmp __b5 // atan2_16::@5 __b5: - // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x @@ -5709,54 +5640,54 @@ atan2_16: { lda #0 sbc.z x+1 sta.z __7+1 - // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] __b6_from___b4: __b6_from___b5: - // [133] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [132] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp __b6 // atan2_16::@6 __b6: - // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 sta.z angle_1+1 - // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 + // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@10 __b10: - // [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 - // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] __b12_from___b10: __b12_from___b19: - // [136] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [135] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp __b12 // atan2_16::@12 __b12: - // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda.z angle_1+1 lsr sta.z angle+1 lda.z angle_1 ror sta.z angle - // [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7_from___b12 jmp __b21 // atan2_16::@21 __b21: - // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle @@ -5764,20 +5695,20 @@ atan2_16: { lda #>$8000 sbc.z angle+1 sta.z angle+1 - // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] __b7_from___b12: __b7_from___b21: - // [140] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [139] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp __b7 // atan2_16::@7 __b7: - // [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8_from___b7 jmp __b9 // atan2_16::@9 __b9: - // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle @@ -5785,81 +5716,81 @@ atan2_16: { lda #0 sbc.z angle+1 sta.z angle+1 - // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] __b8_from___b7: __b8_from___b9: - // [143] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [142] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp __b8 // atan2_16::@8 __b8: jmp __breturn // atan2_16::@return __breturn: - // [144] return + // [143] return rts // atan2_16::@11 __b11: - // [145] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 + // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda.z i sta.z shift - // [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 - // [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 - // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] __b13_from___b11: __b13_from___b14: - // [148] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [148] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [148] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [147] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [147] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [147] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp __b13 // atan2_16::@13 __b13: - // [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 + // [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1 lda.z shift cmp #2 bcs __b14 jmp __b15 // atan2_16::@15 __b15: - // [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 + // [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z shift beq __b17_from___b15 jmp __b16 // atan2_16::@16 __b16: - // [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd - // [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd - // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] __b17_from___b15: __b17_from___b16: - // [153] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [153] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [152] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [152] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp __b17 // atan2_16::@17 __b17: - // [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 jmp __b20 // atan2_16::@20 __b20: - // [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd @@ -5867,7 +5798,7 @@ atan2_16: { lda.z xi+1 sbc.z yd+1 sta.z xi+1 - // [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd @@ -5875,11 +5806,11 @@ atan2_16: { lda.z yi+1 adc.z xd+1 sta.z yi+1 - // [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __23 - // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 + // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 ldy.z __23 sec lda.z angle_1 @@ -5888,31 +5819,31 @@ atan2_16: { lda.z angle_1+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle_1+1 - // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] __b19_from___b18: __b19_from___b20: - // [159] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [159] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [158] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [158] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp __b19 // atan2_16::@19 __b19: - // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 + // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 + // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 lda #CORDIC_ITERATIONS_16-1+1 cmp.z i beq __b12_from___b19 - // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: - // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: - // [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd @@ -5920,7 +5851,7 @@ atan2_16: { lda.z xi+1 adc.z yd+1 sta.z xi+1 - // [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd @@ -5928,11 +5859,11 @@ atan2_16: { lda.z yi+1 sbc.z xd+1 sta.z yi+1 - // [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __22 - // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 + // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 ldy.z __22 clc lda.z angle_1 @@ -5944,7 +5875,7 @@ atan2_16: { jmp __b19_from___b18 // atan2_16::@14 __b14: - // [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 @@ -5953,7 +5884,7 @@ atan2_16: { cmp #$80 ror.z xd+1 ror.z xd - // [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 @@ -5962,13 +5893,13 @@ atan2_16: { cmp #$80 ror.z yd+1 ror.z yd - // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 + // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2 dec.z shift dec.z shift jmp __b13_from___b14 // atan2_16::@4 __b4: - // [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 @@ -5976,7 +5907,7 @@ atan2_16: { jmp __b6_from___b4 // atan2_16::@1 __b1: - // [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 @@ -6007,14 +5938,14 @@ init_dist_screen: { .label d = $95 .label x = $34 .label xb = $35 - // [172] call init_squares - // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [171] call init_squares + // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp __b11 // init_dist_screen::@11 __b11: - // [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 + // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$18 @@ -6022,54 +5953,54 @@ init_dist_screen: { lda.z screen+1 adc #>$28*$18 sta.z screen_bottomline+1 - // [174] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] + // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] __b1_from___b11: - // [174] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy - // [174] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy - // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy + // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [174] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] + // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] __b1_from___b7: - // [174] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy - // [174] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy - // [174] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy + // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy jmp __b1 // init_dist_screen::@1 __b1: - // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z y asl sta.z y2 - // [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 + // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1 lda.z y2 cmp #$18 bcs __b2 jmp __b3 // init_dist_screen::@3 __b3: - // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$18 sec sbc.z y2 sta.z __5 - // [178] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] __b4_from___b2: __b4_from___b3: - // [178] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy jmp __b4 // init_dist_screen::@4 __b4: - // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 + // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 lda.z yd sta.z sqr.val - // [180] call sqr - // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [179] call sqr + // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from___b4: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda.z sqr.return sta.z sqr.return_1 lda.z sqr.return+1 @@ -6077,30 +6008,30 @@ init_dist_screen: { jmp __b12 // init_dist_screen::@12 __b12: - // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 + // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 lda.z sqr.return_1 sta.z yds lda.z sqr.return_1+1 sta.z yds+1 - // [183] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] + // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] __b5_from___b12: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b5 // init_dist_screen::@5 __b5: - // [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b6 jmp __b7 // init_dist_screen::@7 __b7: - // [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_topline @@ -6108,7 +6039,7 @@ init_dist_screen: { bcc !+ inc.z screen_topline+1 !: - // [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_bottomline sec sbc #<$28 @@ -6116,51 +6047,51 @@ init_dist_screen: { lda.z screen_bottomline+1 sbc #>$28 sta.z screen_bottomline+1 - // [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc.z y - // [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1_from___b7 jmp __breturn // init_dist_screen::@return __breturn: - // [189] return + // [188] return rts // init_dist_screen::@6 __b6: - // [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z x asl sta.z x2 - // [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 + // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1 lda.z x2 cmp #$27 bcs __b8 jmp __b9 // init_dist_screen::@9 __b9: - // [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 + // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$27 sec sbc.z x2 sta.z __14 - // [193] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] __b10_from___b8: __b10_from___b9: - // [193] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp __b10 // init_dist_screen::@10 __b10: - // [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 + // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda.z xd sta.z sqr.val - // [195] call sqr - // [239] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [194] call sqr + // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from___b10: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [196] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [195] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda.z sqr.return sta.z sqr.return_2 lda.z sqr.return+1 @@ -6168,12 +6099,12 @@ init_dist_screen: { jmp __b13 // init_dist_screen::@13 __b13: - // [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 + // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 lda.z sqr.return_2 sta.z xds lda.z sqr.return_2+1 sta.z xds+1 - // [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 + // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z xds clc adc.z yds @@ -6181,57 +6112,57 @@ init_dist_screen: { lda.z xds+1 adc.z yds+1 sta.z ds+1 - // [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 + // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2 lda.z ds sta.z sqrt.val lda.z ds+1 sta.z sqrt.val+1 - // [200] call sqrt + // [199] call sqrt jsr sqrt - // [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 + // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 lda.z sqrt.return sta.z sqrt.return_1 jmp __b14 // init_dist_screen::@14 __b14: - // [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 + // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda.z sqrt.return_1 sta.z d - // [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z d ldy.z x sta (screen_topline),y - // [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z d ldy.z x sta (screen_bottomline),y - // [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z d ldy.z xb sta (screen_topline),y - // [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z d ldy.z xb sta (screen_bottomline),y - // [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [183] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] + // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] __b5_from___b14: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy + // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy + // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp __b5 // init_dist_screen::@8 __b8: - // [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 + // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1 lax.z x2 axs #$27 stx.z __16 jmp __b10_from___b8 // init_dist_screen::@2 __b2: - // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 + // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1 lax.z y2 axs #$18 stx.z __7 @@ -6249,21 +6180,21 @@ sqrt: { .label return = $a0 .label val = $92 .label return_1 = $94 - // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 + // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2 lda.z val sta.z bsearch16u.key lda.z val+1 sta.z bsearch16u.key+1 - // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z bsearch16u.items lda.z SQUARES+1 sta.z bsearch16u.items+1 - // [213] call bsearch16u - // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [212] call bsearch16u + // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 + // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 lda.z bsearch16u.return sta.z bsearch16u.return_1 lda.z bsearch16u.return+1 @@ -6271,12 +6202,12 @@ sqrt: { jmp __b1 // sqrt::@1 __b1: - // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 + // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 lda.z bsearch16u.return_1 sta.z found lda.z bsearch16u.return_1+1 sta.z found+1 - // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 + // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 lda.z found sec sbc.z SQUARES @@ -6284,20 +6215,20 @@ sqrt: { lda.z found+1 sbc.z SQUARES+1 sta.z __3+1 - // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 + // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda.z __3+1 lsr sta.z __1+1 lda.z __3 ror sta.z __1 - // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 + // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 lda.z __1 sta.z return jmp __breturn // sqrt::@return __breturn: - // [219] return + // [218] return rts } // bsearch16u @@ -6318,22 +6249,22 @@ bsearch16u: { .label items = $37 .label key = $96 .label return_1 = $98 - // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] __b3_from_bsearch16u: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 + // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta.z num jmp __b3 // bsearch16u::@3 __b3: - // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 + // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 lda.z num bne __b4 jmp __b5 // bsearch16u::@5 __b5: - // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp.z key+1 @@ -6347,7 +6278,7 @@ bsearch16u: { jmp __b1 // bsearch16u::@1 __b1: - // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda.z __2 sec sbc #<1*SIZEOF_WORD @@ -6355,33 +6286,33 @@ bsearch16u: { lda.z __2+1 sbc #>1*SIZEOF_WORD sta.z __2+1 - // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] __b2_from___b1: __b2_from___b5: - // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp __b2 // bsearch16u::@2 __b2: - // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] __breturn_from___b2: __breturn_from___b8: - // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp __breturn // bsearch16u::@return __breturn: - // [227] return + // [226] return rts // bsearch16u::@4 __b4: - // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 + // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 lda.z num lsr sta.z __6 - // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __6 asl sta.z __16 - // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 + // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 lda.z __16 clc adc.z items @@ -6389,7 +6320,7 @@ bsearch16u: { lda #0 adc.z items+1 sta.z pivot+1 - // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda.z key ldy #0 @@ -6399,7 +6330,7 @@ bsearch16u: { iny sbc (pivot),y sta.z result+1 - // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 lda.z result+1 bne __b6 lda.z result @@ -6407,7 +6338,7 @@ bsearch16u: { jmp __b8 // bsearch16u::@8 __b8: - // [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda.z pivot sta.z return lda.z pivot+1 @@ -6415,7 +6346,7 @@ bsearch16u: { jmp __breturn_from___b8 // bsearch16u::@6 __b6: - // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda.z result+1 bmi __b7_from___b6 bne !+ @@ -6425,7 +6356,7 @@ bsearch16u: { jmp __b9 // bsearch16u::@9 __b9: - // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 lda #1*SIZEOF_WORD clc adc.z pivot @@ -6433,22 +6364,22 @@ bsearch16u: { lda #0 adc.z pivot+1 sta.z items+1 - // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 + // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 dec.z num - // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] __b7_from___b6: __b7_from___b9: - // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp __b7 // bsearch16u::@7 __b7: - // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z num - // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] __b3_from___b7: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp __b3 } // sqr @@ -6461,11 +6392,11 @@ sqr: { .label val = $3a .label return_1 = $87 .label return_2 = $8c - // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z val asl sta.z __0 - // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 + // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3 ldy.z __0 lda (SQUARES),y sta.z return @@ -6475,7 +6406,7 @@ sqr: { jmp __breturn // sqr::@return __breturn: - // [242] return + // [241] return rts } // init_squares @@ -6487,57 +6418,57 @@ init_squares: { .label squares = $3d .label sqr = $3b .label i = $3f - // [244] call malloc - // [93] phi from init_squares to malloc [phi:init_squares->malloc] + // [243] call malloc + // [92] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [92] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp __b2 // init_squares::@2 __b2: - // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SQUARES lda.z malloc.mem+1 sta.z SQUARES+1 - // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z squares lda.z SQUARES+1 sta.z squares+1 - // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] __b1_from___b2: - // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 + // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 jmp __b1 - // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [246] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] __b1_from___b1: - // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp __b1 // init_squares::@1 __b1: - // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda.z sqr sta (squares),y iny lda.z sqr+1 sta (squares),y - // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc.z squares @@ -6545,15 +6476,15 @@ init_squares: { bcc !+ inc.z squares+1 !: - // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __3 - // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [250] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z __3 iny sty.z __4 - // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 + // [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2 lda.z __4 clc adc.z sqr @@ -6561,16 +6492,16 @@ init_squares: { bcc !+ inc.z sqr+1 !: - // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 + // [252] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 + // [253] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_SQUARES-1+1 cmp.z i bne __b1_from___b1 jmp __breturn // init_squares::@return __breturn: - // [255] return + // [254] return rts } // File Data @@ -6583,456 +6514,456 @@ CORDIC_ATAN2_ANGLES_16: REGISTER UPLIFT POTENTIAL REGISTERS Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a -Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a -Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a -Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a -Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a +Statement [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a +Statement [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a +Statement [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a +Statement [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Statement [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a -Statement [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a +Statement [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y -Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a -Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y -Statement [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ) always clobbers reg byte a +Statement [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y +Statement [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a +Statement [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a +Statement [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y +Statement [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:81 [ main::bucket_size#0 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] -Statement [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:81 [ main::bucket_size#0 ] Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] -Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a -Statement [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a -Statement [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y -Statement [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y -Statement [50] (word) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a -Statement [51] (word) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a -Statement [52] (word) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a -Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a +Statement [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a +Statement [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y +Statement [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y +Statement [49] (word) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a +Statement [50] (word) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a +Statement [51] (word) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a +Statement [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:9 [ init_buckets::i#2 init_buckets::i#1 ] -Statement [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a -Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a -Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a -Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a -Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a -Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a -Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a -Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a +Statement [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a +Statement [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:16 [ init_buckets::i3#2 init_buckets::i3#1 ] -Statement [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a -Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ) always clobbers reg byte a +Statement [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a +Statement [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:97 [ init_buckets::distance#0 ] -Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a -Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a -Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:97 [ init_buckets::distance#0 ] -Statement [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ) always clobbers reg byte a -Statement [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y -Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y -Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ) always clobbers reg byte a +Statement [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y +Statement [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y +Statement [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:6 [ malloc::mem#0 ] malloc:8 [ malloc::mem#0 ] malloc:10 [ malloc::mem#0 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:6 [ malloc::mem#0 heap_head#1 ] malloc:8 [ malloc::mem#0 heap_head#1 ] malloc:10 [ malloc::mem#0 heap_head#1 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Statement [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:128 [ init_angle_screen::ang_w#0 ] -Statement [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:128 [ init_angle_screen::ang_w#0 ] -Statement [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:36 [ atan2_16::i#2 atan2_16::i#1 ] -Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] -Statement [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a -Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a -Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] -Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:13::init_dist_screen:17::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:13::init_dist_screen:17::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:13::init_dist_screen:17::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:63 [ init_squares::i#2 init_squares::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:63 [ init_squares::i#2 init_squares::i#1 ] -Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a -Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a -Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a -Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a -Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a -Statement [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a -Statement [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y -Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y -Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a -Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y -Statement [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ) always clobbers reg byte a -Statement [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a -Statement [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a -Statement [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y -Statement [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y -Statement [50] (word) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a -Statement [51] (word) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a -Statement [52] (word) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a -Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a -Statement [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a -Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a -Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a -Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a -Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a -Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a -Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a -Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a -Statement [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a -Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ) always clobbers reg byte a -Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a -Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a -Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y -Statement [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ) always clobbers reg byte a -Statement [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y -Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y -Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a -Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a -Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a +Statement [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a +Statement [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a +Statement [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a +Statement [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a +Statement [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y +Statement [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a +Statement [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a +Statement [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y +Statement [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ) always clobbers reg byte a +Statement [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a +Statement [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a +Statement [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y +Statement [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y +Statement [49] (word) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a +Statement [50] (word) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a +Statement [51] (word) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a +Statement [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a +Statement [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a +Statement [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a +Statement [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ) always clobbers reg byte a +Statement [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ) always clobbers reg byte a +Statement [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y +Statement [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y +Statement [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:6 [ malloc::mem#0 ] malloc:8 [ malloc::mem#0 ] malloc:10 [ malloc::mem#0 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:6 [ malloc::mem#0 heap_head#1 ] malloc:8 [ malloc::mem#0 heap_head#1 ] malloc:10 [ malloc::mem#0 heap_head#1 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:149 [ init_dist_screen::d#0 ] -Statement [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y +Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:13::init_dist_screen:17::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:13::init_dist_screen:17::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:13::init_dist_screen:17::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a -Statement [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a -Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a -Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a -Statement [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a -Statement [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a -Statement [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a -Statement [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y -Statement [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y -Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a -Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a -Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y -Statement [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ) always clobbers reg byte a -Statement [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a -Statement [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y -Statement [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a -Statement [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y -Statement [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y -Statement [50] (word) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a -Statement [51] (word) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a -Statement [52] (word) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a -Statement [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a -Statement [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a -Statement [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a -Statement [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a -Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a -Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a -Statement [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a -Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y -Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a -Statement [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a -Statement [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a -Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ) always clobbers reg byte a -Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a -Statement [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a -Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y -Statement [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ) always clobbers reg byte a -Statement [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y -Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y -Statement [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y -Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a -Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a -Statement [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:244 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a -Statement [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a -Statement [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a -Statement [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a -Statement [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a -Statement [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a -Statement [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a -Statement [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y -Statement [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a -Statement [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y -Statement [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a -Statement [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a -Statement [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a -Statement [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a -Statement [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a -Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y -Statement [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a -Statement [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a -Statement [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y -Statement [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a -Statement [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y -Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a -Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a -Statement [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a -Statement [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a -Statement [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a -Statement [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a -Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a -Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a -Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a -Statement [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a -Statement [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a -Statement [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a -Statement [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a -Statement [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a -Statement [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a -Statement [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a -Statement [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a -Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a -Statement [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a -Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a -Statement [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a -Statement [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a -Statement [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a -Statement [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:14::init_angle_screen:20::atan2_16:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a -Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a -Statement [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a -Statement [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a -Statement [196] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a -Statement [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y -Statement [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y -Statement [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a -Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a -Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a -Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a -Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:200 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a -Statement [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y -Statement [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a -Statement [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a -Statement [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a -Statement [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y -Statement [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a -Statement [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a -Statement [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a -Statement [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:200::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a -Statement [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a -Statement [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:195 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y -Statement [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a -Statement [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a -Statement [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y -Statement [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a -Statement [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a -Statement [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a +Statement [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a +Statement [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a +Statement [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:13 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a +Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a +Statement [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a +Statement [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y +Statement [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a +Statement [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a +Statement [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y +Statement [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$24 ] ) always clobbers reg byte a +Statement [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a +Statement [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y +Statement [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a +Statement [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y +Statement [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y +Statement [49] (word) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a +Statement [50] (word) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a +Statement [51] (word) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a +Statement [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a +Statement [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a +Statement [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a +Statement [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a +Statement [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a +Statement [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a +Statement [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a +Statement [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y +Statement [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a +Statement [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a +Statement [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a +Statement [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$7 ] ) always clobbers reg byte a +Statement [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a +Statement [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a +Statement [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y +Statement [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 ] ) always clobbers reg byte a +Statement [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y +Statement [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y +Statement [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y +Statement [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a +Statement [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:6 [ malloc::mem#0 ] malloc:8 [ malloc::mem#0 ] malloc:10 [ malloc::mem#0 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a +Statement [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] malloc:6 [ malloc::mem#0 heap_head#1 ] malloc:8 [ malloc::mem#0 heap_head#1 ] malloc:10 [ malloc::mem#0 heap_head#1 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a +Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a +Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a +Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a +Statement [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a +Statement [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a +Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a +Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y +Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a +Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y +Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a +Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a +Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a +Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a +Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a +Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y +Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a +Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a +Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y +Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a +Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:13::init_angle_screen:19 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y +Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a +Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a +Statement [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a +Statement [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a +Statement [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a +Statement [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a +Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a +Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a +Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a +Statement [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a +Statement [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a +Statement [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a +Statement [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a +Statement [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a +Statement [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a +Statement [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a +Statement [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a +Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a +Statement [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a +Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a +Statement [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a +Statement [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a +Statement [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a +Statement [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:13::init_angle_screen:19::atan2_16:113 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a +Statement [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ) always clobbers reg byte a +Statement [180] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ) always clobbers reg byte a +Statement [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a +Statement [195] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a +Statement [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y +Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y +Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a +Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a +Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a +Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a +Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a +Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y +Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a +Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a +Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a +Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y +Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a +Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a +Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a +Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a +Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:13::init_dist_screen:17::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:13::init_dist_screen:17::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a +Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqr:179 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:13::init_dist_screen:17::sqr:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y +Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a +Statement [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a +Statement [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y +Statement [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a +Statement [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a +Statement [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Potential registers zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] : zp[1]:2 , reg byte x , Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte x , Potential registers zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] : zp[2]:4 , @@ -7152,57 +7083,57 @@ Uplift Scope [init_buckets] 34.33: zp[2]:10 [ init_buckets::dist#4 init_buckets: Uplift Scope [sqrt] 202: zp[1]:148 [ sqrt::return#2 ] 103: zp[2]:146 [ sqrt::val#0 ] 34.33: zp[1]:160 [ sqrt::return#0 ] 4: zp[2]:154 [ sqrt::found#0 ] 4: zp[2]:156 [ sqrt::$3 ] 2: zp[2]:158 [ sqrt::$1 ] Uplift Scope [init_squares] 25.17: zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp[1]:63 [ init_squares::i#2 init_squares::i#1 ] 22: zp[1]:172 [ init_squares::$3 ] 22: zp[1]:173 [ init_squares::$4 ] 13.93: zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] Uplift Scope [malloc] 35: zp[2]:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp[2]:109 [ malloc::mem#0 ] -Uplift Scope [] 23.24: zp[2]:21 [ heap_head#18 heap_head#1 ] 0.12: zp[2]:64 [ SCREEN_DIST#0 ] 0.05: zp[2]:66 [ SCREEN_ANGLE#0 ] 0.04: zp[2]:72 [ BUCKET_IDX#0 ] 0.03: zp[2]:170 [ SQUARES#1 ] 0.03: zp[2]:70 [ BUCKETS#0 ] 0.02: zp[2]:68 [ BUCKET_SIZES#0 ] +Uplift Scope [] 23.25: zp[2]:21 [ heap_head#18 heap_head#1 ] 0.13: zp[2]:64 [ SCREEN_DIST#0 ] 0.05: zp[2]:66 [ SCREEN_ANGLE#0 ] 0.04: zp[2]:72 [ BUCKET_IDX#0 ] 0.03: zp[2]:170 [ SQUARES#1 ] 0.03: zp[2]:70 [ BUCKETS#0 ] 0.02: zp[2]:68 [ BUCKET_SIZES#0 ] Uplift Scope [RADIX] -Uplifting [atan2_16] best 1253979 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:122 [ atan2_16::return#2 ] zp[2]:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:118 [ atan2_16::x#0 ] zp[2]:120 [ atan2_16::y#0 ] +Uplifting [atan2_16] best 1253976 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:32 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:34 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:122 [ atan2_16::return#2 ] zp[2]:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:118 [ atan2_16::x#0 ] zp[2]:120 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [bsearch16u] best 1234979 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp[2]:165 [ bsearch16u::result#0 ] zp[2]:163 [ bsearch16u::pivot#0 ] zp[2]:152 [ bsearch16u::return#3 ] zp[2]:150 [ bsearch16u::key#0 ] -Uplifting [init_angle_screen] best 1233379 combination zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:124 [ init_angle_screen::angle_w#0 ] zp[2]:126 [ init_angle_screen::$11 ] zp[1]:129 [ init_angle_screen::$13 ] zp[1]:130 [ init_angle_screen::$14 ] zp[1]:131 [ init_angle_screen::$15 ] zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:128 [ init_angle_screen::ang_w#0 ] zp[2]:116 [ init_angle_screen::yw#0 ] zp[2]:113 [ init_angle_screen::xw#0 ] zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:74 [ init_angle_screen::screen#0 ] +Uplifting [bsearch16u] best 1234976 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp[2]:165 [ bsearch16u::result#0 ] zp[2]:163 [ bsearch16u::pivot#0 ] zp[2]:152 [ bsearch16u::return#3 ] zp[2]:150 [ bsearch16u::key#0 ] +Uplifting [init_angle_screen] best 1233376 combination zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:124 [ init_angle_screen::angle_w#0 ] zp[2]:126 [ init_angle_screen::$11 ] zp[1]:129 [ init_angle_screen::$13 ] zp[1]:130 [ init_angle_screen::$14 ] zp[1]:131 [ init_angle_screen::$15 ] zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:128 [ init_angle_screen::ang_w#0 ] zp[2]:116 [ init_angle_screen::yw#0 ] zp[2]:113 [ init_angle_screen::xw#0 ] zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:74 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. -Uplifting [main] best 1231939 combination zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] reg byte a [ main::$24 ] zp[2]:85 [ main::fill#0 ] zp[2]:87 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$23 ] zp[2]:82 [ main::fill1#0 ] zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp[1]:81 [ main::bucket_size#0 ] zp[2]:79 [ main::bucket#0 ] +Uplifting [main] best 1231936 combination zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] reg byte a [ main::$24 ] zp[2]:85 [ main::fill#0 ] zp[2]:87 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$23 ] zp[2]:82 [ main::fill1#0 ] zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp[1]:81 [ main::bucket_size#0 ] zp[2]:79 [ main::bucket#0 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [init_dist_screen] best 1228739 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp[2]:142 [ init_dist_screen::xds#0 ] zp[2]:144 [ init_dist_screen::ds#0 ] zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp[1]:134 [ init_dist_screen::y2#0 ] zp[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp[2]:137 [ init_dist_screen::yds#0 ] +Uplifting [init_dist_screen] best 1228736 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp[2]:142 [ init_dist_screen::xds#0 ] zp[2]:144 [ init_dist_screen::ds#0 ] zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp[1]:134 [ init_dist_screen::y2#0 ] zp[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp[2]:137 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. -Uplifting [sqr] best 1228402 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp[2]:140 [ sqr::return#3 ] zp[2]:168 [ sqr::return#0 ] zp[2]:135 [ sqr::return#2 ] reg byte a [ sqr::$0 ] -Uplifting [init_buckets] best 1228122 combination zp[2]:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp[2]:89 [ init_buckets::$15 ] zp[2]:93 [ init_buckets::$12 ] zp[2]:95 [ init_buckets::$16 ] zp[2]:98 [ init_buckets::$7 ] zp[2]:100 [ init_buckets::$13 ] zp[2]:102 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp[2]:106 [ init_buckets::$8 ] zp[2]:104 [ init_buckets::bucket#0 ] zp[1]:97 [ init_buckets::distance#0 ] zp[2]:91 [ init_buckets::$4 ] zp[2]:76 [ init_buckets::screen#0 ] -Uplifting [sqrt] best 1227219 combination reg byte a [ sqrt::return#2 ] zp[2]:146 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp[2]:154 [ sqrt::found#0 ] zp[2]:156 [ sqrt::$3 ] zp[2]:158 [ sqrt::$1 ] -Uplifting [init_squares] best 1227019 combination zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] -Uplifting [malloc] best 1227019 combination zp[2]:23 [ malloc::size#7 malloc::size#6 ] zp[2]:109 [ malloc::mem#0 ] -Uplifting [] best 1227019 combination zp[2]:21 [ heap_head#18 heap_head#1 ] zp[2]:64 [ SCREEN_DIST#0 ] zp[2]:66 [ SCREEN_ANGLE#0 ] zp[2]:72 [ BUCKET_IDX#0 ] zp[2]:170 [ SQUARES#1 ] zp[2]:70 [ BUCKETS#0 ] zp[2]:68 [ BUCKET_SIZES#0 ] -Uplifting [RADIX] best 1227019 combination +Uplifting [sqr] best 1228399 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp[2]:140 [ sqr::return#3 ] zp[2]:168 [ sqr::return#0 ] zp[2]:135 [ sqr::return#2 ] reg byte a [ sqr::$0 ] +Uplifting [init_buckets] best 1228119 combination zp[2]:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp[2]:89 [ init_buckets::$15 ] zp[2]:93 [ init_buckets::$12 ] zp[2]:95 [ init_buckets::$16 ] zp[2]:98 [ init_buckets::$7 ] zp[2]:100 [ init_buckets::$13 ] zp[2]:102 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp[2]:106 [ init_buckets::$8 ] zp[2]:104 [ init_buckets::bucket#0 ] zp[1]:97 [ init_buckets::distance#0 ] zp[2]:91 [ init_buckets::$4 ] zp[2]:76 [ init_buckets::screen#0 ] +Uplifting [sqrt] best 1227216 combination reg byte a [ sqrt::return#2 ] zp[2]:146 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp[2]:154 [ sqrt::found#0 ] zp[2]:156 [ sqrt::$3 ] zp[2]:158 [ sqrt::$1 ] +Uplifting [init_squares] best 1227016 combination zp[2]:61 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp[2]:59 [ init_squares::sqr#2 init_squares::sqr#1 ] +Uplifting [malloc] best 1227016 combination zp[2]:23 [ malloc::size#7 malloc::size#6 ] zp[2]:109 [ malloc::mem#0 ] +Uplifting [] best 1227016 combination zp[2]:21 [ heap_head#18 heap_head#1 ] zp[2]:64 [ SCREEN_DIST#0 ] zp[2]:66 [ SCREEN_ANGLE#0 ] zp[2]:72 [ BUCKET_IDX#0 ] zp[2]:170 [ SQUARES#1 ] zp[2]:70 [ BUCKETS#0 ] zp[2]:68 [ BUCKET_SIZES#0 ] +Uplifting [RADIX] best 1227016 combination Attempting to uplift remaining variables inzp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] -Uplifting [main] best 1227019 combination zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] +Uplifting [main] best 1227016 combination zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] Attempting to uplift remaining variables inzp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] -Uplifting [init_dist_screen] best 1227019 combination zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] +Uplifting [init_dist_screen] best 1227016 combination zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Attempting to uplift remaining variables inzp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] -Uplifting [init_angle_screen] best 1227019 combination zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] +Uplifting [init_angle_screen] best 1227016 combination zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp[1]:129 [ init_angle_screen::$13 ] -Uplifting [init_angle_screen] best 1226419 combination reg byte a [ init_angle_screen::$13 ] +Uplifting [init_angle_screen] best 1226416 combination reg byte a [ init_angle_screen::$13 ] Attempting to uplift remaining variables inzp[1]:130 [ init_angle_screen::$14 ] -Uplifting [init_angle_screen] best 1226019 combination reg byte a [ init_angle_screen::$14 ] +Uplifting [init_angle_screen] best 1226016 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp[1]:131 [ init_angle_screen::$15 ] -Uplifting [init_angle_screen] best 1225419 combination reg byte a [ init_angle_screen::$15 ] +Uplifting [init_angle_screen] best 1225416 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] -Uplifting [init_dist_screen] best 1225419 combination zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] +Uplifting [init_dist_screen] best 1225416 combination zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Attempting to uplift remaining variables inzp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] -Uplifting [init_angle_screen] best 1225419 combination zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] +Uplifting [init_angle_screen] best 1225416 combination zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Attempting to uplift remaining variables inzp[1]:128 [ init_angle_screen::ang_w#0 ] -Uplifting [init_angle_screen] best 1225419 combination zp[1]:128 [ init_angle_screen::ang_w#0 ] +Uplifting [init_angle_screen] best 1225416 combination zp[1]:128 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] -Uplifting [init_dist_screen] best 1225349 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] +Uplifting [init_dist_screen] best 1225346 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] Attempting to uplift remaining variables inzp[1]:134 [ init_dist_screen::y2#0 ] -Uplifting [init_dist_screen] best 1225249 combination reg byte a [ init_dist_screen::y2#0 ] +Uplifting [init_dist_screen] best 1225246 combination reg byte a [ init_dist_screen::y2#0 ] Attempting to uplift remaining variables inzp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] -Uplifting [init_angle_screen] best 1225249 combination zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] +Uplifting [init_angle_screen] best 1225246 combination zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] -Uplifting [init_dist_screen] best 1225249 combination zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] +Uplifting [init_dist_screen] best 1225246 combination zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Attempting to uplift remaining variables inzp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] -Uplifting [main] best 1225249 combination zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] +Uplifting [main] best 1225246 combination zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] Attempting to uplift remaining variables inzp[1]:81 [ main::bucket_size#0 ] -Uplifting [main] best 1225249 combination zp[1]:81 [ main::bucket_size#0 ] +Uplifting [main] best 1225246 combination zp[1]:81 [ main::bucket_size#0 ] Attempting to uplift remaining variables inzp[1]:97 [ init_buckets::distance#0 ] -Uplifting [init_buckets] best 1225249 combination zp[1]:97 [ init_buckets::distance#0 ] +Uplifting [init_buckets] best 1225246 combination zp[1]:97 [ init_buckets::distance#0 ] Coalescing zero page register [ zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] ] with [ zp[2]:82 [ main::fill1#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp[2]:89 [ init_buckets::$15 ] ] - score: 1 Coalescing zero page register [ zp[2]:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp[2]:109 [ malloc::mem#0 ] ] - score: 1 @@ -7326,113 +7257,108 @@ __b1_from___bbegin: // @1 __b1: // [2] call malloc - // [93] phi from @1 to malloc [phi:@1->malloc] + // [92] phi from @1 to malloc [phi:@1->malloc] malloc_from___b1: - // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 + // [92] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP sta.z heap_head+1 jsr malloc - jmp __b4 - // @4 -__b4: + jmp __b3 + // @3 +__b3: // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SCREEN_DIST lda.z malloc.mem+1 sta.z SCREEN_DIST+1 // [4] call malloc - // [93] phi from @4 to malloc [phi:@4->malloc] -malloc_from___b4: - // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 + // [92] phi from @3 to malloc [phi:@3->malloc] +malloc_from___b3: + // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc - jmp __b5 - // @5 -__b5: + jmp __b4 + // @4 +__b4: // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SCREEN_ANGLE lda.z malloc.mem+1 sta.z SCREEN_ANGLE+1 - // [6] phi from @5 to @2 [phi:@5->@2] -__b2_from___b5: - jmp __b2 - // @2 -__b2: - // [7] call malloc - // [93] phi from @2 to malloc [phi:@2->malloc] -malloc_from___b2: - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 + // [6] call malloc + // [92] phi from @4 to malloc [phi:@4->malloc] +malloc_from___b4: + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@4->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_BYTE sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy jsr malloc - jmp __b6 - // @6 -__b6: - // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp __b5 + // @5 +__b5: + // [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKET_SIZES lda.z malloc.mem+1 sta.z BUCKET_SIZES+1 - // [9] call malloc - // [93] phi from @6 to malloc [phi:@6->malloc] -malloc_from___b6: - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 + // [8] call malloc + // [92] phi from @5 to malloc [phi:@5->malloc] +malloc_from___b5: + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@5->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_POINTER sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@5->malloc#1] -- register_copy jsr malloc - jmp __b7 - // @7 -__b7: - // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp __b6 + // @6 +__b6: + // [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKETS lda.z malloc.mem+1 sta.z BUCKETS+1 - // [11] call malloc - // [93] phi from @7 to malloc [phi:@7->malloc] -malloc_from___b7: - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 + // [10] call malloc + // [92] phi from @6 to malloc [phi:@6->malloc] +malloc_from___b6: + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@6->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_BYTE sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy jsr malloc - jmp __b8 - // @8 -__b8: - // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + jmp __b7 + // @7 +__b7: + // [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKET_IDX lda.z malloc.mem+1 sta.z BUCKET_IDX+1 - // [13] phi from @8 to @3 [phi:@8->@3] -__b3_from___b8: - jmp __b3 - // @3 -__b3: - // [14] call main + // [12] phi from @7 to @2 [phi:@7->@2] +__b2_from___b7: + jmp __b2 + // @2 +__b2: + // [13] call main jsr main - // [15] phi from @3 to @end [phi:@3->@end] -__bend_from___b3: + // [14] phi from @2 to @end [phi:@2->@end] +__bend_from___b2: jmp __bend // @end __bend: @@ -7452,36 +7378,36 @@ main: { .label min_offset_1 = $a // asm { sei } sei - // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z init_dist_screen.screen lda.z SCREEN_DIST+1 sta.z init_dist_screen.screen+1 - // [18] call init_dist_screen - // [171] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [17] call init_dist_screen + // [170] phi from main to init_dist_screen [phi:main->init_dist_screen] init_dist_screen_from_main: jsr init_dist_screen jmp __b15 // main::@15 __b15: - // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 + // [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 lda.z SCREEN_ANGLE sta.z init_angle_screen.screen lda.z SCREEN_ANGLE+1 sta.z init_angle_screen.screen+1 - // [20] call init_angle_screen + // [19] call init_angle_screen jsr init_angle_screen jmp __b16 // main::@16 __b16: - // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 - // [22] call init_buckets - // [53] phi from main::@16 to init_buckets [phi:main::@16->init_buckets] + // [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + // [21] call init_buckets + // [52] phi from main::@16 to init_buckets [phi:main::@16->init_buckets] init_buckets_from___b16: jsr init_buckets - // [23] phi from main::@16 to main::@1 [phi:main::@16->main::@1] + // [22] phi from main::@16 to main::@1 [phi:main::@16->main::@1] __b1_from___b16: - // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 + // [22] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bucket_idx jmp __b1 @@ -7490,55 +7416,55 @@ main: { jmp __b2 // main::@2 __b2: - // [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne __b2 jmp __b3 // main::@3 __b3: - // [25] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + // [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL - // [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z bucket_idx asl - // [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuaa + // [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuaa tay lda (BUCKETS),y sta.z bucket iny lda (BUCKETS),y sta.z bucket+1 - // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 + // [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z bucket_idx lda (BUCKET_SIZES),y sta.z bucket_size - // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 + // [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 lda.z bucket_size cmp #0 beq __b4 - // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [29] phi from main::@3 to main::@5 [phi:main::@3->main::@5] __b5_from___b3: - // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 + // [29] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z min_angle - // [30] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 + // [29] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 lda #<$ffff sta.z min_offset lda #>$ffff sta.z min_offset+1 - // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 + // [29] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 ldx #0 jmp __b5 // main::@5 __b5: - // [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuxx_lt_vbuz1_then_la1 + // [30] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuxx_lt_vbuz1_then_la1 cpx.z bucket_size bcc __b6 jmp __b7 // main::@7 __b7: - // [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 + // [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 lda.z min_offset cmp #<$ffff bne !+ @@ -7549,7 +7475,7 @@ main: { jmp __b11 // main::@11 __b11: - // [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 + // [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z fill1 adc #SCREEN_FILL sta.z fill1+1 - // [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 + // [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 lda #FILL_CHAR ldy #0 sta (fill1),y - // [35] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1] + // [22] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1] __b1_from___b11: __b1_from___b12: - // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy + // [22] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy jmp __b1 // main::@4 __b4: - // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 + // [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 inc.z bucket_idx - // [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS cmp.z bucket_idx bne __b12 jmp __b13 // main::@13 __b13: - // [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp __b14 // main::@14 __b14: - // [39] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp __b14 // main::@12 __b12: - // [40] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp __b1_from___b12 // main::@6 __b6: - // [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuaa + // [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (bucket),y sta.z offset iny lda (bucket),y sta.z offset+1 - // [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #SCREEN_FILL sta.z fill+1 - // [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 + // [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 lda #FILL_CHAR ldy #0 cmp (fill),y @@ -7620,7 +7546,7 @@ main: { jmp __b9 // main::@9 __b9: - // [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 + // [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 lda.z SCREEN_ANGLE clc adc.z offset @@ -7628,7 +7554,7 @@ main: { lda.z SCREEN_ANGLE+1 adc.z offset+1 sta.z angle+1 - // [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 + // [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 ldy #0 lda (angle),y cmp.z min_angle @@ -7638,35 +7564,35 @@ main: { jmp __b10 // main::@10 __b10: - // [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 + // [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (angle),y sta.z min_angle - // [48] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8] + // [47] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8] __b8_from___b10: __b8_from___b17: __b8_from___b18: - // [48] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy - // [48] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy + // [47] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy + // [47] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy jmp __b8 // main::@8 __b8: - // [49] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + // [48] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx inx - // [50] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 + // [49] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 lda.z min_offset_1 sta.z min_offset lda.z min_offset_1+1 sta.z min_offset+1 - // [30] phi from main::@8 to main::@5 [phi:main::@8->main::@5] + // [29] phi from main::@8 to main::@5 [phi:main::@8->main::@5] __b5_from___b8: - // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy - // [30] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy - // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy + // [29] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy + // [29] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy + // [29] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy jmp __b5 // main::@17 __b17: - // [51] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [50] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda.z min_offset sta.z min_offset_1 lda.z min_offset+1 @@ -7674,7 +7600,7 @@ main: { jmp __b8_from___b17 // main::@18 __b18: - // [52] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [51] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda.z min_offset sta.z min_offset_1 lda.z min_offset+1 @@ -7701,51 +7627,51 @@ init_buckets: { .label __15 = 5 .label __16 = $20 .label __17 = $22 - // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + // [53] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] __b1_from_init_buckets: - // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 + // [53] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 ldy #0 jmp __b1 // Init bucket sizes to 0 - // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [53] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] __b1_from___b1: - // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [53] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy jmp __b1 // init_buckets::@1 __b1: - // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (BUCKET_SIZES),y - // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy + // [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy iny - // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 + // [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #NUM_BUCKETS-1+1 bne __b1_from___b1 jmp __b2 // init_buckets::@2 __b2: - // [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + // [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 lda.z screen sta.z dist lda.z screen+1 sta.z dist+1 - // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [58] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] __b3_from___b2: - // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + // [58] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 lda #<0 sta.z i1 lda #>0 sta.z i1+1 - // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy + // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy jmp __b3 - // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] + // [58] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] __b3_from___b3: - // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy - // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy + // [58] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy + // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy jmp __b3 // init_buckets::@3 __b3: - // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) + // [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) ldy #0 lda (dist),y tay @@ -7753,39 +7679,39 @@ init_buckets: { clc adc #1 sta (BUCKET_SIZES),y - // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc.z dist bne !+ inc.z dist+1 !: - // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc.z i1 bne !+ inc.z i1+1 !: - // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + // [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 lda.z i1+1 cmp #>$3e8 bne __b3_from___b3 lda.z i1 cmp #<$3e8 bne __b3_from___b3 - // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] + // [63] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] __b4_from___b3: - // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 + // [63] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 lda #<0 sta.z i2 lda #>0 sta.z i2+1 jmp __b4 // Allocate the buckets - // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] + // [63] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] __b4_from___b8: - // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy + // [63] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy jmp __b4 // init_buckets::@4 __b4: - // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 + // [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z BUCKET_SIZES clc adc.z i2 @@ -7793,7 +7719,7 @@ init_buckets: { lda.z BUCKET_SIZES+1 adc.z i2+1 sta.z __15+1 - // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 + // [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 ldy #0 lda (malloc.size),y asl @@ -7801,24 +7727,24 @@ init_buckets: { lda #0 rol sta.z malloc.size+1 - // [67] call malloc - // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] + // [66] call malloc + // [92] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] malloc_from___b4: - // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy + // [92] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy jsr malloc jmp __b8 // init_buckets::@8 __b8: - // [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 - // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 + // [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda.z i2 asl sta.z __12 lda.z i2+1 rol sta.z __12+1 - // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 + // [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 lda.z __16 clc adc.z BUCKETS @@ -7826,82 +7752,82 @@ init_buckets: { lda.z __16+1 adc.z BUCKETS+1 sta.z __16+1 - // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 + // [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 ldy #0 lda.z __4 sta (__16),y iny lda.z __4+1 sta (__16),y - // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + // [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc.z i2 bne !+ inc.z i2+1 !: - // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 + // [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 lda.z i2+1 cmp #>NUM_BUCKETS-1+1 bne __b4_from___b8 lda.z i2 cmp #init_buckets::@5] + // [73] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5] __b5_from___b8: - // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 + // [73] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 ldy #0 jmp __b5 // Iterate all distances and fill the buckets with indices into the screens - // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [73] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] __b5_from___b5: - // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + // [73] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy jmp __b5 // init_buckets::@5 __b5: - // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (BUCKET_IDX),y - // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy + // [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy iny - // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 + // [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 cpy #NUM_BUCKETS-1+1 bne __b5_from___b5 jmp __b6 // init_buckets::@6 __b6: - // [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + // [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 lda.z screen sta.z dist_1 lda.z screen+1 sta.z dist_1+1 - // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] + // [78] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] __b7_from___b6: - // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 + // [78] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 lda #<0 sta.z i4 lda #>0 sta.z i4+1 - // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy + // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy jmp __b7 - // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] + // [78] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] __b7_from___b7: - // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy - // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy + // [78] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy + // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy jmp __b7 // init_buckets::@7 __b7: - // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 + // [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_1),y sta.z distance - // [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 + // [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 lda.z distance sta.z __7 lda #0 sta.z __7+1 - // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z __13 rol.z __13+1 - // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 + // [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 lda.z __17 clc adc.z BUCKETS @@ -7909,7 +7835,7 @@ init_buckets: { lda.z __17+1 adc.z BUCKETS+1 sta.z __17+1 - // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 + // [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 ldy #0 lda (bucket),y pha @@ -7918,7 +7844,7 @@ init_buckets: { sta.z bucket+1 pla sta.z bucket - // [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 + // [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 lda.z dist_1 sec sbc.z screen @@ -7926,34 +7852,34 @@ init_buckets: { lda.z dist_1+1 sbc.z screen+1 sta.z __8+1 - // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 + // [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 ldy.z distance lda (BUCKET_IDX),y asl - // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuaa=vwuz2 + // [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuaa=vwuz2 tay lda.z __8 sta (bucket),y iny lda.z __8+1 sta (bucket),y - // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 + // [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 ldy.z distance lda (BUCKET_IDX),y clc adc #1 sta (BUCKET_IDX),y - // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc.z dist_1 bne !+ inc.z dist_1+1 !: - // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc.z i4 bne !+ inc.z i4+1 !: - // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 + // [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 lda.z i4+1 cmp #>$3e8 bne __b7_from___b7 @@ -7963,7 +7889,7 @@ init_buckets: { jmp __breturn // init_buckets::@return __breturn: - // [92] return + // [91] return rts } // malloc @@ -7973,7 +7899,7 @@ init_buckets: { malloc: { .label mem = 5 .label size = 5 - // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 + // [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 lda.z heap_head sec sbc.z mem @@ -7981,7 +7907,7 @@ malloc: { lda.z heap_head+1 sbc.z mem+1 sta.z mem+1 - // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 @@ -7989,7 +7915,7 @@ malloc: { jmp __breturn // malloc::@return __breturn: - // [96] return + // [95] return rts } // init_angle_screen @@ -8008,7 +7934,7 @@ init_angle_screen: { .label x = 4 .label xb = 7 .label y = $1a - // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -8016,7 +7942,7 @@ init_angle_screen: { lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 - // [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 + // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 clc lda.z screen_bottomline adc #<$28*$c @@ -8024,41 +7950,41 @@ init_angle_screen: { lda.z screen_bottomline+1 adc #>$28*$c sta.z screen_bottomline+1 - // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] __b1_from_init_angle_screen: - // [99] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [99] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [99] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [99] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] __b1_from___b4: - // [99] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [99] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [99] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy jmp __b1 // init_angle_screen::@1 __b1: - // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] __b2_from___b1: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b2 // init_angle_screen::@2 __b2: - // [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b3 jmp __b4 // init_angle_screen::@4 __b4: - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 @@ -8066,7 +7992,7 @@ init_angle_screen: { lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_bottomline @@ -8074,47 +8000,47 @@ init_angle_screen: { bcc !+ inc.z screen_bottomline+1 !: - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1_from___b4 jmp __breturn // init_angle_screen::@return __breturn: - // [106] return + // [105] return rts // init_angle_screen::@3 __b3: - // [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl - // [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z xw+1 sty.z xw - // [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl - // [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z yw+1 sty.z yw - // [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [114] call atan2_16 + // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [113] call atan2_16 jsr atan2_16 - // [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp __b5 // init_angle_screen::@5 __b5: - // [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 - // [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __11 @@ -8122,43 +8048,43 @@ init_angle_screen: { bcc !+ inc.z __11+1 !: - // [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w - // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z ang_w ldy.z xb sta (screen_bottomline),y - // [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda.z ang_w eor #$ff clc adc #1 - // [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z xb sta (screen_topline),y - // [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc.z ang_w - // [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y - // [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc.z ang_w - // [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_bottomline),y - // [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [100] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] + // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] __b2_from___b5: - // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy + // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy + // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp __b2 } // atan2_16 @@ -8177,13 +8103,13 @@ atan2_16: { .label return = $a .label x = $20 .label y = $22 - // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b1 jmp __b2 // atan2_16::@2 __b2: - // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y @@ -8191,20 +8117,20 @@ atan2_16: { lda #0 sbc.z y+1 sta.z __2+1 - // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] __b3_from___b1: __b3_from___b2: - // [130] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [129] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy jmp __b3 // atan2_16::@3 __b3: - // [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b4 jmp __b5 // atan2_16::@5 __b5: - // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x @@ -8212,49 +8138,49 @@ atan2_16: { lda #0 sbc.z x+1 sta.z __7+1 - // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] __b6_from___b4: __b6_from___b5: - // [133] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [132] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy jmp __b6 // atan2_16::@6 __b6: - // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 sta.z angle+1 - // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 - // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@10 __b10: - // [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 - // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] __b12_from___b10: __b12_from___b19: - // [136] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [135] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy jmp __b12 // atan2_16::@12 __b12: - // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle - // [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7_from___b12 jmp __b21 // atan2_16::@21 __b21: - // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle @@ -8262,20 +8188,20 @@ atan2_16: { lda #>$8000 sbc.z angle+1 sta.z angle+1 - // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] __b7_from___b12: __b7_from___b21: - // [140] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [139] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy jmp __b7 // atan2_16::@7 __b7: - // [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8_from___b7 jmp __b9 // atan2_16::@9 __b9: - // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle @@ -8283,79 +8209,79 @@ atan2_16: { lda #0 sbc.z angle+1 sta.z angle+1 - // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] __b8_from___b7: __b8_from___b9: - // [143] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [142] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy jmp __b8 // atan2_16::@8 __b8: jmp __breturn // atan2_16::@return __breturn: - // [144] return + // [143] return rts // atan2_16::@11 __b11: - // [145] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 - // [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 - // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] __b13_from___b11: __b13_from___b14: - // [148] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [148] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [148] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [147] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [147] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [147] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy jmp __b13 // atan2_16::@13 __b13: - // [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs __b14 jmp __b15 // atan2_16::@15 __b15: - // [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq __b17_from___b15 jmp __b16 // atan2_16::@16 __b16: - // [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd - // [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd - // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] __b17_from___b15: __b17_from___b16: - // [153] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [153] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [152] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [152] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy jmp __b17 // atan2_16::@17 __b17: - // [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 jmp __b20 // atan2_16::@20 __b20: - // [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd @@ -8363,7 +8289,7 @@ atan2_16: { lda.z xi+1 sbc.z yd+1 sta.z xi+1 - // [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd @@ -8371,10 +8297,10 @@ atan2_16: { lda.z yi+1 adc.z xd+1 sta.z yi+1 - // [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda.z angle @@ -8383,30 +8309,30 @@ atan2_16: { lda.z angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 - // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] __b19_from___b18: __b19_from___b20: - // [159] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [159] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [158] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [158] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy jmp __b19 // atan2_16::@19 __b19: - // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 beq __b12_from___b19 - // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: - // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: - // [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd @@ -8414,7 +8340,7 @@ atan2_16: { lda.z xi+1 adc.z yd+1 sta.z xi+1 - // [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd @@ -8422,10 +8348,10 @@ atan2_16: { lda.z yi+1 sbc.z xd+1 sta.z yi+1 - // [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda.z angle @@ -8437,7 +8363,7 @@ atan2_16: { jmp __b19_from___b18 // atan2_16::@14 __b14: - // [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 @@ -8446,7 +8372,7 @@ atan2_16: { cmp #$80 ror.z xd+1 ror.z xd - // [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 @@ -8455,13 +8381,13 @@ atan2_16: { cmp #$80 ror.z yd+1 ror.z yd - // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13_from___b14 // atan2_16::@4 __b4: - // [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 @@ -8469,7 +8395,7 @@ atan2_16: { jmp __b6_from___b4 // atan2_16::@1 __b1: - // [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 @@ -8491,14 +8417,14 @@ init_dist_screen: { .label ds = $1e .label x = $1b .label xb = $1a - // [172] call init_squares - // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [171] call init_squares + // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] init_squares_from_init_dist_screen: jsr init_squares jmp __b11 // init_dist_screen::@11 __b11: - // [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 + // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$18 @@ -8506,49 +8432,49 @@ init_dist_screen: { lda.z screen+1 adc #>$28*$18 sta.z screen_bottomline+1 - // [174] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] + // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] __b1_from___b11: - // [174] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy - // [174] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy - // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy + // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y jmp __b1 - // [174] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] + // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] __b1_from___b7: - // [174] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy - // [174] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy - // [174] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy + // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy jmp __b1 // init_dist_screen::@1 __b1: - // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl - // [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 cmp #$18 bcs __b2 jmp __b3 // init_dist_screen::@3 __b3: - // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [178] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] __b4_from___b2: __b4_from___b3: - // [178] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy jmp __b4 // init_dist_screen::@4 __b4: - // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [180] call sqr - // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [179] call sqr + // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from___b4: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr - // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda.z sqr.return sta.z sqr.return_1 lda.z sqr.return+1 @@ -8556,26 +8482,26 @@ init_dist_screen: { jmp __b12 // init_dist_screen::@12 __b12: - // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [183] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] + // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] __b5_from___b12: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta.z x jmp __b5 // init_dist_screen::@5 __b5: - // [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b6 jmp __b7 // init_dist_screen::@7 __b7: - // [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_topline @@ -8583,7 +8509,7 @@ init_dist_screen: { bcc !+ inc.z screen_topline+1 !: - // [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_bottomline sec sbc #<$28 @@ -8591,51 +8517,51 @@ init_dist_screen: { lda.z screen_bottomline+1 sbc #>$28 sta.z screen_bottomline+1 - // [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc.z y - // [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1_from___b7 jmp __breturn // init_dist_screen::@return __breturn: - // [189] return + // [188] return rts // init_dist_screen::@6 __b6: - // [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl - // [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs __b8 jmp __b9 // init_dist_screen::@9 __b9: - // [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [193] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] __b10_from___b8: __b10_from___b9: - // [193] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy jmp __b10 // init_dist_screen::@10 __b10: - // [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [195] call sqr - // [239] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [194] call sqr + // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from___b10: - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr - // [196] (word) sqr::return#3 ← (word) sqr::return#0 + // [195] (word) sqr::return#3 ← (word) sqr::return#0 jmp __b13 // init_dist_screen::@13 __b13: - // [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 - // [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z ds clc adc.z yds @@ -8643,44 +8569,44 @@ init_dist_screen: { lda.z ds+1 adc.z yds+1 sta.z ds+1 - // [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [200] call sqrt + // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [199] call sqrt jsr sqrt - // [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp __b14 // init_dist_screen::@14 __b14: - // [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 - // [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y - // [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_bottomline),y - // [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z xb sta (screen_topline),y - // [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z xb sta (screen_bottomline),y - // [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [183] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] + // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] __b5_from___b14: - // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy + // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy + // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp __b5 // init_dist_screen::@8 __b8: - // [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$27 jmp __b10_from___b8 // init_dist_screen::@2 __b2: - // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp __b4_from___b2 @@ -8695,22 +8621,22 @@ sqrt: { .label __3 = $c .label found = $c .label val = $1e - // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z bsearch16u.items lda.z SQUARES+1 sta.z bsearch16u.items+1 - // [213] call bsearch16u - // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [212] call bsearch16u + // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u - // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 jmp __b1 // sqrt::@1 __b1: - // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 - // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda.z __3 sec sbc.z SQUARES @@ -8718,15 +8644,15 @@ sqrt: { lda.z __3+1 sbc.z SQUARES+1 sta.z __3+1 - // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z __1+1 ror.z __1 - // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda.z __1 jmp __breturn // sqrt::@return __breturn: - // [219] return + // [218] return rts } // bsearch16u @@ -8743,21 +8669,21 @@ bsearch16u: { .label return = $c .label items = $c .label key = $1e - // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] __b3_from_bsearch16u: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES jmp __b3 // bsearch16u::@3 __b3: - // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 cpx #0 bne __b4 jmp __b5 // bsearch16u::@5 __b5: - // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp.z key+1 @@ -8771,7 +8697,7 @@ bsearch16u: { jmp __b1 // bsearch16u::@1 __b1: - // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda.z __2 sec sbc #<1*SIZEOF_WORD @@ -8779,37 +8705,37 @@ bsearch16u: { lda.z __2+1 sbc #>1*SIZEOF_WORD sta.z __2+1 - // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] __b2_from___b1: __b2_from___b5: - // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp __b2 // bsearch16u::@2 __b2: - // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] __breturn_from___b2: __breturn_from___b8: - // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp __breturn // bsearch16u::@return __breturn: - // [227] return + // [226] return rts // bsearch16u::@4 __b4: - // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr - // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc adc.z items sta.z pivot lda #0 adc.z items+1 sta.z pivot+1 - // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda.z key ldy #0 @@ -8819,7 +8745,7 @@ bsearch16u: { iny sbc (pivot),y sta.z result+1 - // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 lda.z result+1 bne __b6 lda.z result @@ -8827,7 +8753,7 @@ bsearch16u: { jmp __b8 // bsearch16u::@8 __b8: - // [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda.z pivot sta.z return lda.z pivot+1 @@ -8835,7 +8761,7 @@ bsearch16u: { jmp __breturn_from___b8 // bsearch16u::@6 __b6: - // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda.z result+1 bmi __b7_from___b6 bne !+ @@ -8845,7 +8771,7 @@ bsearch16u: { jmp __b9 // bsearch16u::@9 __b9: - // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 lda #1*SIZEOF_WORD clc adc.z pivot @@ -8853,24 +8779,24 @@ bsearch16u: { lda #0 adc.z pivot+1 sta.z items+1 - // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex - // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] __b7_from___b6: __b7_from___b9: - // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp __b7 // bsearch16u::@7 __b7: - // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] __b3_from___b7: - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp __b3 } // sqr @@ -8880,9 +8806,9 @@ bsearch16u: { sqr: { .label return = $1e .label return_1 = $1c - // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta.z return @@ -8892,7 +8818,7 @@ sqr: { jmp __breturn // sqr::@return __breturn: - // [242] return + // [241] return rts } // init_squares @@ -8901,52 +8827,52 @@ sqr: { init_squares: { .label squares = $14 .label sqr = $1c - // [244] call malloc - // [93] phi from init_squares to malloc [phi:init_squares->malloc] + // [243] call malloc + // [92] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: - // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [92] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp __b2 // init_squares::@2 __b2: - // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 - // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z squares lda.z SQUARES+1 sta.z squares+1 - // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] __b1_from___b2: - // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 jmp __b1 - // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [246] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] __b1_from___b1: - // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp __b1 // init_squares::@1 __b1: - // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda.z sqr sta (squares),y iny lda.z sqr+1 sta (squares),y - // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc.z squares @@ -8954,28 +8880,28 @@ init_squares: { bcc !+ inc.z squares+1 !: - // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [250] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 - // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc.z sqr sta.z sqr bcc !+ inc.z sqr+1 !: - // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [252] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [253] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne __b1_from___b1 jmp __breturn // init_squares::@return __breturn: - // [255] return + // [254] return rts } // File Data @@ -8987,13 +8913,12 @@ CORDIC_ATAN2_ANGLES_16: ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 +Removing instruction jmp __b3 Removing instruction jmp __b4 Removing instruction jmp __b5 -Removing instruction jmp __b2 Removing instruction jmp __b6 Removing instruction jmp __b7 -Removing instruction jmp __b8 -Removing instruction jmp __b3 +Removing instruction jmp __b2 Removing instruction jmp __bend Removing instruction jmp __b15 Removing instruction jmp __b16 @@ -9121,10 +9046,8 @@ Replacing label __b1_from___b1 with __b1 Removing instruction __bbegin: Removing instruction __b1_from___bbegin: Removing instruction malloc_from___b1: -Removing instruction __b2_from___b5: -Removing instruction malloc_from___b2: -Removing instruction __b3_from___b8: -Removing instruction __bend_from___b3: +Removing instruction __b2_from___b7: +Removing instruction __bend_from___b2: Removing instruction init_buckets_from___b16: Removing instruction __b1: Removing instruction __b1_from___b11: @@ -9173,16 +9096,16 @@ Removing instruction __b7_from___b6: Removing instruction __b7_from___b9: Removing instruction __b1_from___b1: Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __b3: +Removing instruction malloc_from___b3: Removing instruction __b4: Removing instruction malloc_from___b4: Removing instruction __b5: -Removing instruction __b2: +Removing instruction malloc_from___b5: Removing instruction __b6: Removing instruction malloc_from___b6: Removing instruction __b7: -Removing instruction malloc_from___b7: -Removing instruction __b8: -Removing instruction __b3: +Removing instruction __b2: Removing instruction __bend: Removing instruction init_dist_screen_from_main: Removing instruction __b15: @@ -9278,7 +9201,6 @@ FINAL SYMBOL TABLE (label) @5 (label) @6 (label) @7 -(label) @8 (label) @begin (label) @end (const byte*) BORDERCOL = (byte*) 53280 @@ -9292,10 +9214,10 @@ FINAL SYMBOL TABLE (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; imalloc] - // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 + // [92] phi from @1 to malloc [phi:@1->malloc] + // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 + // [92] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP sta.z heap_head+1 jsr malloc - // @4 + // @3 // malloc(1000) // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem @@ -9786,80 +9708,78 @@ __b1: lda.z malloc.mem+1 sta.z SCREEN_DIST+1 // [4] call malloc - // [93] phi from @4 to malloc [phi:@4->malloc] - // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 + // [92] phi from @3 to malloc [phi:@3->malloc] + // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc - // @5 + // @4 // malloc(1000) // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SCREEN_ANGLE lda.z malloc.mem+1 sta.z SCREEN_ANGLE+1 - // [6] phi from @5 to @2 [phi:@5->@2] - // @2 // malloc(NUM_BUCKETS*sizeof(byte)) - // [7] call malloc - // [93] phi from @2 to malloc [phi:@2->malloc] - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 + // [6] call malloc + // [92] phi from @4 to malloc [phi:@4->malloc] + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@4->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_BYTE sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy jsr malloc - // @6 + // @5 // malloc(NUM_BUCKETS*sizeof(byte)) - // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKET_SIZES lda.z malloc.mem+1 sta.z BUCKET_SIZES+1 // malloc(NUM_BUCKETS*sizeof(word*)) - // [9] call malloc - // [93] phi from @6 to malloc [phi:@6->malloc] - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 + // [8] call malloc + // [92] phi from @5 to malloc [phi:@5->malloc] + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@5->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_POINTER sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@5->malloc#1] -- register_copy jsr malloc - // @7 + // @6 // malloc(NUM_BUCKETS*sizeof(word*)) - // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKETS lda.z malloc.mem+1 sta.z BUCKETS+1 // malloc(NUM_BUCKETS*sizeof(byte)) - // [11] call malloc - // [93] phi from @7 to malloc [phi:@7->malloc] - // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 + // [10] call malloc + // [92] phi from @6 to malloc [phi:@6->malloc] + // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@6->malloc#0] -- vwuz1=vbuc1 lda #NUM_BUCKETS*SIZEOF_BYTE sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy jsr malloc - // @8 + // @7 // malloc(NUM_BUCKETS*sizeof(byte)) - // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 + // [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z BUCKET_IDX lda.z malloc.mem+1 sta.z BUCKET_IDX+1 - // [13] phi from @8 to @3 [phi:@8->@3] - // @3 - // [14] call main + // [12] phi from @7 to @2 [phi:@7->@2] + // @2 + // [13] call main jsr main rts - // [15] phi from @3 to @end [phi:@3->@end] + // [14] phi from @2 to @end [phi:@2->@end] // @end // main main: { @@ -9879,50 +9799,50 @@ main: { // asm { sei } sei // init_dist_screen(SCREEN_DIST) - // [17] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 + // [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 lda.z SCREEN_DIST sta.z init_dist_screen.screen lda.z SCREEN_DIST+1 sta.z init_dist_screen.screen+1 - // [18] call init_dist_screen - // [171] phi from main to init_dist_screen [phi:main->init_dist_screen] + // [17] call init_dist_screen + // [170] phi from main to init_dist_screen [phi:main->init_dist_screen] jsr init_dist_screen // main::@15 // init_angle_screen(SCREEN_ANGLE) - // [19] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 + // [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2 lda.z SCREEN_ANGLE sta.z init_angle_screen.screen lda.z SCREEN_ANGLE+1 sta.z init_angle_screen.screen+1 - // [20] call init_angle_screen + // [19] call init_angle_screen jsr init_angle_screen // main::@16 // init_buckets(SCREEN_DIST) - // [21] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 - // [22] call init_buckets - // [53] phi from main::@16 to init_buckets [phi:main::@16->init_buckets] + // [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0 + // [21] call init_buckets + // [52] phi from main::@16 to init_buckets [phi:main::@16->init_buckets] jsr init_buckets - // [23] phi from main::@16 to main::@1 [phi:main::@16->main::@1] - // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 + // [22] phi from main::@16 to main::@1 [phi:main::@16->main::@1] + // [22] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z bucket_idx // main::@1 // main::@2 __b2: // while (*RASTER!=0xff) - // [24] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 + // [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 lda #$ff cmp RASTER bne __b2 // main::@3 // (*BORDERCOL)++; - // [25] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 + // [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL // bucket = BUCKETS[bucket_idx] - // [26] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z bucket_idx asl - // [27] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuaa + // [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuaa tay lda (BUCKETS),y sta.z bucket @@ -9930,34 +9850,34 @@ main: { lda (BUCKETS),y sta.z bucket+1 // bucket_size = BUCKET_SIZES[bucket_idx] - // [28] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 + // [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 ldy.z bucket_idx lda (BUCKET_SIZES),y sta.z bucket_size // if(bucket_size>0) - // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 + // [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 cmp #0 beq __b4 - // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5] - // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 + // [29] phi from main::@3 to main::@5 [phi:main::@3->main::@5] + // [29] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z min_angle - // [30] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 + // [29] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 lda #<$ffff sta.z min_offset lda #>$ffff sta.z min_offset+1 - // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 + // [29] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 ldx #0 // main::@5 __b5: // for( byte i=0;iSCREEN_FILL sta.z fill1+1 // *fill = FILL_CHAR - // [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 + // [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 lda #FILL_CHAR ldy #0 sta (fill1),y // (*BORDERCOL)--; - // [35] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL - // [23] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1] - // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy + // [22] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1] + // [22] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy jmp __b2 // main::@4 __b4: // bucket_idx++; - // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 + // [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 inc.z bucket_idx // if(bucket_idx==NUM_BUCKETS) - // [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 + // [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_BUCKETS cmp.z bucket_idx bne __b12 // main::@13 // (*BORDERCOL)--; - // [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL // main::@14 __b14: // (*(COLS+999))++; - // [39] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 + // [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 inc COLS+$3e7 jmp __b14 // main::@12 __b12: // (*BORDERCOL)--; - // [40] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 + // [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 dec BORDERCOL jmp __b2 // main::@6 __b6: // offset = bucket[i] - // [41] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [42] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuaa + // [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (bucket),y sta.z offset @@ -10026,7 +9946,7 @@ main: { lda (bucket),y sta.z offset+1 // fill = SCREEN_FILL+offset - // [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 + // [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 lda.z offset clc adc #SCREEN_FILL sta.z fill+1 // if(*fill!=FILL_CHAR) - // [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 + // [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 lda #FILL_CHAR ldy #0 cmp (fill),y beq __b18 // main::@9 // angle = SCREEN_ANGLE+offset - // [45] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 + // [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 lda.z SCREEN_ANGLE clc adc.z offset @@ -10051,7 +9971,7 @@ main: { adc.z offset+1 sta.z angle+1 // if(*angle<=min_angle) - // [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 + // [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 lda (angle),y cmp.z min_angle beq !+ @@ -10059,31 +9979,31 @@ main: { !: // main::@10 // min_angle = *angle - // [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 + // [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 ldy #0 lda (angle),y sta.z min_angle - // [48] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8] - // [48] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy - // [48] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy + // [47] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8] + // [47] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy + // [47] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy // main::@8 __b8: // for( byte i=0;imain::@5] - // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy - // [30] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy - // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy + // [29] phi from main::@8 to main::@5 [phi:main::@8->main::@5] + // [29] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy + // [29] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy + // [29] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy jmp __b5 // main::@17 __b17: - // [51] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [50] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda.z min_offset sta.z min_offset_1 lda.z min_offset+1 @@ -10091,7 +10011,7 @@ main: { jmp __b8 // main::@18 __b18: - // [52] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 + // [51] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 lda.z min_offset sta.z min_offset_1 lda.z min_offset+1 @@ -10118,43 +10038,43 @@ init_buckets: { .label __15 = 5 .label __16 = $20 .label __17 = $22 - // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] - // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 + // [53] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1] + // [53] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 ldy #0 // Init bucket sizes to 0 - // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] - // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy + // [53] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1] + // [53] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy // init_buckets::@1 __b1: // BUCKET_SIZES[i]=0 - // [55] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (BUCKET_SIZES),y // for(byte i:0..NUM_BUCKETS-1) - // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy + // [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy iny - // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 + // [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #NUM_BUCKETS-1+1 bne __b1 // init_buckets::@2 - // [58] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + // [57] (byte*) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 lda.z screen sta.z dist lda.z screen+1 sta.z dist+1 - // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] - // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 + // [58] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3] + // [58] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 lda #<0 sta.z i1 sta.z i1+1 - // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy - // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] - // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy - // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy + // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy + // [58] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3] + // [58] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy + // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy // init_buckets::@3 __b3: // BUCKET_SIZES[*dist]++; - // [60] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) + // [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx_(_deref_pbuz2)=_inc_pbuz1_derefidx_(_deref_pbuz2) ldy #0 lda (dist),y tay @@ -10163,36 +10083,36 @@ init_buckets: { adc #1 sta (BUCKET_SIZES),y // dist++; - // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 + // [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 inc.z dist bne !+ inc.z dist+1 !: // for( word i:0..999) - // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 + // [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 inc.z i1 bne !+ inc.z i1+1 !: - // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 + // [62] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 lda.z i1+1 cmp #>$3e8 bne __b3 lda.z i1 cmp #<$3e8 bne __b3 - // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] - // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 + // [63] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4] + // [63] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 lda #<0 sta.z i2 sta.z i2+1 // Allocate the buckets - // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] - // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy + // [63] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4] + // [63] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy // init_buckets::@4 __b4: // malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [65] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 + // [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 lda.z BUCKET_SIZES clc adc.z i2 @@ -10200,7 +10120,7 @@ init_buckets: { lda.z BUCKET_SIZES+1 adc.z i2+1 sta.z __15+1 - // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 + // [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 ldy #0 lda (malloc.size),y asl @@ -10208,23 +10128,23 @@ init_buckets: { tya rol sta.z malloc.size+1 - // [67] call malloc - // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] - // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy + // [66] call malloc + // [92] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc] + // [92] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy jsr malloc // init_buckets::@8 // malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [68] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 + // [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 // BUCKETS[i] = malloc(BUCKET_SIZES[i]*sizeof(byte*)) - // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 + // [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 lda.z i2 asl sta.z __12 lda.z i2+1 rol sta.z __12+1 - // [70] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 + // [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 lda.z __16 clc adc.z BUCKETS @@ -10232,7 +10152,7 @@ init_buckets: { lda.z __16+1 adc.z BUCKETS+1 sta.z __16+1 - // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 + // [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 ldy #0 lda.z __4 sta (__16),y @@ -10240,68 +10160,68 @@ init_buckets: { lda.z __4+1 sta (__16),y // for( word i:0..NUM_BUCKETS-1) - // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 + // [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 inc.z i2 bne !+ inc.z i2+1 !: - // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 + // [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 lda.z i2+1 cmp #>NUM_BUCKETS-1+1 bne __b4 lda.z i2 cmp #init_buckets::@5] - // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 + // [73] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5] + // [73] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 ldy #0 // Iterate all distances and fill the buckets with indices into the screens - // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] - // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy + // [73] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5] + // [73] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy // init_buckets::@5 __b5: // BUCKET_IDX[i]=0 - // [75] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 + // [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 lda #0 sta (BUCKET_IDX),y // for(byte i:0..NUM_BUCKETS-1) - // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy + // [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy iny - // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 + // [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 cpy #NUM_BUCKETS-1+1 bne __b5 // init_buckets::@6 - // [78] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 + // [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 lda.z screen sta.z dist_1 lda.z screen+1 sta.z dist_1+1 - // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] - // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 + // [78] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7] + // [78] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 lda #<0 sta.z i4 sta.z i4+1 - // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy - // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] - // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy - // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy + // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy + // [78] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7] + // [78] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy + // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy // init_buckets::@7 __b7: // distance = *dist - // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 + // [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 ldy #0 lda (dist_1),y sta.z distance // (word)distance - // [81] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 + // [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 sta.z __7 tya sta.z __7+1 // bucket = BUCKETS[(word)distance] - // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z __13 rol.z __13+1 - // [83] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 + // [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 lda.z __17 clc adc.z BUCKETS @@ -10309,7 +10229,7 @@ init_buckets: { lda.z __17+1 adc.z BUCKETS+1 sta.z __17+1 - // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 + // [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 lda (bucket),y pha iny @@ -10318,7 +10238,7 @@ init_buckets: { pla sta.z bucket // dist-screen - // [85] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 + // [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 lda.z dist_1 sec sbc.z screen @@ -10327,11 +10247,11 @@ init_buckets: { sbc.z screen+1 sta.z __8+1 // bucket[BUCKET_IDX[distance]] = dist-screen - // [86] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 + // [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 ldy.z distance lda (BUCKET_IDX),y asl - // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuaa=vwuz2 + // [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuaa=vwuz2 tay lda.z __8 sta (bucket),y @@ -10339,25 +10259,25 @@ init_buckets: { lda.z __8+1 sta (bucket),y // BUCKET_IDX[distance]++; - // [88] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 + // [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 ldy.z distance lda (BUCKET_IDX),y clc adc #1 sta (BUCKET_IDX),y // *dist++; - // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 + // [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 inc.z dist_1 bne !+ inc.z dist_1+1 !: // for(word i:0..999) - // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 + // [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 inc.z i4 bne !+ inc.z i4+1 !: - // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 + // [90] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 lda.z i4+1 cmp #>$3e8 bne __b7 @@ -10366,7 +10286,7 @@ init_buckets: { bne __b7 // init_buckets::@return // } - // [92] return + // [91] return rts } // malloc @@ -10377,7 +10297,7 @@ malloc: { .label mem = 5 .label size = 5 // mem = heap_head-size - // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 + // [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- pbuz1=pbuz2_minus_vwuz1 lda.z heap_head sec sbc.z mem @@ -10386,14 +10306,14 @@ malloc: { sbc.z mem+1 sta.z mem+1 // heap_head = mem - // [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 + // [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 sta.z heap_head+1 // malloc::@return // } - // [96] return + // [95] return rts } // init_angle_screen @@ -10413,7 +10333,7 @@ init_angle_screen: { .label xb = 7 .label y = $1a // screen_topline = screen+40*12 - // [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 + // [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$c @@ -10422,7 +10342,7 @@ init_angle_screen: { adc #>$28*$c sta.z screen_topline+1 // screen_bottomline = screen+40*12 - // [98] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 + // [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1 clc lda.z screen_bottomline adc #<$28*$c @@ -10430,35 +10350,35 @@ init_angle_screen: { lda.z screen_bottomline+1 adc #>$28*$c sta.z screen_bottomline+1 - // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] - // [99] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy - // [99] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy - // [99] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 + // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] + // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy + // [98] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [99] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] - // [99] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy - // [99] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy - // [99] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy + // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] + // [98] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy + // [98] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy + // [98] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy // init_angle_screen::@1 __b1: - // [100] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] - // [100] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 + // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] + // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [100] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 + // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x // init_angle_screen::@2 __b2: // for( byte x=0,xb=39; x<=19; x++, xb--) - // [101] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 + // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b3 // init_angle_screen::@4 // screen_topline -= 40 - // [102] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 @@ -10467,7 +10387,7 @@ init_angle_screen: { sbc #>$28 sta.z screen_topline+1 // screen_bottomline += 40 - // [103] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_bottomline @@ -10476,51 +10396,51 @@ init_angle_screen: { inc.z screen_bottomline+1 !: // for(byte y: 0..12) - // [104] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 + // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [105] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [104] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1 // init_angle_screen::@return // } - // [106] return + // [105] return rts // init_angle_screen::@3 __b3: // x*2 - // [107] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl // 39-x*2 - // [108] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa + // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } - // [109] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z xw+1 sty.z xw // y*2 - // [110] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl // (word){ y*2, 0 } - // [111] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 + // [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta.z yw+1 sty.z yw // atan2_16(xw, yw) - // [112] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 - // [113] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 - // [114] call atan2_16 + // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 + // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 + // [113] call atan2_16 jsr atan2_16 - // [115] (word) atan2_16::return#2 ← (word) atan2_16::return#0 + // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) - // [116] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 + // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 - // [117] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 + // [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __11 @@ -10529,46 +10449,46 @@ init_angle_screen: { inc.z __11+1 !: // ang_w = >(angle_w+0x0080) - // [118] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 + // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w // screen_bottomline[xb] = ang_w - // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 + // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 ldy.z xb sta (screen_bottomline),y // -ang_w - // [120] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 + // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w - // [121] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa + // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w - // [122] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 + // [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc.z ang_w // screen_topline[x] = 0x80+ang_w - // [123] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa + // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y // 0x80-ang_w - // [124] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 + // [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc.z ang_w // screen_bottomline[x] = 0x80-ang_w - // [125] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa + // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [126] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 + // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [127] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [100] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] - // [100] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy - // [100] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy + // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] + // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy + // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy jmp __b2 } // atan2_16 @@ -10588,13 +10508,13 @@ atan2_16: { .label x = $20 .label y = $22 // (y>=0)?y:-y - // [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 + // [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1 lda.z y+1 bmi !__b1+ jmp __b1 !__b1: // atan2_16::@2 - // [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 + // [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z y @@ -10602,18 +10522,18 @@ atan2_16: { lda #0 sbc.z y+1 sta.z __2+1 - // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] - // [130] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy + // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] + // [129] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy // atan2_16::@3 __b3: // (x>=0)?x:-x - // [131] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 + // [130] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1 lda.z x+1 bmi !__b4+ jmp __b4 !__b4: // atan2_16::@5 - // [132] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 + // [131] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z x @@ -10621,42 +10541,42 @@ atan2_16: { lda #0 sbc.z x+1 sta.z __7+1 - // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] - // [133] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy + // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] + // [132] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy // atan2_16::@6 __b6: - // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] - // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] + // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 - // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 + // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax - // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy - // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy + // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy + // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy // atan2_16::@10 __b10: // if(yi==0) - // [135] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 + // [134] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1 lda.z yi+1 bne __b11 lda.z yi bne __b11 - // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] - // [136] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy + // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] + // [135] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy // atan2_16::@12 __b12: // angle /=2 - // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle // if(x<0) - // [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 + // [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1 lda.z x+1 bpl __b7 // atan2_16::@21 // angle = 0x8000-angle - // [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 + // [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1 sec lda #<$8000 sbc.z angle @@ -10664,17 +10584,17 @@ atan2_16: { lda #>$8000 sbc.z angle+1 sta.z angle+1 - // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] - // [140] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy + // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] + // [139] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy // atan2_16::@7 __b7: // if(y<0) - // [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 + // [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1 lda.z y+1 bpl __b8 // atan2_16::@9 // angle = -angle - // [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 + // [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1 sec lda #0 sbc.z angle @@ -10682,69 +10602,69 @@ atan2_16: { lda #0 sbc.z angle+1 sta.z angle+1 - // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] - // [143] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy + // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] + // [142] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy // atan2_16::@8 __b8: // atan2_16::@return // } - // [144] return + // [143] return rts // atan2_16::@11 __b11: - // [145] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx + // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay - // [146] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 + // [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2 lda.z xi sta.z xd lda.z xi+1 sta.z xd+1 - // [147] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 + // [146] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2 lda.z yi sta.z yd lda.z yi+1 sta.z yd+1 - // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] - // [148] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy - // [148] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy - // [148] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy + // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] + // [147] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy + // [147] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy + // [147] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy // atan2_16::@13 __b13: // while(shift>=2) - // [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 + // [148] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1 cpy #2 bcs __b14 // atan2_16::@15 // if(shift) - // [150] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 + // [149] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1 cpy #0 beq __b17 // atan2_16::@16 // xd >>= 1 - // [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z xd+1 cmp #$80 ror.z xd+1 ror.z xd // yd >>= 1 - // [152] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 + // [151] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1 lda.z yd+1 cmp #$80 ror.z yd+1 ror.z yd - // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] - // [153] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy - // [153] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy + // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] + // [152] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy + // [152] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy // atan2_16::@17 __b17: // if(yi>=0) - // [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 + // [153] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1 lda.z yi+1 bpl __b18 // atan2_16::@20 // xi -= yd - // [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z xi sec sbc.z yd @@ -10753,7 +10673,7 @@ atan2_16: { sbc.z yd+1 sta.z xi+1 // yi += xd - // [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z yi clc adc.z xd @@ -10762,10 +10682,10 @@ atan2_16: { adc.z xd+1 sta.z yi+1 // angle -= CORDIC_ATAN2_ANGLES_16[i] - // [157] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa + // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa tay sec lda.z angle @@ -10774,30 +10694,30 @@ atan2_16: { lda.z angle+1 sbc CORDIC_ATAN2_ANGLES_16+1,y sta.z angle+1 - // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] - // [159] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy - // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy - // [159] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy + // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] + // [158] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy + // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy + // [158] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy // atan2_16::@19 __b19: // for( byte i: 0..CORDIC_ITERATIONS_16-1) - // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx + // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx - // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 + // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 cpx #CORDIC_ITERATIONS_16-1+1 bne !__b12+ jmp __b12 !__b12: - // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] - // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy - // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy - // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy - // [134] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy + // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] + // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy + // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy + // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy + // [133] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy jmp __b10 // atan2_16::@18 __b18: // xi += yd - // [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 + // [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2 lda.z xi clc adc.z yd @@ -10806,7 +10726,7 @@ atan2_16: { adc.z yd+1 sta.z xi+1 // yi -= xd - // [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 + // [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2 lda.z yi sec sbc.z xd @@ -10815,10 +10735,10 @@ atan2_16: { sbc.z xd+1 sta.z yi+1 // angle += CORDIC_ATAN2_ANGLES_16[i] - // [164] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl - // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa + // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa tay clc lda.z angle @@ -10831,7 +10751,7 @@ atan2_16: { // atan2_16::@14 __b14: // xd >>= 2 - // [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z xd+1 cmp #$80 ror.z xd+1 @@ -10841,7 +10761,7 @@ atan2_16: { ror.z xd+1 ror.z xd // yd >>= 2 - // [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 + // [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2 lda.z yd+1 cmp #$80 ror.z yd+1 @@ -10851,13 +10771,13 @@ atan2_16: { ror.z yd+1 ror.z yd // shift -=2 - // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 + // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13 // atan2_16::@4 __b4: - // [169] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 + // [168] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2 lda.z x sta.z xi lda.z x+1 @@ -10865,7 +10785,7 @@ atan2_16: { jmp __b6 // atan2_16::@1 __b1: - // [170] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 + // [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2 lda.z y sta.z yi lda.z y+1 @@ -10888,12 +10808,12 @@ init_dist_screen: { .label x = $1b .label xb = $1a // init_squares() - // [172] call init_squares - // [243] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] + // [171] call init_squares + // [242] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares] jsr init_squares // init_dist_screen::@11 // screen_bottomline = screen+40*24 - // [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 + // [172] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1 lda.z screen clc adc #<$28*$18 @@ -10901,67 +10821,67 @@ init_dist_screen: { lda.z screen+1 adc #>$28*$18 sta.z screen_bottomline+1 - // [174] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] - // [174] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy - // [174] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy - // [174] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 + // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] + // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy + // [173] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1 lda #0 sta.z y - // [174] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] - // [174] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy - // [174] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy - // [174] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy + // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] + // [173] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy + // [173] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy + // [173] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy // init_dist_screen::@1 __b1: // y2 = y*2 - // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl // (y2>=24)?(y2-24):(24-y2) - // [176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 + // [175] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1 cmp #$18 bcs __b2 // init_dist_screen::@3 - // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa + // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 - // [178] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] - // [178] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy + // [177] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4] + // [177] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy // init_dist_screen::@4 __b4: // sqr(yd) - // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 - // [180] call sqr - // [239] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy + // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 + // [179] call sqr + // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] + // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) - // [181] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 + // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 lda.z sqr.return sta.z sqr.return_1 lda.z sqr.return+1 sta.z sqr.return_1+1 // init_dist_screen::@12 // yds = sqr(yd) - // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 - // [183] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] - // [183] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 + // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 + // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] + // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 lda #$27 sta.z xb - // [183] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 + // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 lda #0 sta.z x // init_dist_screen::@5 __b5: // for( byte x=0,xb=39; x<=19; x++, xb--) - // [184] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 + // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 lda.z x cmp #$13+1 bcc __b6 // init_dist_screen::@7 // screen_topline += 40 - // [185] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z screen_topline @@ -10970,7 +10890,7 @@ init_dist_screen: { inc.z screen_topline+1 !: // screen_bottomline -= 40 - // [186] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 + // [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_bottomline sec sbc #<$28 @@ -10979,48 +10899,48 @@ init_dist_screen: { sbc #>$28 sta.z screen_bottomline+1 // for(byte y: 0..12) - // [187] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 + // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc.z y - // [188] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 + // [187] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$d cmp.z y bne __b1 // init_dist_screen::@return // } - // [189] return + // [188] return rts // init_dist_screen::@6 __b6: // x2 = x*2 - // [190] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl // (x2>=39)?(x2-39):(39-x2) - // [191] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 + // [190] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1 cmp #$27 bcs __b8 // init_dist_screen::@9 - // [192] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa + // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 - // [193] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] - // [193] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy + // [192] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10] + // [192] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy // init_dist_screen::@10 __b10: // sqr(xd) - // [194] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 - // [195] call sqr - // [239] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] - // [239] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy + // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 + // [194] call sqr + // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] + // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // sqr(xd) - // [196] (word) sqr::return#3 ← (word) sqr::return#0 + // [195] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@13 // xds = sqr(xd) - // [197] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 + // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds - // [198] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 + // [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z ds clc adc.z yds @@ -11029,47 +10949,47 @@ init_dist_screen: { adc.z yds+1 sta.z ds+1 // sqrt(ds) - // [199] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 - // [200] call sqrt + // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 + // [199] call sqrt jsr sqrt - // [201] (byte) sqrt::return#2 ← (byte) sqrt::return#0 + // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@14 // d = sqrt(ds) - // [202] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 + // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d - // [203] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y // screen_bottomline[x] = d - // [204] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // screen_topline[xb] = d - // [205] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z xb sta (screen_topline),y // screen_bottomline[xb] = d - // [206] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa + // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) - // [207] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 + // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [208] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 + // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb - // [183] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] - // [183] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy - // [183] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy + // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] + // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy + // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy jmp __b5 // init_dist_screen::@8 __b8: // (x2>=39)?(x2-39):(39-x2) - // [209] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 + // [208] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$27 jmp __b10 // init_dist_screen::@2 __b2: // (y2>=24)?(y2-24):(24-y2) - // [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 + // [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp __b4 @@ -11085,22 +11005,22 @@ sqrt: { .label found = $c .label val = $1e // bsearch16u(val, SQUARES, NUM_SQUARES) - // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 - // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 + // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z bsearch16u.items lda.z SQUARES+1 sta.z bsearch16u.items+1 - // [213] call bsearch16u - // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] + // [212] call bsearch16u + // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u // bsearch16u(val, SQUARES, NUM_SQUARES) - // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 + // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 // sqrt::@1 // found = bsearch16u(val, SQUARES, NUM_SQUARES) - // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 + // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 // found-SQUARES - // [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 + // [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda.z __3 sec sbc.z SQUARES @@ -11108,15 +11028,15 @@ sqrt: { lda.z __3+1 sbc.z SQUARES+1 sta.z __3+1 - // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z __1+1 ror.z __1 // (byte)(found-SQUARES) - // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 + // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda.z __1 // sqrt::@return // } - // [219] return + // [218] return rts } // bsearch16u @@ -11133,19 +11053,19 @@ bsearch16u: { .label return = $c .label items = $c .label key = $1e - // [221] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 + // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] + // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy + // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES // bsearch16u::@3 __b3: // while (num > 0) - // [222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 + // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 cpx #0 bne __b4 // bsearch16u::@5 // *items<=key?items:items-1 - // [223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 + // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 ldy #1 lda (items),y cmp.z key+1 @@ -11157,7 +11077,7 @@ bsearch16u: { !: bcc __b2 // bsearch16u::@1 - // [224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 + // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda.z __2 sec sbc #<1*SIZEOF_WORD @@ -11165,26 +11085,26 @@ bsearch16u: { lda.z __2+1 sbc #>1*SIZEOF_WORD sta.z __2+1 - // [225] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] - // [225] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy + // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] + // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy // bsearch16u::@2 __b2: - // [226] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] - // [226] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy + // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] + // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy // bsearch16u::@return // } - // [227] return + // [226] return rts // bsearch16u::@4 __b4: // num >> 1 - // [228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 + // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) - // [229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa + // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc adc.z items sta.z pivot @@ -11192,7 +11112,7 @@ bsearch16u: { adc.z items+1 sta.z pivot+1 // result = (signed int)key-(signed int)*pivot - // [231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 + // [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3 sec lda.z key ldy #0 @@ -11203,12 +11123,12 @@ bsearch16u: { sbc (pivot),y sta.z result+1 // if (result == 0) - // [232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 + // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 bne __b6 lda.z result bne __b6 // bsearch16u::@8 - // [233] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 + // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 lda.z pivot sta.z return lda.z pivot+1 @@ -11217,7 +11137,7 @@ bsearch16u: { // bsearch16u::@6 __b6: // if (result > 0) - // [234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 + // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 lda.z result+1 bmi __b7 bne !+ @@ -11226,7 +11146,7 @@ bsearch16u: { !: // bsearch16u::@9 // items = pivot+1 - // [235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 + // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 lda #1*SIZEOF_WORD clc adc.z pivot @@ -11235,21 +11155,21 @@ bsearch16u: { adc.z pivot+1 sta.z items+1 // num--; - // [236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx + // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex - // [237] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] - // [237] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy - // [237] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy + // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] + // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy + // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 __b7: // num >>= 1 - // [238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [221] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] - // [221] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy - // [221] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy + // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] + // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy + // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp __b3 } // sqr @@ -11260,9 +11180,9 @@ sqr: { .label return = $1e .label return_1 = $1c // return SQUARES[val]; - // [240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 + // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl - // [241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa + // [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta.z return @@ -11271,7 +11191,7 @@ sqr: { sta.z return+1 // sqr::@return // } - // [242] return + // [241] return rts } // init_squares @@ -11281,40 +11201,40 @@ init_squares: { .label squares = $14 .label sqr = $1c // malloc(NUM_SQUARES*sizeof(word)) - // [244] call malloc - // [93] phi from init_squares to malloc [phi:init_squares->malloc] - // [93] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 + // [243] call malloc + // [92] phi from init_squares to malloc [phi:init_squares->malloc] + // [92] phi (word) malloc::size#7 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta.z malloc.size+1 - // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy + // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc // init_squares::@2 // malloc(NUM_SQUARES*sizeof(word)) - // [245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 + // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 // squares = SQUARES - // [246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 + // [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z squares lda.z SQUARES+1 sta.z squares+1 - // [247] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] - // [247] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 + // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] + // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy + // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 - // [247] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] - // [247] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy - // [247] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy - // [247] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy + // [246] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] + // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy + // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy + // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy // init_squares::@1 __b1: // *squares++ = sqr - // [248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 + // [247] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda.z sqr sta (squares),y @@ -11322,7 +11242,7 @@ init_squares: { lda.z sqr+1 sta (squares),y // *squares++ = sqr; - // [249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 + // [248] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc.z squares @@ -11331,15 +11251,15 @@ init_squares: { inc.z squares+1 !: // i*2 - // [250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 + // [249] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 - // [251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 + // [250] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 - // [252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa + // [251] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc.z sqr sta.z sqr @@ -11347,14 +11267,14 @@ init_squares: { inc.z sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) - // [253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx + // [252] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx - // [254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 + // [253] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne __b1 // init_squares::@return // } - // [255] return + // [254] return rts } // File Data diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym index b942ec232..73e0c5423 100644 --- a/src/test/ref/screen-show-spiral-buckets.sym +++ b/src/test/ref/screen-show-spiral-buckets.sym @@ -5,7 +5,6 @@ (label) @5 (label) @6 (label) @7 -(label) @8 (label) @begin (label) @end (const byte*) BORDERCOL = (byte*) 53280 @@ -19,10 +18,10 @@ (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i= (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0 -Adding number conversion cast (unumber) 0 in (word) atan2_16::angle#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0 Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2 Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0 @@ -1810,13 +1807,10 @@ Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (nu Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9 Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8 Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8 -Adding number conversion cast (unumber) $ffff in (word) main::min_dist_angle#0 ← (number) $ffff Adding number conversion cast (unumber) $3e8 in (bool~) main::$6 ← (byte*) main::fill#1 < (const byte*) SCREEN_FILL+(number) $3e8 Adding number conversion cast (unumber) $ffff in (bool~) main::$7 ← (word) main::min_dist_angle#3 == (number) $ffff Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c -Adding number conversion cast (unumber) 0 in (byte) init_angle_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2 @@ -1851,8 +1845,6 @@ Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_hea (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 ) (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#30 init_dist_screen::@3/(word*) SQUARES#31 ) (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 ) -Adding number conversion cast (unumber) 0 in (byte) init_dist_screen::x#0 ← (number) 0 -Adding number conversion cast (unumber) $27 in (byte) init_dist_screen::xb#0 ← (number) $27 Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13 Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2 Adding number conversion cast (unumber) init_dist_screen::$11 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (unumber)(number) 2 @@ -1879,23 +1871,15 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1 Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) -Inlining cast (byte) NUM_SQUARES#0 ← (unumber)(number) $ff Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 -Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0 Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1 -Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 -Inlining cast (word) main::min_dist_angle#0 ← (unumber)(number) $ffff -Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30 -Inlining cast (byte) init_dist_screen::x#0 ← (unumber)(number) 0 -Inlining cast (byte) init_dist_screen::xb#0 ← (unumber)(number) $27 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 40960 @@ -1906,15 +1890,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -1930,13 +1911,10 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 -Simplifying constant integer cast $ffff Simplifying constant integer cast $3e8 Simplifying constant integer cast *((byte*) main::dist#3) Simplifying constant integer cast *((byte*) main::angle#3) Simplifying constant integer cast $ffff -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -1953,8 +1931,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $18 Simplifying constant integer cast $18 Simplifying constant integer cast $18 -Simplifying constant integer cast 0 -Simplifying constant integer cast $27 Simplifying constant integer cast $13 Simplifying constant integer cast 2 Simplifying constant integer cast $27 @@ -1970,14 +1946,11 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) 0 @@ -1994,11 +1967,8 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (word) $8000 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (word) $ffff Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $ffff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -2013,8 +1983,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $27 @@ -2490,14 +2458,14 @@ Inlining constant with var siblings (const byte) init_dist_screen::xb#0 Inlining constant with var siblings (const byte*) heap_head#0 Constant inlined main::fill#0 = (const byte*) SCREEN_FILL Constant inlined malloc::size#2 = (word) $3e8 -Constant inlined init_squares::sqr#0 = (byte) 0 +Constant inlined init_squares::sqr#0 = (word) 0 Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3 Constant inlined init_angle_screen::xb#0 = (byte) $27 Constant inlined atan2_16::i#0 = (byte) 0 Constant inlined init_angle_screen::y#0 = (byte) 0 Constant inlined init_angle_screen::x#0 = (byte) 0 Constant inlined malloc::size#1 = (word) $3e8 -Constant inlined atan2_16::angle#0 = (byte) 0 +Constant inlined atan2_16::angle#0 = (word) 0 Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD Constant inlined init_dist_screen::y#0 = (byte) 0 @@ -2839,7 +2807,7 @@ atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [67] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 - [68] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) + [68] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 ) [68] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [68] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [68] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) @@ -3081,7 +3049,7 @@ init_squares::@2: scope:[init_squares] from init_squares init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 [181] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) [181] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) - [181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) + [181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(word) 0 ) [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 @@ -4112,7 +4080,7 @@ atan2_16: { __b6: // [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [68] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [68] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle_1 lda #>0 @@ -4909,7 +4877,7 @@ init_squares: { lda #0 sta.z i // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [181] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -6027,7 +5995,7 @@ atan2_16: { __b6: // [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: - // [68] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [68] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle lda #>0 @@ -6730,7 +6698,7 @@ init_squares: { // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [181] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 @@ -7036,7 +7004,7 @@ FINAL SYMBOL TABLE (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; iatan2_16::@10] - // [68] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 + // [68] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 lda #<0 sta.z angle sta.z angle+1 @@ -8548,7 +8516,7 @@ init_squares: { // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy - // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 + // [181] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 diff --git a/src/test/ref/screen-show-spiral.sym b/src/test/ref/screen-show-spiral.sym index 94cf2f508..eed1c44ba 100644 --- a/src/test/ref/screen-show-spiral.sym +++ b/src/test/ref/screen-show-spiral.sym @@ -7,7 +7,7 @@ (const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification -Alias (word) mul8u::mb#0 = (byte) mul8u::b#2 Alias (byte) mul8u::a#3 = (byte) mul8u::a#4 (byte) mul8u::a#7 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#4 (word) mul8u::return#1 @@ -3667,54 +3646,56 @@ Simplifying expression containing zero (byte**)initEntry::entry#10 in [279] *((b Simplifying expression containing zero printEntry::entry#10 in [419] (byte*~) printEntry::entryBufDisk1_$0 ← (byte*) printEntry::entry#10 + (byte) 0 Simplifying expression containing zero (byte**)printEntry::entry#10 in [426] (word) print_word::w#0 ← (word)*((byte**)(byte*) printEntry::entry#10 + (byte) 0) Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (byte**) initEntry::entryBufDisk1_return#0 and assignment [104] (byte**) initEntry::entryBufDisk1_return#0 ← (byte**)(byte*~) initEntry::entryBufDisk1_$0 -Eliminating unused variable (byte**) initEntry::entryBufEdit1_return#0 and assignment [108] (byte**) initEntry::entryBufEdit1_return#0 ← (byte**)(byte*~) initEntry::entryBufEdit1_$0 -Eliminating unused variable (word*) initEntry::entryTsLen1_return#0 and assignment [112] (word*) initEntry::entryTsLen1_return#0 ← (word*)(byte*~) initEntry::entryTsLen1_$0 -Eliminating unused variable (word**) initEntry::entryTsOrder1_return#0 and assignment [116] (word**) initEntry::entryTsOrder1_return#0 ← (word**)(byte*~) initEntry::entryTsOrder1_$0 -Eliminating unused variable (byte*) initEntry::entryTLastLink1_return#0 and assignment [119] (byte*) initEntry::entryTLastLink1_return#0 ← (byte*) initEntry::entry#10 + (byte) 8 -Eliminating unused variable (byte*) initEntry::entrySLastLink1_return#0 and assignment [122] (byte*) initEntry::entrySLastLink1_return#0 ← (byte*) initEntry::entry#10 + (byte) 9 -Eliminating unused variable (byte*) initEntry::entryBFlag1_return#0 and assignment [125] (byte*) initEntry::entryBFlag1_return#0 ← (byte*) initEntry::entry#10 + (byte) $a -Eliminating unused variable (byte*) initEntry::entryBError1_return#0 and assignment [128] (byte*) initEntry::entryBError1_return#0 ← (byte*) initEntry::entry#10 + (byte) $b -Eliminating unused variable (word*) initEntry::entryUCross1_return#0 and assignment [132] (word*) initEntry::entryUCross1_return#0 ← (word*)(byte*~) initEntry::entryUCross1_$0 -Eliminating unused variable (byte*) initEntry::entryBAddrLo1_return#0 and assignment [135] (byte*) initEntry::entryBAddrLo1_return#0 ← (byte*) initEntry::entry#10 + (byte) $e -Eliminating unused variable (byte*) initEntry::entryBAddrHi1_return#0 and assignment [138] (byte*) initEntry::entryBAddrHi1_return#0 ← (byte*) initEntry::entry#10 + (byte) $f -Eliminating unused variable (byte*) initEntry::entryTHi1_return#0 and assignment [141] (byte*) initEntry::entryTHi1_return#0 ← (byte*) initEntry::entry#10 + (byte) $10 -Eliminating unused variable (byte*) initEntry::entryTLo1_return#0 and assignment [144] (byte*) initEntry::entryTLo1_return#0 ← (byte*) initEntry::entry#10 + (byte) $11 -Eliminating unused variable (byte**) printEntry::entryBufDisk1_return#0 and assignment [151] (byte**) printEntry::entryBufDisk1_return#0 ← (byte**)(byte*~) printEntry::entryBufDisk1_$0 -Eliminating unused variable (byte**) printEntry::entryBufEdit1_return#0 and assignment [157] (byte**) printEntry::entryBufEdit1_return#0 ← (byte**)(byte*~) printEntry::entryBufEdit1_$0 -Eliminating unused variable (word*) printEntry::entryTsLen1_return#0 and assignment [163] (word*) printEntry::entryTsLen1_return#0 ← (word*)(byte*~) printEntry::entryTsLen1_$0 -Eliminating unused variable (word**) printEntry::entryTsOrder1_return#0 and assignment [169] (word**) printEntry::entryTsOrder1_return#0 ← (word**)(byte*~) printEntry::entryTsOrder1_$0 -Eliminating unused variable (byte*) printEntry::entryTLastLink1_return#0 and assignment [174] (byte*) printEntry::entryTLastLink1_return#0 ← (byte*) printEntry::entry#10 + (byte) 8 -Eliminating unused variable (byte*) printEntry::entrySLastLink1_return#0 and assignment [179] (byte*) printEntry::entrySLastLink1_return#0 ← (byte*) printEntry::entry#10 + (byte) 9 -Eliminating unused variable (byte*) printEntry::entryBFlag1_return#0 and assignment [184] (byte*) printEntry::entryBFlag1_return#0 ← (byte*) printEntry::entry#10 + (byte) $a -Eliminating unused variable (byte*) printEntry::entryBError1_return#0 and assignment [189] (byte*) printEntry::entryBError1_return#0 ← (byte*) printEntry::entry#10 + (byte) $b -Eliminating unused variable (word*) printEntry::entryUCross1_return#0 and assignment [195] (word*) printEntry::entryUCross1_return#0 ← (word*)(byte*~) printEntry::entryUCross1_$0 -Eliminating unused variable (byte*) printEntry::entryBAddrLo1_return#0 and assignment [200] (byte*) printEntry::entryBAddrLo1_return#0 ← (byte*) printEntry::entry#10 + (byte) $e -Eliminating unused variable (byte*) printEntry::entryBAddrHi1_return#0 and assignment [205] (byte*) printEntry::entryBAddrHi1_return#0 ← (byte*) printEntry::entry#10 + (byte) $f -Eliminating unused variable (byte*) printEntry::entryTHi1_return#0 and assignment [210] (byte*) printEntry::entryTHi1_return#0 ← (byte*) printEntry::entry#10 + (byte) $10 -Eliminating unused variable (byte*) printEntry::entryTLo1_return#0 and assignment [215] (byte*) printEntry::entryTLo1_return#0 ← (byte*) printEntry::entry#10 + (byte) $11 +Eliminating unused variable (byte**) initEntry::entryBufDisk1_return#0 and assignment [105] (byte**) initEntry::entryBufDisk1_return#0 ← (byte**)(byte*~) initEntry::entryBufDisk1_$0 +Eliminating unused variable (byte**) initEntry::entryBufEdit1_return#0 and assignment [109] (byte**) initEntry::entryBufEdit1_return#0 ← (byte**)(byte*~) initEntry::entryBufEdit1_$0 +Eliminating unused variable (word*) initEntry::entryTsLen1_return#0 and assignment [113] (word*) initEntry::entryTsLen1_return#0 ← (word*)(byte*~) initEntry::entryTsLen1_$0 +Eliminating unused variable (word**) initEntry::entryTsOrder1_return#0 and assignment [117] (word**) initEntry::entryTsOrder1_return#0 ← (word**)(byte*~) initEntry::entryTsOrder1_$0 +Eliminating unused variable (byte*) initEntry::entryTLastLink1_return#0 and assignment [120] (byte*) initEntry::entryTLastLink1_return#0 ← (byte*) initEntry::entry#10 + (byte) 8 +Eliminating unused variable (byte*) initEntry::entrySLastLink1_return#0 and assignment [123] (byte*) initEntry::entrySLastLink1_return#0 ← (byte*) initEntry::entry#10 + (byte) 9 +Eliminating unused variable (byte*) initEntry::entryBFlag1_return#0 and assignment [126] (byte*) initEntry::entryBFlag1_return#0 ← (byte*) initEntry::entry#10 + (byte) $a +Eliminating unused variable (byte*) initEntry::entryBError1_return#0 and assignment [129] (byte*) initEntry::entryBError1_return#0 ← (byte*) initEntry::entry#10 + (byte) $b +Eliminating unused variable (word*) initEntry::entryUCross1_return#0 and assignment [133] (word*) initEntry::entryUCross1_return#0 ← (word*)(byte*~) initEntry::entryUCross1_$0 +Eliminating unused variable (byte*) initEntry::entryBAddrLo1_return#0 and assignment [136] (byte*) initEntry::entryBAddrLo1_return#0 ← (byte*) initEntry::entry#10 + (byte) $e +Eliminating unused variable (byte*) initEntry::entryBAddrHi1_return#0 and assignment [139] (byte*) initEntry::entryBAddrHi1_return#0 ← (byte*) initEntry::entry#10 + (byte) $f +Eliminating unused variable (byte*) initEntry::entryTHi1_return#0 and assignment [142] (byte*) initEntry::entryTHi1_return#0 ← (byte*) initEntry::entry#10 + (byte) $10 +Eliminating unused variable (byte*) initEntry::entryTLo1_return#0 and assignment [145] (byte*) initEntry::entryTLo1_return#0 ← (byte*) initEntry::entry#10 + (byte) $11 +Eliminating unused variable (byte**) printEntry::entryBufDisk1_return#0 and assignment [152] (byte**) printEntry::entryBufDisk1_return#0 ← (byte**)(byte*~) printEntry::entryBufDisk1_$0 +Eliminating unused variable (byte**) printEntry::entryBufEdit1_return#0 and assignment [158] (byte**) printEntry::entryBufEdit1_return#0 ← (byte**)(byte*~) printEntry::entryBufEdit1_$0 +Eliminating unused variable (word*) printEntry::entryTsLen1_return#0 and assignment [164] (word*) printEntry::entryTsLen1_return#0 ← (word*)(byte*~) printEntry::entryTsLen1_$0 +Eliminating unused variable (word**) printEntry::entryTsOrder1_return#0 and assignment [170] (word**) printEntry::entryTsOrder1_return#0 ← (word**)(byte*~) printEntry::entryTsOrder1_$0 +Eliminating unused variable (byte*) printEntry::entryTLastLink1_return#0 and assignment [175] (byte*) printEntry::entryTLastLink1_return#0 ← (byte*) printEntry::entry#10 + (byte) 8 +Eliminating unused variable (byte*) printEntry::entrySLastLink1_return#0 and assignment [180] (byte*) printEntry::entrySLastLink1_return#0 ← (byte*) printEntry::entry#10 + (byte) 9 +Eliminating unused variable (byte*) printEntry::entryBFlag1_return#0 and assignment [185] (byte*) printEntry::entryBFlag1_return#0 ← (byte*) printEntry::entry#10 + (byte) $a +Eliminating unused variable (byte*) printEntry::entryBError1_return#0 and assignment [190] (byte*) printEntry::entryBError1_return#0 ← (byte*) printEntry::entry#10 + (byte) $b +Eliminating unused variable (word*) printEntry::entryUCross1_return#0 and assignment [196] (word*) printEntry::entryUCross1_return#0 ← (word*)(byte*~) printEntry::entryUCross1_$0 +Eliminating unused variable (byte*) printEntry::entryBAddrLo1_return#0 and assignment [201] (byte*) printEntry::entryBAddrLo1_return#0 ← (byte*) printEntry::entry#10 + (byte) $e +Eliminating unused variable (byte*) printEntry::entryBAddrHi1_return#0 and assignment [206] (byte*) printEntry::entryBAddrHi1_return#0 ← (byte*) printEntry::entry#10 + (byte) $f +Eliminating unused variable (byte*) printEntry::entryTHi1_return#0 and assignment [211] (byte*) printEntry::entryTHi1_return#0 ← (byte*) printEntry::entry#10 + (byte) $10 +Eliminating unused variable (byte*) printEntry::entryTLo1_return#0 and assignment [216] (byte*) printEntry::entryTLo1_return#0 ← (byte*) printEntry::entry#10 + (byte) $11 Eliminating unused constant (const void*) memset::return#2 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable (byte*~) initEntry::entryBufDisk1_$0 and assignment [103] (byte*~) initEntry::entryBufDisk1_$0 ← (byte*) initEntry::entry#10 -Eliminating unused variable (byte*~) initEntry::entryBufEdit1_$0 and assignment [106] (byte*~) initEntry::entryBufEdit1_$0 ← (byte*) initEntry::entry#10 + (byte) 2 -Eliminating unused variable (byte*~) initEntry::entryTsLen1_$0 and assignment [109] (byte*~) initEntry::entryTsLen1_$0 ← (byte*) initEntry::entry#10 + (byte) 4 -Eliminating unused variable (byte*~) initEntry::entryTsOrder1_$0 and assignment [112] (byte*~) initEntry::entryTsOrder1_$0 ← (byte*) initEntry::entry#10 + (byte) 6 -Eliminating unused variable (byte*~) initEntry::entryUCross1_$0 and assignment [123] (byte*~) initEntry::entryUCross1_$0 ← (byte*) initEntry::entry#10 + (byte) $c -Eliminating unused variable (byte*~) printEntry::entryBufDisk1_$0 and assignment [137] (byte*~) printEntry::entryBufDisk1_$0 ← (byte*) printEntry::entry#10 -Eliminating unused variable (byte*~) printEntry::entryBufEdit1_$0 and assignment [142] (byte*~) printEntry::entryBufEdit1_$0 ← (byte*) printEntry::entry#10 + (byte) 2 -Eliminating unused variable (byte*~) printEntry::entryTsLen1_$0 and assignment [147] (byte*~) printEntry::entryTsLen1_$0 ← (byte*) printEntry::entry#10 + (byte) 4 -Eliminating unused variable (byte*~) printEntry::entryTsOrder1_$0 and assignment [152] (byte*~) printEntry::entryTsOrder1_$0 ← (byte*) printEntry::entry#10 + (byte) 6 -Eliminating unused variable (byte*~) printEntry::entryUCross1_$0 and assignment [173] (byte*~) printEntry::entryUCross1_$0 ← (byte*) printEntry::entry#10 + (byte) $c +Eliminating unused variable (byte*~) initEntry::entryBufDisk1_$0 and assignment [104] (byte*~) initEntry::entryBufDisk1_$0 ← (byte*) initEntry::entry#10 +Eliminating unused variable (byte*~) initEntry::entryBufEdit1_$0 and assignment [107] (byte*~) initEntry::entryBufEdit1_$0 ← (byte*) initEntry::entry#10 + (byte) 2 +Eliminating unused variable (byte*~) initEntry::entryTsLen1_$0 and assignment [110] (byte*~) initEntry::entryTsLen1_$0 ← (byte*) initEntry::entry#10 + (byte) 4 +Eliminating unused variable (byte*~) initEntry::entryTsOrder1_$0 and assignment [113] (byte*~) initEntry::entryTsOrder1_$0 ← (byte*) initEntry::entry#10 + (byte) 6 +Eliminating unused variable (byte*~) initEntry::entryUCross1_$0 and assignment [124] (byte*~) initEntry::entryUCross1_$0 ← (byte*) initEntry::entry#10 + (byte) $c +Eliminating unused variable (byte*~) printEntry::entryBufDisk1_$0 and assignment [138] (byte*~) printEntry::entryBufDisk1_$0 ← (byte*) printEntry::entry#10 +Eliminating unused variable (byte*~) printEntry::entryBufEdit1_$0 and assignment [143] (byte*~) printEntry::entryBufEdit1_$0 ← (byte*) printEntry::entry#10 + (byte) 2 +Eliminating unused variable (byte*~) printEntry::entryTsLen1_$0 and assignment [148] (byte*~) printEntry::entryTsLen1_$0 ← (byte*) printEntry::entry#10 + (byte) 4 +Eliminating unused variable (byte*~) printEntry::entryTsOrder1_$0 and assignment [153] (byte*~) printEntry::entryTsOrder1_$0 ← (byte*) printEntry::entry#10 + (byte) 6 +Eliminating unused variable (byte*~) printEntry::entryUCross1_$0 and assignment [174] (byte*~) printEntry::entryUCross1_$0 ← (byte*) printEntry::entry#10 + (byte) $c Successful SSA optimization PassNEliminateUnusedVars -Constant right-side identified [10] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Constant right-side identified [11] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [131] (word) print_word::w#0 ← (word)*((byte**)(byte*) printEntry::entry#10) keeping *((byte**)printEntry::entry#10) -Inlining Noop Cast [135] (word) print_word::w#1 ← (word)*((byte**)(byte*) printEntry::entry#10 + (byte) 2) keeping *((byte**)printEntry::entry#10 + 2) -Inlining Noop Cast [143] (word) print_word::w#3 ← (word)*((word**)(byte*) printEntry::entry#10 + (byte) 6) keeping *((word**)printEntry::entry#10 + 6) +Inlining Noop Cast [132] (word) print_word::w#0 ← (word)*((byte**)(byte*) printEntry::entry#10) keeping *((byte**)printEntry::entry#10) +Inlining Noop Cast [136] (word) print_word::w#1 ← (word)*((byte**)(byte*) printEntry::entry#10 + (byte) 2) keeping *((byte**)printEntry::entry#10 + 2) +Inlining Noop Cast [144] (word) print_word::w#3 ← (word)*((word**)(byte*) printEntry::entry#10 + (byte) 6) keeping *((word**)printEntry::entry#10 + 6) Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const word) mul8u::res#0 +Inlining constant with var siblings (const byte) mul8u::b#0 +Inlining constant with var siblings (const byte) mul8u::b#1 Inlining constant with var siblings (const byte) mul8u::a#1 Inlining constant with var siblings (const byte) mul8u::a#2 Inlining constant with var siblings (const byte*) memset::dst#0 @@ -3756,7 +3737,7 @@ Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_SPACE Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_SPACE Constant inlined print_line_cursor#0 = (byte*) 1024 Constant inlined print_str::str#9 = (const string) printEntry::str4 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined mul8u::b#1 = (const byte) SIZEOF_ENTRY Constant inlined mul8u::a#2 = (const byte) main::fileEntry2_idx#0 Constant inlined mul8u::b#0 = (const byte) SIZEOF_ENTRY @@ -3771,17 +3752,21 @@ Constant inlined print_str::str#7 = (const string) printEntry::str2 Constant inlined print_str::str#6 = (const string) printEntry::str1 Constant inlined print_str::str#5 = (const string) printEntry::str Successful SSA optimization Pass2ConstantInlining -Identical Phi Values (word) mul8u::mb#0 (const byte) SIZEOF_ENTRY +Identical Phi Values (byte) mul8u::b#2 (const byte) SIZEOF_ENTRY Identical Phi Values (byte) keyboard_key_pressed::key#2 (const byte) KEY_SPACE Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [54] (byte) keyboard_key_pressed::colidx#0 ← (const byte) KEY_SPACE & (byte) 7 -Constant right-side identified [55] (byte) keyboard_key_pressed::rowidx#0 ← (const byte) KEY_SPACE >> (byte) 3 +Constant right-side identified [1] (word) mul8u::mb#0 ← (word)(const byte) SIZEOF_ENTRY +Constant right-side identified [55] (byte) keyboard_key_pressed::colidx#0 ← (const byte) KEY_SPACE & (byte) 7 +Constant right-side identified [56] (byte) keyboard_key_pressed::rowidx#0 ← (const byte) KEY_SPACE >> (byte) 3 Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const word) mul8u::mb#0 = (word)SIZEOF_ENTRY Constant (const byte) keyboard_key_pressed::colidx#0 = KEY_SPACE&7 Constant (const byte) keyboard_key_pressed::rowidx#0 = KEY_SPACE>>3 Successful SSA optimization Pass2ConstantIdentification Constant (const byte) keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const word) mul8u::mb#0 +Constant inlined mul8u::mb#0 = (word)(const byte) SIZEOF_ENTRY Constant inlined keyboard_matrix_read::rowid#0 = (const byte) keyboard_key_pressed::rowidx#0 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(keyboard_matrix_row_bitmask+keyboard_key_pressed::rowidx#0) @@ -4708,8 +4693,8 @@ mul8u: scope:[mul8u] from main::fileEntry1 main::fileEntry2 [248] (byte) mul8u::a#6 ← phi( main::fileEntry1/(const byte) main::fileEntry1_idx#0 main::fileEntry2/(const byte) main::fileEntry2_idx#0 ) to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [249] (word) mul8u::mb#2 ← phi( mul8u/(const byte) SIZEOF_ENTRY mul8u::@3/(word) mul8u::mb#1 ) - [249] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [249] (word) mul8u::mb#2 ← phi( mul8u/(word)(const byte) SIZEOF_ENTRY mul8u::@3/(word) mul8u::mb#1 ) + [249] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [249] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) [250] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -6825,12 +6810,12 @@ mul8u: { .label return_1 = $1e // [249] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [249] phi (word) mul8u::mb#2 = (const byte) SIZEOF_ENTRY [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [249] phi (word) mul8u::mb#2 = (word)(const byte) SIZEOF_ENTRY [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #SIZEOF_ENTRY sta.z mb+1 - // [249] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [249] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -8894,12 +8879,12 @@ mul8u: { .label return = 6 // [249] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [249] phi (word) mul8u::mb#2 = (const byte) SIZEOF_ENTRY [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [249] phi (word) mul8u::mb#2 = (word)(const byte) SIZEOF_ENTRY [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #SIZEOF_ENTRY sta.z mb+1 - // [249] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [249] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -9374,13 +9359,13 @@ FINAL SYMBOL TABLE (const byte*) CIA1_PORT_A_DDR = (byte*) 56322 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const byte) KEY_SPACE = (number) $3c -(const byte) MAX_FILES = (number) $90 +(const byte) KEY_SPACE = (byte) $3c +(const byte) MAX_FILES = (byte) $90 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) SIZEOF_ENTRY = (number) $12 +(const byte) SIZEOF_ENTRY = (byte) $12 (const byte*) files[(word)(const byte) MAX_FILES*(const byte) SIZEOF_ENTRY] = { fill( (word)MAX_FILES*SIZEOF_ENTRY, 0) } (void()) initEntry((byte*) initEntry::entry , (byte) initEntry::n) (word~) initEntry::$1 zp[2]:8 2.0 @@ -11218,12 +11203,12 @@ mul8u: { .label res = 6 .label return = 6 // [249] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [249] phi (word) mul8u::mb#2 = (const byte) SIZEOF_ENTRY [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuc1 + // [249] phi (word) mul8u::mb#2 = (word)(const byte) SIZEOF_ENTRY [phi:mul8u->mul8u::@1#0] -- vwuz1=vwuc1 lda #SIZEOF_ENTRY sta.z mb+1 - // [249] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [249] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res sta.z res+1 diff --git a/src/test/ref/semi-struct-2.sym b/src/test/ref/semi-struct-2.sym index 9b719c73a..cd14e562c 100644 --- a/src/test/ref/semi-struct-2.sym +++ b/src/test/ref/semi-struct-2.sym @@ -5,13 +5,13 @@ (const byte*) CIA1_PORT_A_DDR = (byte*) 56322 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const byte) KEY_SPACE = (number) $3c -(const byte) MAX_FILES = (number) $90 +(const byte) KEY_SPACE = (byte) $3c +(const byte) MAX_FILES = (byte) $90 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) SIZEOF_ENTRY = (number) $12 +(const byte) SIZEOF_ENTRY = (byte) $12 (const byte*) files[(word)(const byte) MAX_FILES*(const byte) SIZEOF_ENTRY] = { fill( (word)MAX_FILES*SIZEOF_ENTRY, 0) } (void()) initEntry((byte*) initEntry::entry , (byte) initEntry::n) (word~) initEntry::$1 zp[2]:8 2.0 diff --git a/src/test/ref/sequence-locality-0.log b/src/test/ref/sequence-locality-0.log index 2e9296c93..d6b8e8e68 100644 --- a/src/test/ref/sequence-locality-0.log +++ b/src/test/ref/sequence-locality-0.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -77,19 +77,14 @@ SYMBOL TABLE SSA (byte) main::idx#6 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$0 ← (byte) main::i#2 > (number) 5 Adding number conversion cast (unumber) 5 in (number~) main::$1 ← (byte) main::i#4 - (number) 5 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::i#4 - (unumber)(number) 5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 5 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/sequence-locality-1.log b/src/test/ref/sequence-locality-1.log index f6f43aede..59663c174 100644 --- a/src/test/ref/sequence-locality-1.log +++ b/src/test/ref/sequence-locality-1.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 @@ -75,16 +75,11 @@ SYMBOL TABLE SSA (byte) main::j#3 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$0 ← (byte) main::i#2 > (number) 5 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [5] (bool~) main::$1 ← (byte) main::i#2 <= (byte) 5 from [4] (bool~) main::$0 ← (byte) main::i#2 > (byte) 5 diff --git a/src/test/ref/sieve-min.cfg b/src/test/ref/sieve-min.cfg index 988f55432..3d55d3e8b 100644 --- a/src/test/ref/sieve-min.cfg +++ b/src/test/ref/sieve-min.cfg @@ -14,8 +14,8 @@ main: scope:[main] from @1 [5] call memset to:main::@1 main::@1: scope:[main] from main main::@3 - [6] (byte*) main::sieve_i#2 ← phi( main/(const byte*) sieve+(byte) 2 main::@3/(byte*) main::sieve_i#1 ) - [6] (word) main::i#12 ← phi( main/(byte) 2 main::@3/(word) main::i#2 ) + [6] (byte*) main::sieve_i#2 ← phi( main/(const byte*) sieve+(word) 2 main::@3/(byte*) main::sieve_i#1 ) + [6] (word) main::i#12 ← phi( main/(word) 2 main::@3/(word) main::i#2 ) [7] if((word) main::i#12<(const byte) SQRT_COUNT) goto main::@2 to:main::@7 main::@7: scope:[main] from main::@1 main::@9 diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index b70e0c9e7..ca255ef1b 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -215,7 +215,7 @@ main: scope:[main] from @52 to:main::@29 main::@29: scope:[main] from main (byte*) print_char_cursor#36 ← phi( main/(byte*) print_char_cursor#38 ) - (word) main::i#0 ← (number) 2 + (word) main::i#0 ← (word) 2 (byte*~) main::$1 ← & *((const byte*) sieve + (word) main::i#0) (byte*) main::sieve_i#0 ← (byte*~) main::$1 to:main::@1 @@ -340,13 +340,13 @@ SYMBOL TABLE SSA (label) @53 (label) @begin (label) @end -(const word) COUNT = (number) $4000 +(const word) COUNT = (word) $4000 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN = (byte*)(number) $400 -(const byte) SQRT_COUNT = (number) $80 +(const byte) SQRT_COUNT = (byte) $80 (void()) main() (byte*~) main::$1 (bool~) main::$10 @@ -539,7 +539,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) 0 in (byte) memset::c#0 ← (number) 0 -Adding number conversion cast (unumber) 2 in (word) main::i#0 ← (number) 2 Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← (number) 0 != *((byte*) main::sieve_i#2) Adding number conversion cast (unumber) 2 in (word) main::i#1 ← (number) 2 Adding number conversion cast (unumber) 2 in (number~) main::$5 ← (word) main::i#6 * (number) 2 @@ -552,7 +551,6 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (byte) memset::c#0 ← (unumber)(number) 0 -Inlining cast (word) main::i#0 ← (unumber)(number) 2 Inlining cast (word) main::i#1 ← (unumber)(number) 2 Inlining cast *((byte*) main::s#2) ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast @@ -563,7 +561,6 @@ Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 0 -Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 2 @@ -576,7 +573,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2 @@ -712,11 +708,11 @@ Inlining constant with var siblings (const byte*) print_char_cursor#0 Constant inlined print_char::ch#2 = (byte) ' ' Constant inlined print_char_cursor#0 = (byte*) 1024 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined main::i#0 = (byte) 2 +Constant inlined main::i#0 = (word) 2 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined memset::num#0 = (const word) COUNT Constant inlined main::i#1 = (byte) 2 -Constant inlined main::sieve_i#0 = (const byte*) sieve+(byte) 2 +Constant inlined main::sieve_i#0 = (const byte*) sieve+(word) 2 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@32(between main::@16 and main::@18) Adding NOP phi() at start of @begin @@ -809,8 +805,8 @@ main: scope:[main] from @1 [5] call memset to:main::@1 main::@1: scope:[main] from main main::@3 - [6] (byte*) main::sieve_i#2 ← phi( main/(const byte*) sieve+(byte) 2 main::@3/(byte*) main::sieve_i#1 ) - [6] (word) main::i#12 ← phi( main/(byte) 2 main::@3/(word) main::i#2 ) + [6] (byte*) main::sieve_i#2 ← phi( main/(const byte*) sieve+(word) 2 main::@3/(byte*) main::sieve_i#1 ) + [6] (word) main::i#12 ← phi( main/(word) 2 main::@3/(word) main::i#2 ) [7] if((word) main::i#12<(const byte) SQRT_COUNT) goto main::@2 to:main::@7 main::@7: scope:[main] from main::@1 main::@9 @@ -1056,12 +1052,12 @@ main: { jsr memset // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(byte) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(word) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 lda #sieve+2 sta.z sieve_i+1 - // [6] phi (word) main::i#12 = (byte) 2 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [6] phi (word) main::i#12 = (word) 2 [phi:main->main::@1#1] -- vwuz1=vwuc1 lda #<2 sta.z i lda #>2 @@ -1519,12 +1515,12 @@ main: { jsr memset // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(byte) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(word) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 lda #sieve+2 sta.z sieve_i+1 - // [6] phi (word) main::i#12 = (byte) 2 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [6] phi (word) main::i#12 = (word) 2 [phi:main->main::@1#1] -- vwuz1=vwuc1 lda #<2 sta.z i lda #>2 @@ -1908,13 +1904,13 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const word) COUNT = (number) $4000 +(const word) COUNT = (word) $4000 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN = (byte*) 1024 -(const byte) SQRT_COUNT = (number) $80 +(const byte) SQRT_COUNT = (byte) $80 (void()) main() (byte*~) main::$16 zp[2]:12 22.0 (label) main::@1 @@ -2039,12 +2035,12 @@ main: { // [46] phi from main to memset [phi:main->memset] jsr memset // [6] phi from main to main::@1 [phi:main->main::@1] - // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(byte) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 + // [6] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(word) 2 [phi:main->main::@1#0] -- pbuz1=pbuc1 lda #sieve+2 sta.z sieve_i+1 - // [6] phi (word) main::i#12 = (byte) 2 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [6] phi (word) main::i#12 = (word) 2 [phi:main->main::@1#1] -- vwuz1=vwuc1 lda #<2 sta.z i lda #>2 diff --git a/src/test/ref/sieve-min.sym b/src/test/ref/sieve-min.sym index b42261ab8..940bf2954 100644 --- a/src/test/ref/sieve-min.sym +++ b/src/test/ref/sieve-min.sym @@ -1,13 +1,13 @@ (label) @1 (label) @begin (label) @end -(const word) COUNT = (number) $4000 +(const word) COUNT = (word) $4000 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte*) SCREEN = (byte*) 1024 -(const byte) SQRT_COUNT = (number) $80 +(const byte) SQRT_COUNT = (byte) $80 (void()) main() (byte*~) main::$16 zp[2]:12 22.0 (label) main::@1 diff --git a/src/test/ref/sieve.cfg b/src/test/ref/sieve.cfg index 0ee720509..068591004 100644 --- a/src/test/ref/sieve.cfg +++ b/src/test/ref/sieve.cfg @@ -48,8 +48,8 @@ main::@21: scope:[main] from main::@20 [21] call clock_start to:main::@1 main::@1: scope:[main] from main::@21 main::@4 - [22] (byte*) main::sieve_i#2 ← phi( main::@21/(const byte*) sieve+(byte) 2 main::@4/(byte*) main::sieve_i#1 ) - [22] (word) main::i#12 ← phi( main::@21/(byte) 2 main::@4/(word) main::i#2 ) + [22] (byte*) main::sieve_i#2 ← phi( main::@21/(const byte*) sieve+(word) 2 main::@4/(byte*) main::sieve_i#1 ) + [22] (word) main::i#12 ← phi( main::@21/(word) 2 main::@4/(word) main::i#2 ) [23] if((word) main::i#12<(const byte) SQRT_COUNT) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 @@ -366,7 +366,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [162] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [162] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [162] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [162] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [162] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index 1b3b1c682..20740f9ac 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -194,7 +194,7 @@ clock_start::@return: scope:[clock_start] from clock_start return to:@return @13: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@27 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -202,7 +202,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -310,7 +310,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#11 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -394,8 +394,8 @@ utoa::@8: scope:[utoa] from utoa::@1 utoa::@2 utoa::@3 utoa::@4 (word) utoa::value#7 ← phi( utoa::@1/(word) utoa::value#8 utoa::@2/(word) utoa::value#9 utoa::@3/(word) utoa::value#10 utoa::@4/(word) utoa::value#11 ) (word*) utoa::digit_values#8 ← phi( utoa::@1/(word*) utoa::digit_values#1 utoa::@2/(word*) utoa::digit_values#2 utoa::@3/(word*) utoa::digit_values#3 utoa::@4/(word*) utoa::digit_values#4 ) (byte) utoa::max_digits#7 ← phi( utoa::@1/(byte) utoa::max_digits#1 utoa::@2/(byte) utoa::max_digits#2 utoa::@3/(byte) utoa::max_digits#3 utoa::@4/(byte) utoa::max_digits#4 ) - (byte) utoa::started#0 ← (number) 0 - (byte) utoa::digit#0 ← (number) 0 + (byte) utoa::started#0 ← (byte) 0 + (byte) utoa::digit#0 ← (byte) 0 to:utoa::@18 utoa::@18: scope:[utoa] from utoa::@21 utoa::@8 (byte*) utoa::buffer#11 ← phi( utoa::@21/(byte*) utoa::buffer#14 utoa::@8/(byte*) utoa::buffer#15 ) @@ -469,7 +469,7 @@ utoa_append: scope:[utoa_append] from utoa::@24 (byte*) utoa_append::buffer#3 ← phi( utoa::@24/(byte*) utoa_append::buffer#0 ) (word) utoa_append::sub#3 ← phi( utoa::@24/(word) utoa_append::sub#0 ) (word) utoa_append::value#5 ← phi( utoa::@24/(word) utoa_append::value#0 ) - (byte) utoa_append::digit#0 ← (number) 0 + (byte) utoa_append::digit#0 ← (byte) 0 to:utoa_append::@1 utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 (byte*) utoa_append::buffer#2 ← phi( utoa_append/(byte*) utoa_append::buffer#3 utoa_append::@2/(byte*) utoa_append::buffer#4 ) @@ -573,8 +573,8 @@ ultoa::@8: scope:[ultoa] from ultoa::@1 ultoa::@2 ultoa::@3 ultoa::@4 (dword) ultoa::value#7 ← phi( ultoa::@1/(dword) ultoa::value#8 ultoa::@2/(dword) ultoa::value#9 ultoa::@3/(dword) ultoa::value#10 ultoa::@4/(dword) ultoa::value#11 ) (dword*) ultoa::digit_values#8 ← phi( ultoa::@1/(dword*) ultoa::digit_values#1 ultoa::@2/(dword*) ultoa::digit_values#2 ultoa::@3/(dword*) ultoa::digit_values#3 ultoa::@4/(dword*) ultoa::digit_values#4 ) (byte) ultoa::max_digits#7 ← phi( ultoa::@1/(byte) ultoa::max_digits#1 ultoa::@2/(byte) ultoa::max_digits#2 ultoa::@3/(byte) ultoa::max_digits#3 ultoa::@4/(byte) ultoa::max_digits#4 ) - (byte) ultoa::started#0 ← (number) 0 - (byte) ultoa::digit#0 ← (number) 0 + (byte) ultoa::started#0 ← (byte) 0 + (byte) ultoa::digit#0 ← (byte) 0 to:ultoa::@18 ultoa::@18: scope:[ultoa] from ultoa::@21 ultoa::@8 (byte*) ultoa::buffer#11 ← phi( ultoa::@21/(byte*) ultoa::buffer#14 ultoa::@8/(byte*) ultoa::buffer#15 ) @@ -648,7 +648,7 @@ ultoa_append: scope:[ultoa_append] from ultoa::@24 (byte*) ultoa_append::buffer#3 ← phi( ultoa::@24/(byte*) ultoa_append::buffer#0 ) (dword) ultoa_append::sub#3 ← phi( ultoa::@24/(dword) ultoa_append::sub#0 ) (dword) ultoa_append::value#5 ← phi( ultoa::@24/(dword) ultoa_append::value#0 ) - (byte) ultoa_append::digit#0 ← (number) 0 + (byte) ultoa_append::digit#0 ← (byte) 0 to:ultoa_append::@1 ultoa_append::@1: scope:[ultoa_append] from ultoa_append ultoa_append::@2 (byte*) ultoa_append::buffer#2 ← phi( ultoa_append/(byte*) ultoa_append::buffer#3 ultoa_append::@2/(byte*) ultoa_append::buffer#4 ) @@ -924,7 +924,7 @@ main::@37: scope:[main] from main::@36 (byte*) print_line_cursor#48 ← phi( main::@36/(byte*) print_line_cursor#50 ) (byte*) print_char_cursor#79 ← phi( main::@36/(byte*) print_char_cursor#81 ) (word) rem16u#26 ← phi( main::@36/(word) rem16u#29 ) - (word) main::i#0 ← (number) 2 + (word) main::i#0 ← (word) 2 (byte*~) main::$9 ← & *((const byte*) sieve + (word) main::i#0) (byte*) main::sieve_i#0 ← (byte*~) main::$9 to:main::@1 @@ -1178,37 +1178,37 @@ SYMBOL TABLE SSA (const dword*) CIA2_TIMER_AB = (dword*)(number) $dd04 (const byte*) CIA2_TIMER_A_CONTROL = (byte*)(number) $dd0e (const byte*) CIA2_TIMER_B_CONTROL = (byte*)(number) $dd0f -(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (number) 0 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (number) 0 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const byte) CIA_TIMER_CONTROL_STOP = (number) 0 -(const word) CLOCKS_PER_FRAME = (number) $4cc8 -(const dword) CLOCKS_PER_INIT = (number) $12 -(const dword) CLOCKS_PER_SEC = (const word) CLOCKS_PER_FRAME*(const byte) FRAMES_PER_SEC -(const word) COUNT = (number) $4000 +(const byte) CIA_TIMER_CONTROL_A_COUNT_CYCLES = (byte) 0 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_CONTINUOUS = (byte) 0 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const byte) CIA_TIMER_CONTROL_STOP = (byte) 0 +(const word) CLOCKS_PER_FRAME = (word) $4cc8 +(const dword) CLOCKS_PER_INIT = (dword) $12 +(const dword) CLOCKS_PER_SEC = (dword)(const word) CLOCKS_PER_FRAME*(const byte) FRAMES_PER_SEC +(const word) COUNT = (word) $4000 (const byte*) D018 = (byte*)(number) $d018 (const byte) DECIMAL = (number) $a (const byte*) DIGITS[] = (string) "0123456789abcdef"z -(const byte) FRAMES_PER_SEC = (number) $3c +(const byte) FRAMES_PER_SEC = (byte) $3c (const byte) HEXADECIMAL = (number) $10 (const byte) OCTAL = (number) 8 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const word*) RADIX_BINARY_VALUES[] = { (word)(number) $8000, (word)(number) $4000, (word)(number) $2000, (word)(number) $1000, (word)(number) $800, (word)(number) $400, (word)(number) $200, (word)(number) $100, (word)(number) $80, (word)(number) $40, (word)(number) $20, (word)(number) $10, (word)(number) 8, (word)(number) 4, (word)(number) 2 } -(const dword*) RADIX_BINARY_VALUES_LONG[] = { (dword)(number) $80000000, (dword)(number) $40000000, (dword)(number) $20000000, (dword)(number) $10000000, (dword)(number) $8000000, (dword)(number) $4000000, (dword)(number) $2000000, (dword)(number) $1000000, (dword)(number) $800000, (dword)(number) $400000, (dword)(number) $200000, (dword)(number) $100000, (dword)(number) $80000, (dword)(number) $40000, (dword)(number) $20000, (dword)(number) $10000, (dword)(number) $8000, (dword)(number) $4000, (dword)(number) $2000, (dword)(number) $1000, (dword)(number) $800, (dword)(number) $400, (dword)(number) $200, (dword)(number) $100, (dword)(number) $80, (dword)(number) $40, (dword)(number) $20, (dword)(number) $10, (dword)(number) 8, (dword)(number) 4, (dword)(number) 2 } -(const word*) RADIX_DECIMAL_VALUES[] = { (word)(number) $2710, (word)(number) $3e8, (word)(number) $64, (word)(number) $a } -(const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword)(number) $3b9aca00, (dword)(number) $5f5e100, (dword)(number) $989680, (dword)(number) $f4240, (dword)(number) $186a0, (dword)(number) $2710, (dword)(number) $3e8, (dword)(number) $64, (dword)(number) $a } -(const word*) RADIX_HEXADECIMAL_VALUES[] = { (word)(number) $1000, (word)(number) $100, (word)(number) $10 } -(const dword*) RADIX_HEXADECIMAL_VALUES_LONG[] = { (dword)(number) $10000000, (dword)(number) $1000000, (dword)(number) $100000, (dword)(number) $10000, (dword)(number) $1000, (dword)(number) $100, (dword)(number) $10 } -(const word*) RADIX_OCTAL_VALUES[] = { (word)(number) $8000, (word)(number) $1000, (word)(number) $200, (word)(number) $40, (word)(number) 8 } -(const dword*) RADIX_OCTAL_VALUES_LONG[] = { (dword)(number) $40000000, (dword)(number) $8000000, (dword)(number) $1000000, (dword)(number) $200000, (dword)(number) $40000, (dword)(number) $8000, (dword)(number) $1000, (dword)(number) $200, (dword)(number) $40, (dword)(number) 8 } +(const word*) RADIX_BINARY_VALUES[] = { (word) $8000, (word) $4000, (word) $2000, (word) $1000, (word) $800, (word) $400, (word) $200, (word) $100, (word) $80, (word) $40, (word) $20, (word) $10, (word) 8, (word) 4, (word) 2 } +(const dword*) RADIX_BINARY_VALUES_LONG[] = { (dword) $80000000, (dword) $40000000, (dword) $20000000, (dword) $10000000, (dword) $8000000, (dword) $4000000, (dword) $2000000, (dword) $1000000, (dword) $800000, (dword) $400000, (dword) $200000, (dword) $100000, (dword) $80000, (dword) $40000, (dword) $20000, (dword) $10000, (dword) $8000, (dword) $4000, (dword) $2000, (dword) $1000, (dword) $800, (dword) $400, (dword) $200, (dword) $100, (dword) $80, (dword) $40, (dword) $20, (dword) $10, (dword) 8, (dword) 4, (dword) 2 } +(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } +(const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword) $3b9aca00, (dword) $5f5e100, (dword) $989680, (dword) $f4240, (dword) $186a0, (dword) $2710, (dword) $3e8, (dword) $64, (dword) $a } +(const word*) RADIX_HEXADECIMAL_VALUES[] = { (word) $1000, (word) $100, (word) $10 } +(const dword*) RADIX_HEXADECIMAL_VALUES_LONG[] = { (dword) $10000000, (dword) $1000000, (dword) $100000, (dword) $10000, (dword) $1000, (dword) $100, (dword) $10 } +(const word*) RADIX_OCTAL_VALUES[] = { (word) $8000, (word) $1000, (word) $200, (word) $40, (word) 8 } +(const dword*) RADIX_OCTAL_VALUES_LONG[] = { (dword) $40000000, (dword) $8000000, (dword) $1000000, (dword) $200000, (dword) $40000, (dword) $8000, (dword) $1000, (dword) $200, (dword) $40, (dword) 8 } (const byte*) SCREEN = (byte*)(number) $400 (const byte) SIZEOF_DWORD = (byte) 4 (const byte) SIZEOF_WORD = (byte) 2 -(const byte) SQRT_COUNT = (number) $80 +(const byte) SQRT_COUNT = (byte) $80 (dword()) clock() (number~) clock::$0 (label) clock::@return @@ -2065,8 +2065,6 @@ Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memse Adding number conversion cast (unumber) $ffffffff in (number~) clock::$0 ← (number) $ffffffff - *((const dword*) CIA2_TIMER_AB) Adding number conversion cast (unumber) clock::$0 in (number~) clock::$0 ← (unumber)(number) $ffffffff - *((const dword*) CIA2_TIMER_AB) Adding number conversion cast (unumber) $ffffffff in *((const dword*) CIA2_TIMER_AB) ← (number) $ffffffff -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -2081,25 +2079,19 @@ Adding number conversion cast (unumber) 4 in (byte) utoa::max_digits#2 ← (numb Adding number conversion cast (unumber) 6 in (byte) utoa::max_digits#3 ← (number) 6 Adding number conversion cast (unumber) $10 in (byte) utoa::max_digits#4 ← (number) $10 Adding number conversion cast (unumber) 0 in *((byte*) utoa::buffer#2) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) utoa::started#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) utoa::digit#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) utoa::$5 ← (byte) utoa::max_digits#5 - (number) 1 Adding number conversion cast (unumber) utoa::$5 in (number~) utoa::$5 ← (byte) utoa::max_digits#5 - (unumber)(number) 1 Adding number conversion cast (unumber) 0 in *((byte*) utoa::buffer#3) ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) utoa::started#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) utoa_append::digit#0 ← (number) 0 Adding number conversion cast (unumber) $a in (byte) ultoa::max_digits#1 ← (number) $a Adding number conversion cast (unumber) 8 in (byte) ultoa::max_digits#2 ← (number) 8 Adding number conversion cast (unumber) $b in (byte) ultoa::max_digits#3 ← (number) $b Adding number conversion cast (unumber) $20 in (byte) ultoa::max_digits#4 ← (number) $20 Adding number conversion cast (unumber) 0 in *((byte*) ultoa::buffer#2) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) ultoa::started#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) ultoa::digit#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) ultoa::$5 ← (byte) ultoa::max_digits#5 - (number) 1 Adding number conversion cast (unumber) ultoa::$5 in (number~) ultoa::$5 ← (byte) ultoa::max_digits#5 - (unumber)(number) 1 Adding number conversion cast (unumber) 0 in *((byte*) ultoa::buffer#3) ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) ultoa::started#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) ultoa_append::digit#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#8) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#11 + (number) $28 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 @@ -2114,7 +2106,6 @@ Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (un Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7 Adding number conversion cast (unumber) 0 in (byte) memset::c#1 ← (number) 0 -Adding number conversion cast (unumber) 2 in (word) main::i#0 ← (number) 2 Adding number conversion cast (unumber) 0 in (bool~) main::$32 ← (number) 0 != *((byte*) main::sieve_i#2) Adding number conversion cast (unumber) $64 in (word) div32u16u::divisor#0 ← (word)(const dword) CLOCKS_PER_SEC/(number) $64 Adding number conversion cast (unumber) 2 in (word) main::i#1 ← (number) 2 @@ -2128,36 +2119,27 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 Inlining cast *((const dword*) CIA2_TIMER_AB) ← (unumber)(number) $ffffffff -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (byte) utoa::max_digits#1 ← (unumber)(number) 5 Inlining cast (byte) utoa::max_digits#2 ← (unumber)(number) 4 Inlining cast (byte) utoa::max_digits#3 ← (unumber)(number) 6 Inlining cast (byte) utoa::max_digits#4 ← (unumber)(number) $10 Inlining cast *((byte*) utoa::buffer#2) ← (unumber)(number) 0 -Inlining cast (byte) utoa::started#0 ← (unumber)(number) 0 -Inlining cast (byte) utoa::digit#0 ← (unumber)(number) 0 Inlining cast (byte~) utoa::$4 ← (byte)(word) utoa::value#3 Inlining cast *((byte*) utoa::buffer#3) ← (unumber)(number) 0 Inlining cast (byte) utoa::started#1 ← (unumber)(number) 1 -Inlining cast (byte) utoa_append::digit#0 ← (unumber)(number) 0 Inlining cast (byte) ultoa::max_digits#1 ← (unumber)(number) $a Inlining cast (byte) ultoa::max_digits#2 ← (unumber)(number) 8 Inlining cast (byte) ultoa::max_digits#3 ← (unumber)(number) $b Inlining cast (byte) ultoa::max_digits#4 ← (unumber)(number) $20 Inlining cast *((byte*) ultoa::buffer#2) ← (unumber)(number) 0 -Inlining cast (byte) ultoa::started#0 ← (unumber)(number) 0 -Inlining cast (byte) ultoa::digit#0 ← (unumber)(number) 0 Inlining cast (byte~) ultoa::$4 ← (byte)(dword) ultoa::value#3 Inlining cast *((byte*) ultoa::buffer#3) ← (unumber)(number) 0 Inlining cast (byte) ultoa::started#1 ← (unumber)(number) 1 -Inlining cast (byte) ultoa_append::digit#0 ← (unumber)(number) 0 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (byte) memset::c#1 ← (unumber)(number) 0 -Inlining cast (word) main::i#0 ← (unumber)(number) 2 Inlining cast (word~) main::$13 ← (word)(dword~) main::$12 Inlining cast (word) main::i#1 ← (unumber)(number) 2 Inlining cast *((byte*) main::s#2) ← (unumber)(number) 1 @@ -2166,97 +2148,11 @@ Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (dword*) 56580 Simplifying constant pointer cast (byte*) 56590 Simplifying constant pointer cast (byte*) 56591 -Simplifying constant integer cast $8000 -Simplifying constant integer cast $4000 -Simplifying constant integer cast $2000 -Simplifying constant integer cast $1000 -Simplifying constant integer cast $800 -Simplifying constant integer cast $400 -Simplifying constant integer cast $200 -Simplifying constant integer cast $100 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast $20 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast 4 -Simplifying constant integer cast 2 -Simplifying constant integer cast $8000 -Simplifying constant integer cast $1000 -Simplifying constant integer cast $200 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast $2710 -Simplifying constant integer cast $3e8 -Simplifying constant integer cast $64 -Simplifying constant integer cast $a -Simplifying constant integer cast $1000 -Simplifying constant integer cast $100 -Simplifying constant integer cast $10 -Simplifying constant integer cast $80000000 -Simplifying constant integer cast $40000000 -Simplifying constant integer cast $20000000 -Simplifying constant integer cast $10000000 -Simplifying constant integer cast $8000000 -Simplifying constant integer cast $4000000 -Simplifying constant integer cast $2000000 -Simplifying constant integer cast $1000000 -Simplifying constant integer cast $800000 -Simplifying constant integer cast $400000 -Simplifying constant integer cast $200000 -Simplifying constant integer cast $100000 -Simplifying constant integer cast $80000 -Simplifying constant integer cast $40000 -Simplifying constant integer cast $20000 -Simplifying constant integer cast $10000 -Simplifying constant integer cast $8000 -Simplifying constant integer cast $4000 -Simplifying constant integer cast $2000 -Simplifying constant integer cast $1000 -Simplifying constant integer cast $800 -Simplifying constant integer cast $400 -Simplifying constant integer cast $200 -Simplifying constant integer cast $100 -Simplifying constant integer cast $80 -Simplifying constant integer cast $40 -Simplifying constant integer cast $20 -Simplifying constant integer cast $10 -Simplifying constant integer cast 8 -Simplifying constant integer cast 4 -Simplifying constant integer cast 2 -Simplifying constant integer cast $40000000 -Simplifying constant integer cast $8000000 -Simplifying constant integer cast $1000000 -Simplifying constant integer cast $200000 -Simplifying constant integer cast $40000 -Simplifying constant integer cast $8000 -Simplifying constant integer cast $1000 -Simplifying constant integer cast $200 -Simplifying constant integer cast $40 -Simplifying constant integer cast 8 -Simplifying constant integer cast $3b9aca00 -Simplifying constant integer cast $5f5e100 -Simplifying constant integer cast $989680 -Simplifying constant integer cast $f4240 -Simplifying constant integer cast $186a0 -Simplifying constant integer cast $2710 -Simplifying constant integer cast $3e8 -Simplifying constant integer cast $64 -Simplifying constant integer cast $a -Simplifying constant integer cast $10000000 -Simplifying constant integer cast $1000000 -Simplifying constant integer cast $100000 -Simplifying constant integer cast $10000 -Simplifying constant integer cast $1000 -Simplifying constant integer cast $100 -Simplifying constant integer cast $10 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 4096 Simplifying constant integer cast 0 Simplifying constant integer cast $ffffffff Simplifying constant integer cast $ffffffff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2271,23 +2167,17 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 6 Simplifying constant integer cast $10 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 8 Simplifying constant integer cast $b Simplifying constant integer cast $20 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast $28 @@ -2298,7 +2188,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 0 -Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast $64 Simplifying constant integer cast 2 @@ -2311,8 +2200,6 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (dword) $ffffffff Finalized unsigned number type (dword) $ffffffff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2325,24 +2212,18 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3fff @@ -2350,7 +2231,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) 2 @@ -2912,12 +2792,12 @@ Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined divr16u::i#0 = (byte) 0 Constant inlined memset::num#1 = (const word) COUNT Constant inlined memset::num#0 = (word) $3e8 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined ultoa::buffer#5 = (const byte*) decimal_digits_long Constant inlined ultoa::$5 = (const byte) ultoa::max_digits#1-(byte) 1 Constant inlined ultoa::started#0 = (byte) 0 Constant inlined utoa::digit#0 = (byte) 0 -Constant inlined main::i#0 = (byte) 2 +Constant inlined main::i#0 = (word) 2 Constant inlined utoa::$5 = (const byte) utoa::max_digits#1-(byte) 1 Constant inlined main::i#1 = (byte) 2 Constant inlined divr16u::divisor#1 = (const word) div32u16u::divisor#0 @@ -2949,7 +2829,7 @@ Constant inlined memset::c#0 = (byte) ' ' Constant inlined memset::c#1 = (byte) 0 Constant inlined print_str::str#7 = (const string) main::str4 Constant inlined print_str::str#6 = (const string) main::str3 -Constant inlined main::sieve_i#0 = (const byte*) sieve+(byte) 2 +Constant inlined main::sieve_i#0 = (const byte*) sieve+(word) 2 Constant inlined print_str::str#5 = (const string) main::str2 Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) divr16u::divisor#6 (const word) div32u16u::divisor#0 @@ -3217,8 +3097,8 @@ main::@21: scope:[main] from main::@20 [21] call clock_start to:main::@1 main::@1: scope:[main] from main::@21 main::@4 - [22] (byte*) main::sieve_i#2 ← phi( main::@21/(const byte*) sieve+(byte) 2 main::@4/(byte*) main::sieve_i#1 ) - [22] (word) main::i#12 ← phi( main::@21/(byte) 2 main::@4/(word) main::i#2 ) + [22] (byte*) main::sieve_i#2 ← phi( main::@21/(const byte*) sieve+(word) 2 main::@4/(byte*) main::sieve_i#1 ) + [22] (word) main::i#12 ← phi( main::@21/(word) 2 main::@4/(word) main::i#2 ) [23] if((word) main::i#12<(const byte) SQRT_COUNT) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 @@ -3535,7 +3415,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [162] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [162] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [162] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [162] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [162] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [163] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 @@ -4205,12 +4085,12 @@ main: { jsr clock_start // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] __b1_from___b21: - // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(byte) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 + // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(word) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 lda #sieve+2 sta.z sieve_i+1 - // [22] phi (word) main::i#12 = (byte) 2 [phi:main::@21->main::@1#1] -- vwuz1=vbuc1 + // [22] phi (word) main::i#12 = (word) 2 [phi:main::@21->main::@1#1] -- vwuz1=vwuc1 lda #<2 sta.z i lda #>2 @@ -5336,7 +5216,7 @@ divr16u: { // [162] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [162] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [162] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -6133,12 +6013,12 @@ main: { jsr clock_start // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] __b1_from___b21: - // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(byte) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 + // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(word) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 lda #sieve+2 sta.z sieve_i+1 - // [22] phi (word) main::i#12 = (byte) 2 [phi:main::@21->main::@1#1] -- vwuz1=vbuc1 + // [22] phi (word) main::i#12 = (word) 2 [phi:main::@21->main::@1#1] -- vwuz1=vwuc1 lda #<2 sta.z i lda #>2 @@ -7091,7 +6971,7 @@ divr16u: { __b1_from_divr16u: // [162] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [162] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [162] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -7574,15 +7454,15 @@ FINAL SYMBOL TABLE (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const word) CLOCKS_PER_FRAME = (number) $4cc8 -(const dword) CLOCKS_PER_INIT = (number) $12 -(const dword) CLOCKS_PER_SEC = (const word) CLOCKS_PER_FRAME*(const byte) FRAMES_PER_SEC -(const word) COUNT = (number) $4000 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const word) CLOCKS_PER_FRAME = (word) $4cc8 +(const dword) CLOCKS_PER_INIT = (dword) $12 +(const dword) CLOCKS_PER_SEC = (dword)(const word) CLOCKS_PER_FRAME*(const byte) FRAMES_PER_SEC +(const word) COUNT = (word) $4000 (const byte*) D018 = (byte*) 53272 (const byte*) DIGITS[] = (string) "0123456789abcdef"z -(const byte) FRAMES_PER_SEC = (number) $3c +(const byte) FRAMES_PER_SEC = (byte) $3c (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -7590,7 +7470,7 @@ FINAL SYMBOL TABLE (const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } (const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword) $3b9aca00, (dword) $5f5e100, (dword) $989680, (dword) $f4240, (dword) $186a0, (dword) $2710, (dword) $3e8, (dword) $64, (dword) $a } (const byte*) SCREEN = (byte*) 1024 -(const byte) SQRT_COUNT = (number) $80 +(const byte) SQRT_COUNT = (byte) $80 (dword()) clock() (label) clock::@return (dword) clock::return @@ -8070,12 +7950,12 @@ main: { // [21] call clock_start jsr clock_start // [22] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(byte) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 + // [22] phi (byte*) main::sieve_i#2 = (const byte*) sieve+(word) 2 [phi:main::@21->main::@1#0] -- pbuz1=pbuc1 lda #sieve+2 sta.z sieve_i+1 - // [22] phi (word) main::i#12 = (byte) 2 [phi:main::@21->main::@1#1] -- vwuz1=vbuc1 + // [22] phi (word) main::i#12 = (word) 2 [phi:main::@21->main::@1#1] -- vwuz1=vwuc1 lda #<2 sta.z i lda #>2 @@ -8992,7 +8872,7 @@ divr16u: { // [162] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [162] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [162] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [162] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/sieve.sym b/src/test/ref/sieve.sym index caa5c32fe..e24ec4ea3 100644 --- a/src/test/ref/sieve.sym +++ b/src/test/ref/sieve.sym @@ -4,15 +4,15 @@ (const dword*) CIA2_TIMER_AB = (dword*) 56580 (const byte*) CIA2_TIMER_A_CONTROL = (byte*) 56590 (const byte*) CIA2_TIMER_B_CONTROL = (byte*) 56591 -(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (number) $40 -(const byte) CIA_TIMER_CONTROL_START = (number) 1 -(const word) CLOCKS_PER_FRAME = (number) $4cc8 -(const dword) CLOCKS_PER_INIT = (number) $12 -(const dword) CLOCKS_PER_SEC = (const word) CLOCKS_PER_FRAME*(const byte) FRAMES_PER_SEC -(const word) COUNT = (number) $4000 +(const byte) CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = (byte) $40 +(const byte) CIA_TIMER_CONTROL_START = (byte) 1 +(const word) CLOCKS_PER_FRAME = (word) $4cc8 +(const dword) CLOCKS_PER_INIT = (dword) $12 +(const dword) CLOCKS_PER_SEC = (dword)(const word) CLOCKS_PER_FRAME*(const byte) FRAMES_PER_SEC +(const word) COUNT = (word) $4000 (const byte*) D018 = (byte*) 53272 (const byte*) DIGITS[] = (string) "0123456789abcdef"z -(const byte) FRAMES_PER_SEC = (number) $3c +(const byte) FRAMES_PER_SEC = (byte) $3c (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -20,7 +20,7 @@ (const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } (const dword*) RADIX_DECIMAL_VALUES_LONG[] = { (dword) $3b9aca00, (dword) $5f5e100, (dword) $989680, (dword) $f4240, (dword) $186a0, (dword) $2710, (dword) $3e8, (dword) $64, (dword) $a } (const byte*) SCREEN = (byte*) 1024 -(const byte) SQRT_COUNT = (number) $80 +(const byte) SQRT_COUNT = (byte) $80 (dword()) clock() (label) clock::@return (dword) clock::return diff --git a/src/test/ref/signed-bytes.log b/src/test/ref/signed-bytes.log index fdc90b63c..2db16384b 100644 --- a/src/test/ref/signed-bytes.log +++ b/src/test/ref/signed-bytes.log @@ -10,8 +10,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::j#0 ← (number) 0 - (signed byte) main::i#0 ← (number) -$7f + (byte) main::j#0 ← (byte) 0 + (signed byte) main::i#0 ← (signed byte) -$7f to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) @@ -60,21 +60,13 @@ SYMBOL TABLE SSA (byte) main::j#3 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (snumber) -$7f in (signed byte) main::i#0 ← (number) -$7f Adding number conversion cast (snumber) $7f in (bool~) main::$0 ← (signed byte) main::i#2 < (number) $7f Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (signed byte) main::i#0 ← (snumber)(number) -$7f Inlining cast (byte~) main::$1 ← (byte)(signed byte) main::i#3 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast -$7f Simplifying constant integer cast $7f Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized signed number type (signed byte) -$7f Finalized signed number type (signed byte) $7f Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (signed byte) main::i#2 = (signed byte) main::i#3 diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index 24cd3d890..17770a885 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -634,7 +634,7 @@ SYMBOL TABLE SSA (byte) sub::s#1 (byte) sub::s#2 (byte) sub::s#3 -(const signed word*) words[] = { (signed word)(number) -$6000, (signed word)(number) -$600, (signed word)(number) -$60, (signed word)(number) -6, (signed word)(number) 0, (signed word)(number) 6, (signed word)(number) $60, (signed word)(number) $600, (signed word)(number) $6000 } +(const signed word*) words[] = { (signed word) -$6000, (signed word) -$600, (signed word) -$60, (signed word) -6, (signed word) 0, (signed word) 6, (signed word) $60, (signed word) $600, (signed word) $6000 } Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#9 + (number) $28 @@ -655,15 +655,6 @@ Inlining cast (byte) sub::s#0 ← (unumber)(number) $80 Inlining cast (byte) sub::s#1 ← (unumber)(number) $40 Inlining cast (byte) sub::s#2 ← (unumber)(number) $40 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast -$6000 -Simplifying constant integer cast -$600 -Simplifying constant integer cast -$60 -Simplifying constant integer cast -6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 6 -Simplifying constant integer cast $60 -Simplifying constant integer cast $600 -Simplifying constant integer cast $6000 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 diff --git a/src/test/ref/signed-word-minus-byte-2.log b/src/test/ref/signed-word-minus-byte-2.log index 3eb058aed..424b527cb 100644 --- a/src/test/ref/signed-word-minus-byte-2.log +++ b/src/test/ref/signed-word-minus-byte-2.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (signed word) main::w1#0 ← (number) $4d2 + (signed word) main::w1#0 ← (signed word) $4d2 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -54,17 +54,12 @@ SYMBOL TABLE SSA (signed word) main::w1#1 (signed word) main::w1#2 -Adding number conversion cast (snumber) $4d2 in (signed word) main::w1#0 ← (number) $4d2 Adding number conversion cast (snumber) $29 in (number~) main::$0 ← (signed word) main::w1#2 - (number) $29 Adding number conversion cast (snumber) main::$0 in (number~) main::$0 ← (signed word) main::w1#2 - (snumber)(number) $29 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) main::w1#0 ← (snumber)(number) $4d2 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (signed word*) 1024 -Simplifying constant integer cast $4d2 Simplifying constant integer cast $29 Successful SSA optimization PassNCastSimplification -Finalized signed number type (signed word) $4d2 Finalized signed number type (signed byte) $29 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to signed word in (snumber~) main::$0 ← (signed word) main::w1#2 - (signed byte) $29 diff --git a/src/test/ref/signed-words.cfg b/src/test/ref/signed-words.cfg index 746c7b8ff..6efb05742 100644 --- a/src/test/ref/signed-words.cfg +++ b/src/test/ref/signed-words.cfg @@ -14,11 +14,11 @@ main: scope:[main] from @1 [5] call init to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [6] (signed word) yvel_init#13 ← phi( main::@1/(signed word) yvel_init#13 main/(signed byte) $64 main::@2/(signed word) yvel_init#11 ) + [6] (signed word) yvel_init#13 ← phi( main::@1/(signed word) yvel_init#13 main/(signed word) $64 main::@2/(signed word) yvel_init#11 ) [6] (signed word) xvel#12 ← phi( main::@1/(signed word) xvel#12 main/(signed word) $c8 main::@2/(signed word) xvel#10 ) - [6] (signed word) ypos#13 ← phi( main::@1/(signed word) ypos#13 main/(signed byte) 0 main::@2/(signed word) ypos#11 ) - [6] (signed word) xpos#12 ← phi( main::@1/(signed word) xpos#12 main/(signed byte) 0 main::@2/(signed word) xpos#10 ) - [6] (signed word) yvel#12 ← phi( main::@1/(signed word) yvel#12 main/(signed byte) $64 main::@2/(signed word) yvel#10 ) + [6] (signed word) ypos#13 ← phi( main::@1/(signed word) ypos#13 main/(signed word) 0 main::@2/(signed word) ypos#11 ) + [6] (signed word) xpos#12 ← phi( main::@1/(signed word) xpos#12 main/(signed word) 0 main::@2/(signed word) xpos#10 ) + [6] (signed word) yvel#12 ← phi( main::@1/(signed word) yvel#12 main/(signed word) $64 main::@2/(signed word) yvel#10 ) [7] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 8e6f0d08a..caae50330 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -110,10 +110,10 @@ init::@return: scope:[init] from init::@7 return to:@return @6: scope:[] from @begin - (signed word) xpos#2 ← (number) 0 - (signed word) ypos#2 ← (number) 0 - (signed word) yvel_init#2 ← (number) $64 - (signed word) xvel#2 ← (number) $c8 + (signed word) xpos#2 ← (signed word) 0 + (signed word) ypos#2 ← (signed word) 0 + (signed word) yvel_init#2 ← (signed word) $64 + (signed word) xvel#2 ← (signed word) $c8 (signed word) yvel#2 ← (signed word) yvel_init#2 to:@7 @@ -231,7 +231,7 @@ SYMBOL TABLE SSA (const byte*) SPRITES_XMSB = (byte*)(number) $d010 (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) anim() (bool~) anim::$0 (bool~) anim::$1 @@ -258,7 +258,7 @@ SYMBOL TABLE SSA (signed word) anim::sprite_x#0 (signed word) anim::sprite_y (signed word) anim::sprite_y#0 -(const signed word) g = (number) -5 +(const signed word) g = (signed word) -5 (void()) init() (bool~) init::$0 (bool~) init::$1 @@ -401,10 +401,6 @@ Adding number conversion cast (unumber) $40 in *((const byte*) SPRITES_PTR + (nu Adding number conversion cast (unumber) 0 in *((const byte*) SPRITES_PTR + (number) 0) ← (byte)(const byte*) SPRITE/(unumber)(number) $40 Adding number conversion cast (unumber) $3e8 in (bool~) init::$0 ← (byte*) init::sc#2 != (const byte*) SCREEN+(number) $3e8 Adding number conversion cast (unumber) $ff in *((const byte*) SPRITE + (byte) init::i#2) ← (number) $ff -Adding number conversion cast (snumber) 0 in (signed word) xpos#2 ← (number) 0 -Adding number conversion cast (snumber) 0 in (signed word) ypos#2 ← (number) 0 -Adding number conversion cast (snumber) $64 in (signed word) yvel_init#2 ← (number) $64 -Adding number conversion cast (snumber) $c8 in (signed word) xvel#2 ← (number) $c8 Adding number conversion cast (snumber) 0 in (bool~) anim::$0 ← (signed word) ypos#9 < (number) 0 Adding number conversion cast (snumber) 7 in (signed word~) anim::$5 ← (signed word) xpos#3 >> (number) 7 Adding number conversion cast (snumber) $a0 in (number~) anim::$6 ← (signed word~) anim::$5 + (number) $a0 @@ -427,10 +423,6 @@ Inlining cast *((const byte*) SPRITES_EXPAND_Y) ← (unumber)(number) 0 Inlining cast *((const byte*) SPRITES_XPOS + (unumber)(number) 0) ← (unumber)(number) $64 Inlining cast *((const byte*) SPRITES_YPOS + (unumber)(number) 0) ← (unumber)(number) $64 Inlining cast *((const byte*) SPRITE + (byte) init::i#2) ← (unumber)(number) $ff -Inlining cast (signed word) xpos#2 ← (snumber)(number) 0 -Inlining cast (signed word) ypos#2 ← (snumber)(number) 0 -Inlining cast (signed word) yvel_init#2 ← (snumber)(number) $64 -Inlining cast (signed word) xvel#2 ← (snumber)(number) $c8 Inlining cast (byte~) anim::$9 ← (byte)(signed word) anim::sprite_x#0 Inlining cast (byte~) anim::$10 ← (byte)(signed word) anim::sprite_y#0 Inlining cast (signed word) xpos#4 ← (snumber)(number) 0 @@ -462,10 +454,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast $64 -Simplifying constant integer cast $c8 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast $a0 Simplifying constant integer cast 5 @@ -493,10 +481,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $ff Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) $64 -Finalized signed number type (signed word) $c8 -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 7 Finalized signed number type (signed word) $a0 Finalized signed number type (signed byte) 5 @@ -624,15 +608,15 @@ Inlining constant with var siblings (const signed word) xvel#15 Inlining constant with var siblings (const signed word) xpos#14 Inlining constant with var siblings (const signed word) ypos#14 Inlining constant with var siblings (const signed word) yvel_init#4 -Constant inlined xpos#15 = (signed byte) 0 +Constant inlined xpos#15 = (signed word) 0 Constant inlined xpos#14 = (signed byte) 0 Constant inlined yvel_init#4 = (signed word) $c8 Constant inlined init::i#0 = (byte) 0 Constant inlined init::sc#0 = (const byte*) SCREEN Constant inlined xvel#15 = (signed word) $c8 Constant inlined ypos#14 = (signed byte) 0 -Constant inlined yvel#14 = (signed byte) $64 -Constant inlined ypos#15 = (signed byte) 0 +Constant inlined yvel#14 = (signed word) $64 +Constant inlined ypos#15 = (signed word) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@2 and main::@2) Added new block during phi lifting init::@9(between init::@7 and init::@7) @@ -714,11 +698,11 @@ main: scope:[main] from @1 [5] call init to:main::@1 main::@1: scope:[main] from main main::@1 main::@2 - [6] (signed word) yvel_init#13 ← phi( main::@1/(signed word) yvel_init#13 main/(signed byte) $64 main::@2/(signed word) yvel_init#11 ) + [6] (signed word) yvel_init#13 ← phi( main::@1/(signed word) yvel_init#13 main/(signed word) $64 main::@2/(signed word) yvel_init#11 ) [6] (signed word) xvel#12 ← phi( main::@1/(signed word) xvel#12 main/(signed word) $c8 main::@2/(signed word) xvel#10 ) - [6] (signed word) ypos#13 ← phi( main::@1/(signed word) ypos#13 main/(signed byte) 0 main::@2/(signed word) ypos#11 ) - [6] (signed word) xpos#12 ← phi( main::@1/(signed word) xpos#12 main/(signed byte) 0 main::@2/(signed word) xpos#10 ) - [6] (signed word) yvel#12 ← phi( main::@1/(signed word) yvel#12 main/(signed byte) $64 main::@2/(signed word) yvel#10 ) + [6] (signed word) ypos#13 ← phi( main::@1/(signed word) ypos#13 main/(signed word) 0 main::@2/(signed word) ypos#11 ) + [6] (signed word) xpos#12 ← phi( main::@1/(signed word) xpos#12 main/(signed word) 0 main::@2/(signed word) xpos#10 ) + [6] (signed word) yvel#12 ← phi( main::@1/(signed word) yvel#12 main/(signed word) $64 main::@2/(signed word) yvel#10 ) [7] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 @@ -933,7 +917,7 @@ main: { jsr init // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [6] phi (signed word) yvel_init#13 = (signed byte) $64 [phi:main->main::@1#0] -- vwsz1=vbsc1 + // [6] phi (signed word) yvel_init#13 = (signed word) $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 lda #<$64 sta.z yvel_init lda #>$64 @@ -943,17 +927,17 @@ main: { sta.z xvel lda #>$c8 sta.z xvel+1 - // [6] phi (signed word) ypos#13 = (signed byte) 0 [phi:main->main::@1#2] -- vwsz1=vbsc1 + // [6] phi (signed word) ypos#13 = (signed word) 0 [phi:main->main::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z ypos lda #>0 sta.z ypos+1 - // [6] phi (signed word) xpos#12 = (signed byte) 0 [phi:main->main::@1#3] -- vwsz1=vbsc1 + // [6] phi (signed word) xpos#12 = (signed word) 0 [phi:main->main::@1#3] -- vwsz1=vwsc1 lda #<0 sta.z xpos lda #>0 sta.z xpos+1 - // [6] phi (signed word) yvel#12 = (signed byte) $64 [phi:main->main::@1#4] -- vwsz1=vbsc1 + // [6] phi (signed word) yvel#12 = (signed word) $64 [phi:main->main::@1#4] -- vwsz1=vwsc1 lda #<$64 sta.z yvel_1 lda #>$64 @@ -1399,7 +1383,7 @@ main: { jsr init // [6] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [6] phi (signed word) yvel_init#13 = (signed byte) $64 [phi:main->main::@1#0] -- vwsz1=vbsc1 + // [6] phi (signed word) yvel_init#13 = (signed word) $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 lda #<$64 sta.z yvel_init lda #>$64 @@ -1409,17 +1393,17 @@ main: { sta.z xvel lda #>$c8 sta.z xvel+1 - // [6] phi (signed word) ypos#13 = (signed byte) 0 [phi:main->main::@1#2] -- vwsz1=vbsc1 + // [6] phi (signed word) ypos#13 = (signed word) 0 [phi:main->main::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z ypos lda #>0 sta.z ypos+1 - // [6] phi (signed word) xpos#12 = (signed byte) 0 [phi:main->main::@1#3] -- vwsz1=vbsc1 + // [6] phi (signed word) xpos#12 = (signed word) 0 [phi:main->main::@1#3] -- vwsz1=vwsc1 lda #<0 sta.z xpos lda #>0 sta.z xpos+1 - // [6] phi (signed word) yvel#12 = (signed byte) $64 [phi:main->main::@1#4] -- vwsz1=vbsc1 + // [6] phi (signed word) yvel#12 = (signed word) $64 [phi:main->main::@1#4] -- vwsz1=vwsc1 lda #<$64 sta.z yvel_1 lda #>$64 @@ -1792,7 +1776,7 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_XMSB = (byte*) 53264 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) anim() (byte~) anim::$10 reg byte a 4.0 (byte~) anim::$11 reg byte a 4.0 @@ -1808,7 +1792,7 @@ FINAL SYMBOL TABLE (signed word) anim::sprite_x#0 sprite_x zp[2]:12 0.5714285714285714 (signed word) anim::sprite_y (signed word) anim::sprite_y#0 sprite_y zp[2]:14 0.6666666666666666 -(const signed word) g = (number) -5 +(const signed word) g = (signed word) -5 (void()) init() (label) init::@1 (label) init::@2 @@ -1902,7 +1886,7 @@ main: { // [5] call init jsr init // [6] phi from main to main::@1 [phi:main->main::@1] - // [6] phi (signed word) yvel_init#13 = (signed byte) $64 [phi:main->main::@1#0] -- vwsz1=vbsc1 + // [6] phi (signed word) yvel_init#13 = (signed word) $64 [phi:main->main::@1#0] -- vwsz1=vwsc1 lda #<$64 sta.z yvel_init lda #>$64 @@ -1912,14 +1896,14 @@ main: { sta.z xvel lda #>$c8 sta.z xvel+1 - // [6] phi (signed word) ypos#13 = (signed byte) 0 [phi:main->main::@1#2] -- vwsz1=vbsc1 + // [6] phi (signed word) ypos#13 = (signed word) 0 [phi:main->main::@1#2] -- vwsz1=vwsc1 lda #<0 sta.z ypos sta.z ypos+1 - // [6] phi (signed word) xpos#12 = (signed byte) 0 [phi:main->main::@1#3] -- vwsz1=vbsc1 + // [6] phi (signed word) xpos#12 = (signed word) 0 [phi:main->main::@1#3] -- vwsz1=vwsc1 sta.z xpos sta.z xpos+1 - // [6] phi (signed word) yvel#12 = (signed byte) $64 [phi:main->main::@1#4] -- vwsz1=vbsc1 + // [6] phi (signed word) yvel#12 = (signed word) $64 [phi:main->main::@1#4] -- vwsz1=vwsc1 lda #<$64 sta.z yvel_1 lda #>$64 diff --git a/src/test/ref/signed-words.sym b/src/test/ref/signed-words.sym index 43c439ce4..7eb535772 100644 --- a/src/test/ref/signed-words.sym +++ b/src/test/ref/signed-words.sym @@ -12,7 +12,7 @@ (const byte*) SPRITES_XMSB = (byte*) 53264 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const byte) WHITE = (number) 1 +(const byte) WHITE = (byte) 1 (void()) anim() (byte~) anim::$10 reg byte a 4.0 (byte~) anim::$11 reg byte a 4.0 @@ -28,7 +28,7 @@ (signed word) anim::sprite_x#0 sprite_x zp[2]:12 0.5714285714285714 (signed word) anim::sprite_y (signed word) anim::sprite_y#0 sprite_y zp[2]:14 0.6666666666666666 -(const signed word) g = (number) -5 +(const signed word) g = (signed word) -5 (void()) init() (label) init::@1 (label) init::@2 diff --git a/src/test/ref/simple-loop.log b/src/test/ref/simple-loop.log index be882e0bb..6d7e94395 100644 --- a/src/test/ref/simple-loop.log +++ b/src/test/ref/simple-loop.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -49,22 +49,18 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (bool~) main::$0 ← (byte) main::i#2 < (number) $80 Adding number conversion cast (unumber) 0 in *((byte*)(number) $d020) ← (number) 0 Adding number conversion cast (unumber) 2 in (byte) main::i#1 ← (byte) main::i#3 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((byte*)(number) $d020) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 53280 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index 2dff94fcb..7b76d47ce 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -212,7 +212,7 @@ setFAC::@return: scope:[setFAC] from setFAC::@1 (word()) getFAC() getFAC: scope:[getFAC] from main::@13 asm { jsr$b1aa stymemLo stamemHi } - (word) getFAC::w#0 ← ((word)) { *((const byte*) memHi), *((const byte*) memLo) } + (word) getFAC::w#0 ← (word){ *((const byte*) memHi), *((const byte*) memLo) } (word) getFAC::return#0 ← (word) getFAC::w#0 to:getFAC::@return getFAC::@return: scope:[getFAC] from getFAC @@ -517,9 +517,9 @@ SYMBOL TABLE SSA (label) main::@8 (label) main::@9 (label) main::@return -(const byte*) main::f_127[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } +(const byte*) main::f_127[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (const byte*) main::f_2pi = (byte*)(number) $e2e5 -(const byte*) main::f_i[] = { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } +(const byte*) main::f_i[] = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } (byte) main::i (byte) main::i#0 (byte) main::i#1 @@ -715,16 +715,6 @@ Inlining cast (word) setFAC::w#2 ← (unumber)(number) $19 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 254 Simplifying constant pointer cast (byte*) 255 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 58085 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 diff --git a/src/test/ref/sinusgen16.asm b/src/test/ref/sinusgen16.asm index bee2659cc..6e04d2663 100644 --- a/src/test/ref/sinusgen16.asm +++ b/src/test/ref/sinusgen16.asm @@ -209,11 +209,14 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -488,8 +491,8 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($1c) a, word zp($12) b) mul16u: { - .label a = $1c .label mb = $18 + .label a = $1c .label res = $c .label b = $12 .label return = $c @@ -502,7 +505,9 @@ mul16u: { sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a diff --git a/src/test/ref/sinusgen16.cfg b/src/test/ref/sinusgen16.cfg index ae97b9ada..255c4c0f5 100644 --- a/src/test/ref/sinusgen16.cfg +++ b/src/test/ref/sinusgen16.cfg @@ -165,8 +165,8 @@ sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [68] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintab1 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [68] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [68] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) + [68] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) + [68] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [69] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 @@ -277,11 +277,11 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel - [128] phi() + [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [129] (dword) mul16u::mb#2 ← phi( mul16u/(word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [129] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [129] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [129] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [129] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -328,7 +328,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [149] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [149] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [149] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [149] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [149] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [150] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index 84b271961..308bee790 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -102,7 +102,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@2 @2: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@33 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -110,7 +110,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -218,7 +218,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#13 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -233,8 +233,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul16u: scope:[mul16u] from mulu16_sel (word) mul16u::a#5 ← phi( mulu16_sel/(word) mul16u::a#1 ) (word) mul16u::b#1 ← phi( mulu16_sel/(word) mul16u::b#0 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#1 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#1 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -296,8 +296,8 @@ sin16s_gen::@7: scope:[sin16s_gen] from sin16s_gen (dword~) sin16s_gen::$0 ← (dword) div32u16u::return#4 (word) rem16u#6 ← (word) rem16u#15 (dword) sin16s_gen::step#0 ← (dword~) sin16s_gen::$0 - (dword) sin16s_gen::x#0 ← (number) 0 - (word) sin16s_gen::i#0 ← (number) 0 + (dword) sin16s_gen::x#0 ← (dword) 0 + (word) sin16s_gen::i#0 ← (word) 0 to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@7 sin16s_gen::@8 (dword) sin16s_gen::step#3 ← phi( sin16s_gen::@7/(dword) sin16s_gen::step#0 sin16s_gen::@8/(dword) sin16s_gen::step#1 ) @@ -344,7 +344,7 @@ sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen::@2 (dword) sin16s::x#3 ← phi( sin16s_gen::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -819,9 +819,9 @@ SYMBOL TABLE SSA (label) @59 (label) @begin (label) @end -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1423,8 +1423,6 @@ SYMBOL TABLE SSA Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1434,16 +1432,12 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$2 ← (unumber~) mul16u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (word~) mul16u::$5 ← (word) mul16u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1463,13 +1457,7 @@ Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte:: Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (signed word) main::sw#0 >= (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 -Inlining cast (dword) sin16s_gen::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -1484,8 +1472,6 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#4 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1496,14 +1482,10 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -1522,8 +1504,6 @@ Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1532,14 +1512,10 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -1596,7 +1572,6 @@ Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#1 Alias (word) mul16u::a#2 = (word) mul16u::a#3 (word) mul16u::a#6 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#3 (dword) mul16u::return#1 @@ -1712,7 +1687,7 @@ Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 Identical Phi Values (word) rem16u#20 (word) rem16u#21 Identical Phi Values (word) rem16u#12 (word) rem16u#1 Identical Phi Values (word) rem16u#13 (word) rem16u#1 -Identical Phi Values (dword) mul16u::mb#0 (word) mul16u::b#0 +Identical Phi Values (word) mul16u::b#1 (word) mul16u::b#0 Identical Phi Values (word) mul16u::a#5 (word) mul16u::a#1 Identical Phi Values (word) sin16s_gen::wavelength#1 (word) sin16s_gen::wavelength#0 Identical Phi Values (word) rem16u#21 (word) rem16u#23 @@ -1832,16 +1807,16 @@ Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [102] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 -Constant right-side identified [145] (signed word*~) main::$2 ← (const signed word*) main::sintab1 + (const word) main::$9 +Constant right-side identified [103] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Constant right-side identified [146] (signed word*~) main::$2 ← (const signed word*) main::sintab1 + (const word) main::$9 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = (const dword) PI2_u4f28 Constant inlined divr16u::dividend#2 = <(const dword) PI2_u4f28 Constant inlined sin16s_gen::sintab#1 = (const signed word*) main::sintab1 @@ -1893,7 +1868,7 @@ Constant inlined print_char::ch#1 = (byte) ' ' Constant inlined main::st1#0 = (const signed word*) main::sintab1 Constant inlined mulu16_sel::v2#2 = (word)(number) $10000/(number) 6 Constant inlined print_char::ch#0 = (byte) '-' -Constant inlined sin16s_gen::x#0 = (byte) 0 +Constant inlined sin16s_gen::x#0 = (dword) 0 Constant inlined print_str::str#2 = (const string) main::str1 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined div32u16u::divisor#0 = (const word) main::wavelength @@ -1941,7 +1916,7 @@ Calls in [print_cls] to memset:79 Calls in [sin16s_gen] to div32u16u:92 sin16s:99 Calls in [sin16s] to mulu16_sel:123 mulu16_sel:130 mulu16_sel:135 mulu16_sel:143 mulu16_sel:150 Calls in [mulu16_sel] to mul16u:166 -Calls in [div32u16u] to divr16u:190 divr16u:195 +Calls in [div32u16u] to divr16u:191 divr16u:196 Created 35 initial phi equivalence classes Coalesced [17] print_char_cursor#60 ← print_char_cursor#21 @@ -1982,26 +1957,26 @@ Coalesced [149] mulu16_sel::v2#7 ← mulu16_sel::v2#4 Coalesced [157] sin16s::return#6 ← sin16s::sinx#1 Coalesced [161] sin16s::x#10 ← sin16s::x#4 Coalesced [162] sin16s::x#8 ← sin16s::x#0 -Coalesced [172] mul16u::a#7 ← mul16u::a#1 -Coalesced [173] mul16u::mb#6 ← mul16u::b#0 -Coalesced [181] mul16u::res#9 ← mul16u::res#1 -Coalesced [185] mul16u::a#8 ← mul16u::a#0 -Coalesced [186] mul16u::res#7 ← mul16u::res#6 -Coalesced [187] mul16u::mb#7 ← mul16u::mb#1 -Coalesced (already) [188] mul16u::res#8 ← mul16u::res#2 -Coalesced [194] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [201] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [202] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [209] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [216] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [217] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [223] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [224] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [225] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [226] divr16u::i#7 ← divr16u::i#1 -Coalesced [227] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [228] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [229] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [173] mul16u::a#7 ← mul16u::a#1 +Coalesced [174] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [182] mul16u::res#9 ← mul16u::res#1 +Coalesced [186] mul16u::a#8 ← mul16u::a#0 +Coalesced [187] mul16u::res#7 ← mul16u::res#6 +Coalesced [188] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [189] mul16u::res#8 ← mul16u::res#2 +Coalesced [195] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [202] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [203] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [210] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [217] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [218] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [224] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [225] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [226] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [227] divr16u::i#7 ← divr16u::i#1 +Coalesced [228] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [229] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [230] divr16u::rem#15 ← divr16u::rem#0 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @33 @@ -2057,7 +2032,6 @@ Adding NOP phi() at start of print_sword::@1 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset Adding NOP phi() at start of sin16s_gen -Adding NOP phi() at start of mul16u Adding NOP phi() at start of div32u16u FINAL CONTROL FLOW GRAPH @@ -2228,8 +2202,8 @@ sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [68] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintab1 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [68] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [68] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) + [68] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) + [68] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [69] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 @@ -2340,11 +2314,11 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel - [128] phi() + [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [129] (dword) mul16u::mb#2 ← phi( mul16u/(word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [129] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [129] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [129] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [129] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -2391,7 +2365,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [149] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [149] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [149] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [149] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [149] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [150] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 @@ -2490,6 +2464,7 @@ VARIABLE REGISTER WEIGHTS (word) mul16u::b (word) mul16u::b#0 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 (dword) mul16u::mb#2 43.57142857142858 (dword) mul16u::res @@ -2609,7 +2584,6 @@ VARIABLE REGISTER WEIGHTS (dword) sin16s_gen::x#1 11.0 (dword) sin16s_gen::x#2 4.125 -Not consolidating phi with different size mul16u::mb#2 mul16u::b#0 Initial phi equivalence classes [ main::st1#2 main::st1#1 ] [ print_str::str#3 print_str::str#5 print_str::str#0 ] @@ -2629,8 +2603,7 @@ Initial phi equivalence classes [ mulu16_sel::select#5 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -[ mul16u::mb#2 mul16u::mb#1 ] -[ mul16u::b#0 ] +[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -2658,6 +2631,7 @@ Added variable mulu16_sel::return#11 to live range equivalence class [ mulu16_se Added variable sin16s::x5#0 to live range equivalence class [ sin16s::x5#0 ] Added variable sin16s::x5_128#0 to live range equivalence class [ sin16s::x5_128#0 ] Added variable sin16s::usinx#1 to live range equivalence class [ sin16s::usinx#1 ] +Added variable mul16u::b#0 to live range equivalence class [ mul16u::b#0 ] Added variable mul16u::return#2 to live range equivalence class [ mul16u::return#2 ] Added variable mulu16_sel::$0 to live range equivalence class [ mulu16_sel::$0 ] Added variable mulu16_sel::$1 to live range equivalence class [ mulu16_sel::$1 ] @@ -2690,8 +2664,7 @@ Complete equivalence classes [ mulu16_sel::select#5 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -[ mul16u::mb#2 mul16u::mb#1 ] -[ mul16u::b#0 ] +[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -2719,6 +2692,7 @@ Complete equivalence classes [ sin16s::x5#0 ] [ sin16s::x5_128#0 ] [ sin16s::usinx#1 ] +[ mul16u::b#0 ] [ mul16u::return#2 ] [ mulu16_sel::$0 ] [ mulu16_sel::$1 ] @@ -2750,35 +2724,35 @@ Allocated zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_s Allocated zp[1]:33 [ mulu16_sel::select#5 ] Allocated zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -Allocated zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] -Allocated zp[2]:44 [ mul16u::b#0 ] -Allocated zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] -Allocated zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp[1]:52 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp[2]:53 [ main::sw#0 ] -Allocated zp[2]:55 [ print_word::w#0 ] -Allocated zp[1]:57 [ print_byte::$0 ] -Allocated zp[1]:58 [ print_byte::$2 ] -Allocated zp[4]:59 [ div32u16u::return#2 ] -Allocated zp[4]:63 [ sin16s_gen::step#0 ] -Allocated zp[2]:67 [ sin16s::return#0 ] -Allocated zp[2]:69 [ sin16s_gen::$2 ] -Allocated zp[4]:71 [ sin16s::$4 ] -Allocated zp[2]:75 [ sin16s::x1#0 ] -Allocated zp[2]:77 [ mulu16_sel::return#0 ] -Allocated zp[2]:79 [ sin16s::x2#0 ] -Allocated zp[2]:81 [ mulu16_sel::return#1 ] -Allocated zp[2]:83 [ sin16s::x3#0 ] -Allocated zp[2]:85 [ mulu16_sel::return#2 ] -Allocated zp[2]:87 [ sin16s::x3_6#0 ] -Allocated zp[2]:89 [ sin16s::usinx#0 ] -Allocated zp[2]:91 [ mulu16_sel::return#10 ] -Allocated zp[2]:93 [ sin16s::x4#0 ] -Allocated zp[2]:95 [ mulu16_sel::return#11 ] -Allocated zp[2]:97 [ sin16s::x5#0 ] -Allocated zp[2]:99 [ sin16s::x5_128#0 ] -Allocated zp[2]:101 [ sin16s::usinx#1 ] +Allocated zp[4]:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp[2]:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +Allocated zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp[1]:50 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp[2]:51 [ main::sw#0 ] +Allocated zp[2]:53 [ print_word::w#0 ] +Allocated zp[1]:55 [ print_byte::$0 ] +Allocated zp[1]:56 [ print_byte::$2 ] +Allocated zp[4]:57 [ div32u16u::return#2 ] +Allocated zp[4]:61 [ sin16s_gen::step#0 ] +Allocated zp[2]:65 [ sin16s::return#0 ] +Allocated zp[2]:67 [ sin16s_gen::$2 ] +Allocated zp[4]:69 [ sin16s::$4 ] +Allocated zp[2]:73 [ sin16s::x1#0 ] +Allocated zp[2]:75 [ mulu16_sel::return#0 ] +Allocated zp[2]:77 [ sin16s::x2#0 ] +Allocated zp[2]:79 [ mulu16_sel::return#1 ] +Allocated zp[2]:81 [ sin16s::x3#0 ] +Allocated zp[2]:83 [ mulu16_sel::return#2 ] +Allocated zp[2]:85 [ sin16s::x3_6#0 ] +Allocated zp[2]:87 [ sin16s::usinx#0 ] +Allocated zp[2]:89 [ mulu16_sel::return#10 ] +Allocated zp[2]:91 [ sin16s::x4#0 ] +Allocated zp[2]:93 [ mulu16_sel::return#11 ] +Allocated zp[2]:95 [ sin16s::x5#0 ] +Allocated zp[2]:97 [ sin16s::x5_128#0 ] +Allocated zp[2]:99 [ sin16s::usinx#1 ] +Allocated zp[2]:101 [ mul16u::b#0 ] Allocated zp[4]:103 [ mul16u::return#2 ] Allocated zp[4]:107 [ mulu16_sel::$0 ] Allocated zp[4]:111 [ mulu16_sel::$1 ] @@ -2832,7 +2806,7 @@ __bend: // main main: { .label wavelength = $78 - .label sw = $35 + .label sw = $33 .label st1 = 2 // [5] call sin16s_gen // [64] phi from main to sin16s_gen [phi:main->sin16s_gen] @@ -3084,9 +3058,9 @@ print_char: { } // print_word // Print a word as HEX -// print_word(word zp($37) w) +// print_word(word zp($35) w) print_word: { - .label w = $37 + .label w = $35 // [42] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuz1=_hi_vwuz2 lda.z w+1 sta.z print_byte.b @@ -3116,8 +3090,8 @@ print_word: { // Print a byte as HEX // print_byte(byte zp($b) b) print_byte: { - .label __0 = $39 - .label __2 = $3a + .label __0 = $37 + .label __2 = $38 .label b = $b // [48] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b @@ -3224,8 +3198,8 @@ memset: { // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_gen(signed word* zp($14) sintab) sin16s_gen: { - .label __2 = $45 - .label step = $3f + .label __2 = $43 + .label step = $3d .label sintab = $14 // u[4.28] // Iterate over the table @@ -3263,14 +3237,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - // [68] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [68] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [68] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [68] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3366,18 +3342,18 @@ sin16s_gen: { // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16s(dword zp($17) x) sin16s: { - .label __4 = $47 + .label __4 = $45 .label x = $17 - .label return = $43 - .label x1 = $4b - .label x2 = $4f - .label x3 = $53 - .label x3_6 = $57 - .label usinx = $59 - .label x4 = $5d - .label x5 = $61 - .label x5_128 = $63 - .label usinx_1 = $65 + .label return = $41 + .label x1 = $49 + .label x2 = $4d + .label x3 = $51 + .label x3_6 = $55 + .label usinx = $57 + .label x4 = $5b + .label x5 = $5f + .label x5_128 = $61 + .label usinx_1 = $63 .label return_1 = $1b .label sinx = $1b // Move x1 into the range 0-PI/2 using sinus mirror symmetries @@ -3732,11 +3708,11 @@ mulu16_sel: { .label __1 = $6f .label v1 = $1d .label v2 = $1f - .label return = $4d - .label return_1 = $51 - .label return_2 = $55 - .label return_3 = $5b - .label return_4 = $5f + .label return = $4b + .label return_1 = $4f + .label return_2 = $53 + .label return_3 = $59 + .label return_4 = $5d .label select = $21 .label return_5 = $73 // [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 @@ -3750,8 +3726,6 @@ mulu16_sel: { lda.z v2+1 sta.z mul16u.b+1 // [122] call mul16u - // [128] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] - mul16u_from_mulu16_sel: jsr mul16u // [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -3806,17 +3780,15 @@ mulu16_sel: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($22) a, word zp($2c) b) +// mul16u(word zp($22) a, word zp($65) b) mul16u: { .label __1 = $75 - .label a = $22 .label mb = $28 + .label a = $22 .label res = $24 - .label b = $2c + .label b = $65 .label return = $67 - // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [129] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -3824,12 +3796,17 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [129] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + __b1_from_mul16u: + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [129] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 @@ -3901,7 +3878,7 @@ div32u16u: { .label quotient_hi = $78 .label quotient_lo = $7c .label return = $7e - .label return_1 = $3b + .label return_1 = $39 // [139] call divr16u // [148] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: @@ -3977,15 +3954,15 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($30) dividend, word zp($2e) rem) +// divr16u(word zp($2e) dividend, word zp($2c) rem) divr16u: { .label __1 = $82 .label __2 = $83 - .label rem = $2e - .label dividend = $30 - .label quotient = $32 - .label i = $34 - .label return = $32 + .label rem = $2c + .label dividend = $2e + .label quotient = $30 + .label i = $32 + .label return = $30 .label return_1 = $76 .label return_2 = $7a // [149] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] @@ -3993,7 +3970,7 @@ divr16u: { // [149] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [149] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [149] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -4167,6 +4144,7 @@ Statement [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel: Statement [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a Statement [125] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a Statement [126] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a @@ -4177,7 +4155,7 @@ Statement [144] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16 Statement [145] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen:5::div32u16u:65 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a Statement [146] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen:5::div32u16u:65 [ div32u16u::return#0 ] ) always clobbers reg byte a Statement [151] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen:5::div32u16u:65::divr16u:139 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen:5::div32u16u:65::divr16u:143 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:52 [ divr16u::i#2 divr16u::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:50 [ divr16u::i#2 divr16u::i#1 ] Statement [154] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen:5::div32u16u:65::divr16u:139 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen:5::div32u16u:65::divr16u:143 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a Statement [158] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen:5::div32u16u:65::divr16u:139 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen:5::div32u16u:65::divr16u:143 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [160] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen:5::div32u16u:65::divr16u:139 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen:5::div32u16u:65::divr16u:143 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a @@ -4244,6 +4222,7 @@ Statement [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel: Statement [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a Statement [125] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a Statement [126] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [130] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:72::mulu16_sel:89::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:94::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:98::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:104::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:72::mulu16_sel:109::mul16u:122 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a @@ -4276,35 +4255,35 @@ Potential registers zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2# Potential registers zp[1]:33 [ mulu16_sel::select#5 ] : zp[1]:33 , reg byte x , reg byte y , Potential registers zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] : zp[2]:34 , Potential registers zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:36 , -Potential registers zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] : zp[4]:40 , -Potential registers zp[2]:44 [ mul16u::b#0 ] : zp[2]:44 , -Potential registers zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:46 , -Potential registers zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:48 , -Potential registers zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:50 , -Potential registers zp[1]:52 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:52 , reg byte x , reg byte y , -Potential registers zp[2]:53 [ main::sw#0 ] : zp[2]:53 , -Potential registers zp[2]:55 [ print_word::w#0 ] : zp[2]:55 , -Potential registers zp[1]:57 [ print_byte::$0 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:58 [ print_byte::$2 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:59 [ div32u16u::return#2 ] : zp[4]:59 , -Potential registers zp[4]:63 [ sin16s_gen::step#0 ] : zp[4]:63 , -Potential registers zp[2]:67 [ sin16s::return#0 ] : zp[2]:67 , -Potential registers zp[2]:69 [ sin16s_gen::$2 ] : zp[2]:69 , -Potential registers zp[4]:71 [ sin16s::$4 ] : zp[4]:71 , -Potential registers zp[2]:75 [ sin16s::x1#0 ] : zp[2]:75 , -Potential registers zp[2]:77 [ mulu16_sel::return#0 ] : zp[2]:77 , -Potential registers zp[2]:79 [ sin16s::x2#0 ] : zp[2]:79 , -Potential registers zp[2]:81 [ mulu16_sel::return#1 ] : zp[2]:81 , -Potential registers zp[2]:83 [ sin16s::x3#0 ] : zp[2]:83 , -Potential registers zp[2]:85 [ mulu16_sel::return#2 ] : zp[2]:85 , -Potential registers zp[2]:87 [ sin16s::x3_6#0 ] : zp[2]:87 , -Potential registers zp[2]:89 [ sin16s::usinx#0 ] : zp[2]:89 , -Potential registers zp[2]:91 [ mulu16_sel::return#10 ] : zp[2]:91 , -Potential registers zp[2]:93 [ sin16s::x4#0 ] : zp[2]:93 , -Potential registers zp[2]:95 [ mulu16_sel::return#11 ] : zp[2]:95 , -Potential registers zp[2]:97 [ sin16s::x5#0 ] : zp[2]:97 , -Potential registers zp[2]:99 [ sin16s::x5_128#0 ] : zp[2]:99 , -Potential registers zp[2]:101 [ sin16s::usinx#1 ] : zp[2]:101 , +Potential registers zp[4]:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:40 , +Potential registers zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:44 , +Potential registers zp[2]:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:46 , +Potential registers zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:48 , +Potential registers zp[1]:50 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:50 , reg byte x , reg byte y , +Potential registers zp[2]:51 [ main::sw#0 ] : zp[2]:51 , +Potential registers zp[2]:53 [ print_word::w#0 ] : zp[2]:53 , +Potential registers zp[1]:55 [ print_byte::$0 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:56 [ print_byte::$2 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:57 [ div32u16u::return#2 ] : zp[4]:57 , +Potential registers zp[4]:61 [ sin16s_gen::step#0 ] : zp[4]:61 , +Potential registers zp[2]:65 [ sin16s::return#0 ] : zp[2]:65 , +Potential registers zp[2]:67 [ sin16s_gen::$2 ] : zp[2]:67 , +Potential registers zp[4]:69 [ sin16s::$4 ] : zp[4]:69 , +Potential registers zp[2]:73 [ sin16s::x1#0 ] : zp[2]:73 , +Potential registers zp[2]:75 [ mulu16_sel::return#0 ] : zp[2]:75 , +Potential registers zp[2]:77 [ sin16s::x2#0 ] : zp[2]:77 , +Potential registers zp[2]:79 [ mulu16_sel::return#1 ] : zp[2]:79 , +Potential registers zp[2]:81 [ sin16s::x3#0 ] : zp[2]:81 , +Potential registers zp[2]:83 [ mulu16_sel::return#2 ] : zp[2]:83 , +Potential registers zp[2]:85 [ sin16s::x3_6#0 ] : zp[2]:85 , +Potential registers zp[2]:87 [ sin16s::usinx#0 ] : zp[2]:87 , +Potential registers zp[2]:89 [ mulu16_sel::return#10 ] : zp[2]:89 , +Potential registers zp[2]:91 [ sin16s::x4#0 ] : zp[2]:91 , +Potential registers zp[2]:93 [ mulu16_sel::return#11 ] : zp[2]:93 , +Potential registers zp[2]:95 [ sin16s::x5#0 ] : zp[2]:95 , +Potential registers zp[2]:97 [ sin16s::x5_128#0 ] : zp[2]:97 , +Potential registers zp[2]:99 [ sin16s::usinx#1 ] : zp[2]:99 , +Potential registers zp[2]:101 [ mul16u::b#0 ] : zp[2]:101 , Potential registers zp[4]:103 [ mul16u::return#2 ] : zp[4]:103 , Potential registers zp[4]:107 [ mulu16_sel::$0 ] : zp[4]:107 , Potential registers zp[4]:111 [ mulu16_sel::$1 ] : zp[4]:111 , @@ -4320,88 +4299,88 @@ Potential registers zp[1]:131 [ divr16u::$2 ] : zp[1]:131 , reg byte a , reg byt Potential registers zp[2]:132 [ rem16u#1 ] : zp[2]:132 , REGISTER UPLIFT SCOPES -Uplift Scope [mul16u] 353.83: zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 245.57: zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] 202: zp[1]:117 [ mul16u::$1 ] 170: zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp[4]:103 [ mul16u::return#2 ] 2: zp[2]:44 [ mul16u::b#0 ] +Uplift Scope [mul16u] 353.83: zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:117 [ mul16u::$1 ] 170: zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp[4]:103 [ mul16u::return#2 ] 2: zp[2]:101 [ mul16u::b#0 ] Uplift Scope [print_str] 305.5: zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplift Scope [divr16u] 106.92: zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:130 [ divr16u::$1 ] 22: zp[1]:131 [ divr16u::$2 ] 18.19: zp[1]:52 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:118 [ divr16u::return#2 ] 4: zp[2]:122 [ divr16u::return#3 ] +Uplift Scope [divr16u] 106.92: zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:130 [ divr16u::$1 ] 22: zp[1]:131 [ divr16u::$2 ] 18.19: zp[1]:50 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:118 [ divr16u::return#2 ] 4: zp[2]:122 [ divr16u::return#3 ] Uplift Scope [] 190.22: zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] 0.8: zp[2]:132 [ rem16u#1 ] -Uplift Scope [sin16s] 27.5: zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:67 [ sin16s::return#0 ] 13: zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:71 [ sin16s::$4 ] 4: zp[2]:79 [ sin16s::x2#0 ] 4: zp[2]:87 [ sin16s::x3_6#0 ] 4: zp[2]:93 [ sin16s::x4#0 ] 4: zp[2]:97 [ sin16s::x5#0 ] 4: zp[2]:99 [ sin16s::x5_128#0 ] 1: zp[2]:83 [ sin16s::x3#0 ] 1: zp[2]:101 [ sin16s::usinx#1 ] 0.64: zp[2]:75 [ sin16s::x1#0 ] 0.33: zp[2]:89 [ sin16s::usinx#0 ] 0.06: zp[1]:22 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen] 25.67: zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp[2]:69 [ sin16s_gen::$2 ] 15.12: zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp[4]:63 [ sin16s_gen::step#0 ] -Uplift Scope [mulu16_sel] 24: zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:77 [ mulu16_sel::return#0 ] 4: zp[2]:81 [ mulu16_sel::return#1 ] 4: zp[2]:85 [ mulu16_sel::return#2 ] 4: zp[2]:91 [ mulu16_sel::return#10 ] 4: zp[2]:95 [ mulu16_sel::return#11 ] 4: zp[4]:107 [ mulu16_sel::$0 ] 4: zp[4]:111 [ mulu16_sel::$1 ] 1.71: zp[2]:115 [ mulu16_sel::return#12 ] 0.33: zp[1]:33 [ mulu16_sel::select#5 ] +Uplift Scope [sin16s] 27.5: zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:65 [ sin16s::return#0 ] 13: zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:69 [ sin16s::$4 ] 4: zp[2]:77 [ sin16s::x2#0 ] 4: zp[2]:85 [ sin16s::x3_6#0 ] 4: zp[2]:91 [ sin16s::x4#0 ] 4: zp[2]:95 [ sin16s::x5#0 ] 4: zp[2]:97 [ sin16s::x5_128#0 ] 1: zp[2]:81 [ sin16s::x3#0 ] 1: zp[2]:99 [ sin16s::usinx#1 ] 0.64: zp[2]:73 [ sin16s::x1#0 ] 0.33: zp[2]:87 [ sin16s::usinx#0 ] 0.06: zp[1]:22 [ sin16s::isUpper#2 ] +Uplift Scope [sin16s_gen] 25.67: zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp[2]:67 [ sin16s_gen::$2 ] 15.12: zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp[4]:61 [ sin16s_gen::step#0 ] +Uplift Scope [mulu16_sel] 24: zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:75 [ mulu16_sel::return#0 ] 4: zp[2]:79 [ mulu16_sel::return#1 ] 4: zp[2]:83 [ mulu16_sel::return#2 ] 4: zp[2]:89 [ mulu16_sel::return#10 ] 4: zp[2]:93 [ mulu16_sel::return#11 ] 4: zp[4]:107 [ mulu16_sel::$0 ] 4: zp[4]:111 [ mulu16_sel::$1 ] 1.71: zp[2]:115 [ mulu16_sel::return#12 ] 0.33: zp[1]:33 [ mulu16_sel::select#5 ] Uplift Scope [memset] 36.67: zp[2]:12 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [main] 26: zp[2]:2 [ main::st1#2 main::st1#1 ] 6.6: zp[2]:53 [ main::sw#0 ] -Uplift Scope [print_byte] 10: zp[1]:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:57 [ print_byte::$0 ] 4: zp[1]:58 [ print_byte::$2 ] +Uplift Scope [main] 26: zp[2]:2 [ main::st1#2 main::st1#1 ] 6.6: zp[2]:51 [ main::sw#0 ] +Uplift Scope [print_byte] 10: zp[1]:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:55 [ print_byte::$0 ] 4: zp[1]:56 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp[1]:8 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sword] 10.83: zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplift Scope [div32u16u] 4: zp[4]:59 [ div32u16u::return#2 ] 4: zp[2]:124 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:126 [ div32u16u::return#0 ] 0.8: zp[2]:120 [ div32u16u::quotient_hi#0 ] -Uplift Scope [print_word] 2: zp[2]:55 [ print_word::w#0 ] +Uplift Scope [div32u16u] 4: zp[4]:57 [ div32u16u::return#2 ] 4: zp[2]:124 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:126 [ div32u16u::return#0 ] 0.8: zp[2]:120 [ div32u16u::quotient_hi#0 ] +Uplift Scope [print_word] 2: zp[2]:53 [ print_word::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul16u] best 26925 combination zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:103 [ mul16u::return#2 ] zp[2]:44 [ mul16u::b#0 ] -Uplifting [print_str] best 26925 combination zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 26715 combination zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:118 [ divr16u::return#2 ] zp[2]:122 [ divr16u::return#3 ] -Uplifting [] best 26715 combination zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] zp[2]:132 [ rem16u#1 ] -Uplifting [sin16s] best 26706 combination zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:67 [ sin16s::return#0 ] zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:71 [ sin16s::$4 ] zp[2]:79 [ sin16s::x2#0 ] zp[2]:87 [ sin16s::x3_6#0 ] zp[2]:93 [ sin16s::x4#0 ] zp[2]:97 [ sin16s::x5#0 ] zp[2]:99 [ sin16s::x5_128#0 ] zp[2]:83 [ sin16s::x3#0 ] zp[2]:101 [ sin16s::usinx#1 ] zp[2]:75 [ sin16s::x1#0 ] zp[2]:89 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen] best 26706 combination zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:69 [ sin16s_gen::$2 ] zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:63 [ sin16s_gen::step#0 ] -Uplifting [mulu16_sel] best 26690 combination zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:77 [ mulu16_sel::return#0 ] zp[2]:81 [ mulu16_sel::return#1 ] zp[2]:85 [ mulu16_sel::return#2 ] zp[2]:91 [ mulu16_sel::return#10 ] zp[2]:95 [ mulu16_sel::return#11 ] zp[4]:107 [ mulu16_sel::$0 ] zp[4]:111 [ mulu16_sel::$1 ] zp[2]:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [memset] best 26690 combination zp[2]:12 [ memset::dst#2 memset::dst#1 ] -Uplifting [main] best 26690 combination zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:53 [ main::sw#0 ] -Uplifting [print_byte] best 26676 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_char] best 26661 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sword] best 26661 combination zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [div32u16u] best 26661 combination zp[4]:59 [ div32u16u::return#2 ] zp[2]:124 [ div32u16u::quotient_lo#0 ] zp[4]:126 [ div32u16u::return#0 ] zp[2]:120 [ div32u16u::quotient_hi#0 ] -Uplifting [print_word] best 26661 combination zp[2]:55 [ print_word::w#0 ] -Uplifting [RADIX] best 26661 combination -Uplifting [print_cls] best 26661 combination -Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:101 [ sin16s::usinx#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:83 [ sin16s::x3#0 ] ] - score: 2 -Coalescing zero page register [ zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:132 [ rem16u#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp[2]:53 [ main::sw#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 ] ] with [ zp[2]:55 [ print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:67 [ sin16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:79 [ sin16s::x2#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:93 [ sin16s::x4#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:44 [ mul16u::b#0 ] ] - score: 1 +Uplifting [mul16u] best 25385 combination zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:103 [ mul16u::return#2 ] zp[2]:101 [ mul16u::b#0 ] +Uplifting [print_str] best 25385 combination zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [divr16u] best 25175 combination zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:118 [ divr16u::return#2 ] zp[2]:122 [ divr16u::return#3 ] +Uplifting [] best 25175 combination zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] zp[2]:132 [ rem16u#1 ] +Uplifting [sin16s] best 25166 combination zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:65 [ sin16s::return#0 ] zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:69 [ sin16s::$4 ] zp[2]:77 [ sin16s::x2#0 ] zp[2]:85 [ sin16s::x3_6#0 ] zp[2]:91 [ sin16s::x4#0 ] zp[2]:95 [ sin16s::x5#0 ] zp[2]:97 [ sin16s::x5_128#0 ] zp[2]:81 [ sin16s::x3#0 ] zp[2]:99 [ sin16s::usinx#1 ] zp[2]:73 [ sin16s::x1#0 ] zp[2]:87 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16s_gen] best 25166 combination zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:67 [ sin16s_gen::$2 ] zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:61 [ sin16s_gen::step#0 ] +Uplifting [mulu16_sel] best 25150 combination zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:75 [ mulu16_sel::return#0 ] zp[2]:79 [ mulu16_sel::return#1 ] zp[2]:83 [ mulu16_sel::return#2 ] zp[2]:89 [ mulu16_sel::return#10 ] zp[2]:93 [ mulu16_sel::return#11 ] zp[4]:107 [ mulu16_sel::$0 ] zp[4]:111 [ mulu16_sel::$1 ] zp[2]:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [memset] best 25150 combination zp[2]:12 [ memset::dst#2 memset::dst#1 ] +Uplifting [main] best 25150 combination zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:51 [ main::sw#0 ] +Uplifting [print_byte] best 25136 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_char] best 25121 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sword] best 25121 combination zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [div32u16u] best 25121 combination zp[4]:57 [ div32u16u::return#2 ] zp[2]:124 [ div32u16u::quotient_lo#0 ] zp[4]:126 [ div32u16u::return#0 ] zp[2]:120 [ div32u16u::quotient_hi#0 ] +Uplifting [print_word] best 25121 combination zp[2]:53 [ print_word::w#0 ] +Uplifting [RADIX] best 25121 combination +Uplifting [print_cls] best 25121 combination +Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:99 [ sin16s::usinx#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:81 [ sin16s::x3#0 ] ] - score: 2 +Coalescing zero page register [ zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:132 [ rem16u#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp[2]:51 [ main::sw#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 ] ] with [ zp[2]:53 [ print_word::w#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:65 [ sin16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:77 [ sin16s::x2#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:91 [ sin16s::x4#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:101 [ mul16u::b#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:103 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:118 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:122 [ divr16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[4]:59 [ div32u16u::return#2 ] ] with [ zp[4]:63 [ sin16s_gen::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:59 [ div32u16u::return#2 sin16s_gen::step#0 ] ] with [ zp[4]:126 [ div32u16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:77 [ mulu16_sel::return#0 ] ] with [ zp[2]:115 [ mulu16_sel::return#12 ] ] - score: 1 -Coalescing zero page register [ zp[2]:85 [ mulu16_sel::return#2 ] ] with [ zp[2]:87 [ sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:95 [ mulu16_sel::return#11 ] ] with [ zp[2]:97 [ sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:118 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:122 [ divr16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[4]:57 [ div32u16u::return#2 ] ] with [ zp[4]:61 [ sin16s_gen::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:57 [ div32u16u::return#2 sin16s_gen::step#0 ] ] with [ zp[4]:126 [ div32u16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:75 [ mulu16_sel::return#0 ] ] with [ zp[2]:115 [ mulu16_sel::return#12 ] ] - score: 1 +Coalescing zero page register [ zp[2]:83 [ mulu16_sel::return#2 ] ] with [ zp[2]:85 [ sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:93 [ mulu16_sel::return#11 ] ] with [ zp[2]:95 [ sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:107 [ mulu16_sel::$0 ] ] with [ zp[4]:111 [ mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:69 [ sin16s_gen::$2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:89 [ sin16s::usinx#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:81 [ mulu16_sel::return#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:91 [ mulu16_sel::return#10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:67 [ sin16s_gen::$2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:87 [ sin16s::usinx#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:79 [ mulu16_sel::return#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:89 [ mulu16_sel::return#10 ] ] - score: 1 Coalescing zero page register [ zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:107 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:124 [ div32u16u::quotient_lo#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:77 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:85 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:95 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:99 [ sin16s::x5_128#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:124 [ div32u16u::quotient_lo#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:75 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:83 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:75 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:93 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:75 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:97 [ sin16s::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:12 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:2 [ main::st1#2 main::st1#1 ] ] Coalescing zero page register [ zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] Coalescing zero page register [ zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] ] Coalescing zero page register [ zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] -Coalescing zero page register [ zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] -Coalescing zero page register [ zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] -Coalescing zero page register [ zp[4]:71 [ sin16s::$4 ] ] with [ zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] ] -Coalescing zero page register [ zp[2]:120 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:75 [ sin16s::x1#0 ] ] -Coalescing zero page register [ zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:12 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ] -Coalescing zero page register [ zp[2]:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] +Coalescing zero page register [ zp[2]:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] +Coalescing zero page register [ zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp[4]:69 [ sin16s::$4 ] ] with [ zp[4]:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] +Coalescing zero page register [ zp[2]:120 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:73 [ sin16s::x1#0 ] ] +Coalescing zero page register [ zp[2]:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:12 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ] +Coalescing zero page register [ zp[2]:75 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Allocated (was zp[2]:14) zp[2]:2 [ sin16s_gen::i#2 sin16s_gen::i#1 print_str::str#3 print_str::str#5 print_str::str#0 ] Allocated (was zp[4]:16) zp[4]:4 [ sin16s_gen::x#2 sin16s_gen::x#1 ] Allocated (was zp[2]:20) zp[2]:8 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] Allocated (was zp[2]:27) zp[2]:10 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] Allocated (was zp[4]:36) zp[4]:12 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] -Allocated (was zp[2]:46) zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] -Allocated (was zp[2]:48) zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] -Allocated (was zp[4]:59) zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -Allocated (was zp[4]:71) zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] -Allocated (was zp[2]:77) zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] +Allocated (was zp[2]:44) zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] +Allocated (was zp[2]:46) zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] +Allocated (was zp[4]:57) zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] +Allocated (was zp[4]:69) zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated (was zp[2]:75) zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated (was zp[2]:120) zp[2]:30 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] ASSEMBLER BEFORE OPTIMIZATION @@ -4837,14 +4816,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - // [68] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [68] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [68] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [68] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5243,8 +5224,6 @@ mulu16_sel: { sta.z mul16u.a+1 // [121] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 // [122] call mul16u - // [128] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] - mul16u_from_mulu16_sel: jsr mul16u // [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b1 @@ -5277,14 +5256,12 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($1c) a, word zp($12) b) mul16u: { - .label a = $1c .label mb = $18 + .label a = $1c .label res = $c .label b = $12 .label return = $c - // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [129] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -5292,12 +5269,17 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [129] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + __b1_from_mul16u: + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [129] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 @@ -5436,7 +5418,7 @@ divr16u: { __b1_from_divr16u: // [149] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [149] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [149] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -5594,11 +5576,9 @@ Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda.z sw+1 Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 @@ -5699,7 +5679,6 @@ Removing instruction __b10: Removing instruction mulu16_sel_from___b10: Removing instruction __b11: Removing instruction __b6: -Removing instruction mul16u_from_mulu16_sel: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_mul16u: @@ -5726,6 +5705,8 @@ Relabelling long label __b1_from_sin16s to b1 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Removing instruction __b12: Succesful ASM optimization Pass5UnusedLabelElimination @@ -5736,9 +5717,9 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -5841,6 +5822,7 @@ FINAL SYMBOL TABLE (word) mul16u::b (word) mul16u::b#0 b zp[2]:18 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 mb zp[4]:24 4.0 (dword) mul16u::mb#1 mb zp[4]:24 202.0 (dword) mul16u::mb#2 mb zp[4]:24 43.57142857142858 (dword) mul16u::res @@ -6011,7 +5993,7 @@ reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] +zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] reg byte a [ mul16u::$1 ] zp[2]:30 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] @@ -6020,7 +6002,7 @@ reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 22787 +Score: 21267 // File Comments // Generates a 16-bit signed sinus @@ -6415,13 +6397,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - // [68] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [68] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [68] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [68] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -6814,9 +6799,7 @@ mulu16_sel: { sta.z mul16u.a+1 // [121] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 // [122] call mul16u - // [128] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] jsr mul16u - // mul16u(v1, v2) // [123] (dword) mul16u::return#2 ← (dword) mul16u::res#2 // mulu16_sel::@1 // [124] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 @@ -6847,13 +6830,13 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($1c) a, word zp($12) b) mul16u: { - .label a = $1c .label mb = $18 + .label a = $1c .label res = $c .label b = $12 .label return = $c - // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [129] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // mb = b + // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -6861,10 +6844,14 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [129] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [129] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 @@ -6999,7 +6986,7 @@ divr16u: { // [149] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [149] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [149] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [149] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/sinusgen16.sym b/src/test/ref/sinusgen16.sym index 71ea51cf6..260382f63 100644 --- a/src/test/ref/sinusgen16.sym +++ b/src/test/ref/sinusgen16.sym @@ -1,9 +1,9 @@ (label) @1 (label) @begin (label) @end -(const dword) PI2_u4f28 = (number) $6487ed51 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -106,6 +106,7 @@ (word) mul16u::b (word) mul16u::b#0 b zp[2]:18 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 mb zp[4]:24 4.0 (dword) mul16u::mb#1 mb zp[4]:24 202.0 (dword) mul16u::mb#2 mb zp[4]:24 43.57142857142858 (dword) mul16u::res @@ -276,7 +277,7 @@ reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] +zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] reg byte a [ mul16u::$1 ] zp[2]:30 [ div32u16u::quotient_hi#0 sin16s::x1#0 ] diff --git a/src/test/ref/sinusgen16b.asm b/src/test/ref/sinusgen16b.asm index 5775dd729..8a96f1fc1 100644 --- a/src/test/ref/sinusgen16b.asm +++ b/src/test/ref/sinusgen16b.asm @@ -226,11 +226,14 @@ sin16s_genb: { sta.z sintab lda #>main.sintab2 sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -454,8 +457,8 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($17) a, word zp(5) b) mul16u: { - .label a = $17 .label mb = $1b + .label a = $17 .label res = $d .label b = 5 .label return = $d @@ -468,7 +471,9 @@ mul16u: { sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a @@ -607,11 +612,14 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] diff --git a/src/test/ref/sinusgen16b.cfg b/src/test/ref/sinusgen16b.cfg index 1168ab617..36c738b70 100644 --- a/src/test/ref/sinusgen16b.cfg +++ b/src/test/ref/sinusgen16b.cfg @@ -171,8 +171,8 @@ sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb to:sin16s_genb::@1 sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@3 sin16s_genb::@4 [72] (signed word*) sin16s_genb::sintab#2 ← phi( sin16s_genb::@3/(const signed word*) main::sintab2 sin16s_genb::@4/(signed word*) sin16s_genb::sintab#0 ) - [72] (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@3/(byte) 0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) - [72] (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(byte) 0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) + [72] (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@3/(dword) 0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) + [72] (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(word) 0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 to:sin16s_genb::@return sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 @@ -282,11 +282,11 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel - [131] phi() + [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [132] (dword) mul16u::mb#2 ← phi( mul16u/(word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [132] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [132] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [132] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [132] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -333,7 +333,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [152] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [152] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [152] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [152] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [152] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [153] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 @@ -378,8 +378,8 @@ sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [173] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintab1 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) + [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) + [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index e09c83e5a..147066096 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -107,7 +107,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@2 @2: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@35 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -115,7 +115,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -223,7 +223,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#16 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -238,8 +238,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul16u: scope:[mul16u] from mulu16_sel (word) mul16u::a#5 ← phi( mulu16_sel/(word) mul16u::a#1 ) (word) mul16u::b#1 ← phi( mulu16_sel/(word) mul16u::b#0 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#1 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#1 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -301,8 +301,8 @@ sin16s_gen::@7: scope:[sin16s_gen] from sin16s_gen (dword~) sin16s_gen::$0 ← (dword) div32u16u::return#5 (word) rem16u#6 ← (word) rem16u#18 (dword) sin16s_gen::step#0 ← (dword~) sin16s_gen::$0 - (dword) sin16s_gen::x#0 ← (number) 0 - (word) sin16s_gen::i#0 ← (number) 0 + (dword) sin16s_gen::x#0 ← (dword) 0 + (word) sin16s_gen::i#0 ← (word) 0 to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@7 sin16s_gen::@8 (dword) sin16s_gen::step#3 ← phi( sin16s_gen::@7/(dword) sin16s_gen::step#0 sin16s_gen::@8/(dword) sin16s_gen::step#1 ) @@ -349,7 +349,7 @@ sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen::@2 (dword) sin16s::x#3 ← phi( sin16s_gen::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -511,8 +511,8 @@ sin16s_genb::@7: scope:[sin16s_genb] from sin16s_genb (dword~) sin16s_genb::$0 ← (dword) div32u16u::return#6 (word) rem16u#8 ← (word) rem16u#20 (dword) sin16s_genb::step#0 ← (dword~) sin16s_genb::$0 - (dword) sin16s_genb::x#0 ← (number) 0 - (word) sin16s_genb::i#0 ← (number) 0 + (dword) sin16s_genb::x#0 ← (dword) 0 + (word) sin16s_genb::i#0 ← (word) 0 to:sin16s_genb::@1 sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@7 sin16s_genb::@8 (dword) sin16s_genb::step#3 ← phi( sin16s_genb::@7/(dword) sin16s_genb::step#0 sin16s_genb::@8/(dword) sin16s_genb::step#1 ) @@ -560,7 +560,7 @@ sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 (signed word()) sin16sb((word) sin16sb::x) sin16sb: scope:[sin16sb] from sin16s_genb::@2 (word) sin16sb::x#3 ← phi( sin16s_genb::@2/(word) sin16sb::x#0 ) - (byte) sin16sb::isUpper#0 ← (number) 0 + (byte) sin16sb::isUpper#0 ← (byte) 0 (bool~) sin16sb::$0 ← (word) sin16sb::x#3 >= (const word) PI_u4f12 (bool~) sin16sb::$1 ← ! (bool~) sin16sb::$0 if((bool~) sin16sb::$1) goto sin16sb::@1 @@ -1029,11 +1029,11 @@ SYMBOL TABLE SSA (label) @61 (label) @begin (label) @end -(const dword) PI2_u4f28 = (number) $6487ed51 -(const word) PI_HALF_u4f12 = (number) $1922 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const word) PI_u4f12 = (number) $3244 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const word) PI_HALF_u4f12 = (word) $1922 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const word) PI_u4f12 = (word) $3244 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1822,8 +1822,6 @@ SYMBOL TABLE SSA Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1833,16 +1831,12 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$2 ← (unumber~) mul16u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (word~) mul16u::$5 ← (word) mul16u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1853,9 +1847,6 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#3 ← (nu Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (number) 0 Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0 -Adding number conversion cast (unumber) 0 in (dword) sin16s_genb::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_genb::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16sb::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16sb::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 8 in (number~) sin16sb::$4 ← (word) sin16sb::x#6 * (number) 8 Adding number conversion cast (unumber) sin16sb::$4 in (number~) sin16sb::$4 ← (word) sin16sb::x#6 * (unumber)(number) 8 @@ -1877,13 +1868,7 @@ Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte:: Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (signed word) main::sw#0 >= (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 -Inlining cast (dword) sin16s_gen::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -1893,9 +1878,6 @@ Inlining cast (byte) mulu16_sel::select#3 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#4 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s::$14 ← (signed word)(word) sin16s::usinx#1 Inlining cast (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#3 -Inlining cast (dword) sin16s_genb::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_genb::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sin16sb::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16sb::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#5 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#6 ← (unumber)(number) 1 @@ -1910,8 +1892,6 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#4 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1922,14 +1902,10 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -1939,9 +1915,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 8 Simplifying constant integer cast 0 @@ -1960,8 +1933,6 @@ Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1970,14 +1941,10 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -1987,9 +1954,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 @@ -2051,7 +2015,6 @@ Alias (word) divr16u::return#3 = (word) divr16u::return#6 Alias (word) rem16u#16 = (word) rem16u#4 (word) rem16u#17 (word) rem16u#5 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#4 (dword) div32u16u::return#1 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#1 Alias (word) mul16u::a#2 = (word) mul16u::a#3 (word) mul16u::a#6 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#3 (dword) mul16u::return#1 @@ -2209,7 +2172,7 @@ Successful SSA optimization Pass2AliasElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (word) rem16u#15 (word) rem16u#1 Identical Phi Values (word) rem16u#16 (word) rem16u#1 -Identical Phi Values (dword) mul16u::mb#0 (word) mul16u::b#0 +Identical Phi Values (word) mul16u::b#1 (word) mul16u::b#0 Identical Phi Values (word) mul16u::a#5 (word) mul16u::a#1 Identical Phi Values (word) sin16s_gen::wavelength#1 (word) sin16s_gen::wavelength#0 Identical Phi Values (word) rem16u#27 (word) rem16u#31 @@ -2360,17 +2323,17 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $78 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [159] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Constant right-side identified [160] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [89] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [93] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 -Inlining Noop Cast [152] (signed word) sin16sb::sinx#0 ← (signed word)(word) sin16sb::usinx#1 keeping sin16sb::usinx#1 -Inlining Noop Cast [156] (signed word~) sin16sb::$18 ← (signed word)(word) sin16sb::usinx#1 keeping sin16sb::usinx#1 +Inlining Noop Cast [90] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [94] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 +Inlining Noop Cast [153] (signed word) sin16sb::sinx#0 ← (signed word)(word) sin16sb::usinx#1 keeping sin16sb::usinx#1 +Inlining Noop Cast [157] (signed word~) sin16sb::$18 ← (signed word)(word) sin16sb::usinx#1 keeping sin16sb::usinx#1 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [124] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 * (byte) 8 -Rewriting division to use shift [150] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 / (byte) $10 +Rewriting multiplication to use shift [125] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 * (byte) 8 +Rewriting division to use shift [151] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 / (byte) $10 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2420,21 +2383,21 @@ Constant inlined mulu16_sel::v2#7 = (word)(number) $10000/(number) 6 Constant inlined mulu16_sel::select#4 = (byte) 0 Constant inlined mulu16_sel::select#5 = (byte) 0 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined mulu16_sel::select#2 = (byte) 1 Constant inlined mulu16_sel::select#3 = (byte) 0 -Constant inlined mul16u::res#0 = (byte) 0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined mulu16_sel::select#0 = (byte) 0 Constant inlined sin16s::isUpper#1 = (byte) 1 Constant inlined mulu16_sel::select#1 = (byte) 1 Constant inlined sin16s_genb::sintab#1 = (const signed word*) main::sintab2 Constant inlined main::i#0 = (byte) 0 -Constant inlined sin16s_genb::x#0 = (byte) 0 +Constant inlined sin16s_genb::x#0 = (dword) 0 Constant inlined sin16sb::isUpper#1 = (byte) 1 Constant inlined sin16s_genb::wavelength#0 = (const word) main::wavelength Constant inlined sin16sb::isUpper#0 = (byte) 0 -Constant inlined sin16s_gen::i#0 = (byte) 0 -Constant inlined sin16s_genb::i#0 = (byte) 0 +Constant inlined sin16s_gen::i#0 = (word) 0 +Constant inlined sin16s_genb::i#0 = (word) 0 Constant inlined mulu16_sel::select#8 = (byte) 0 Constant inlined mulu16_sel::select#9 = (byte) 0 Constant inlined mulu16_sel::select#6 = (byte) 1 @@ -2445,7 +2408,7 @@ Constant inlined print_char::ch#1 = (byte) ' ' Constant inlined main::st1#0 = (const signed word*) main::sintab1 Constant inlined mulu16_sel::v2#2 = (word)(number) $10000/(number) 6 Constant inlined print_char::ch#0 = (byte) '-' -Constant inlined sin16s_gen::x#0 = (byte) 0 +Constant inlined sin16s_gen::x#0 = (dword) 0 Constant inlined div32u16u::divisor#1 = (const word) main::wavelength Constant inlined print_str::str#2 = (const string) main::str1 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 @@ -2520,9 +2483,9 @@ Calls in [print_cls] to memset:85 Calls in [sin16s_genb] to div32u16u:98 sin16sb:105 Calls in [sin16sb] to mulu16_sel:128 mulu16_sel:135 mulu16_sel:140 mulu16_sel:148 mulu16_sel:155 Calls in [mulu16_sel] to mul16u:171 -Calls in [div32u16u] to divr16u:195 divr16u:200 -Calls in [sin16s_gen] to div32u16u:236 sin16s:243 -Calls in [sin16s] to mulu16_sel:267 mulu16_sel:274 mulu16_sel:279 mulu16_sel:287 mulu16_sel:294 +Calls in [div32u16u] to divr16u:196 divr16u:201 +Calls in [sin16s_gen] to div32u16u:237 sin16s:244 +Calls in [sin16s] to mulu16_sel:268 mulu16_sel:275 mulu16_sel:280 mulu16_sel:288 mulu16_sel:295 Created 44 initial phi equivalence classes Coalesced [17] print_char_cursor#59 ← print_char_cursor#52 @@ -2565,43 +2528,43 @@ Coalesced [154] mulu16_sel::v2#16 ← mulu16_sel::v2#9 Coalesced [162] sin16sb::return#6 ← sin16sb::sinx#1 Coalesced [166] sin16sb::x#10 ← sin16sb::x#4 Coalesced [167] sin16sb::x#8 ← sin16sb::x#0 -Coalesced [177] mul16u::a#7 ← mul16u::a#1 -Coalesced [178] mul16u::mb#6 ← mul16u::b#0 -Coalesced [186] mul16u::res#9 ← mul16u::res#1 -Coalesced [190] mul16u::a#8 ← mul16u::a#0 -Coalesced [191] mul16u::res#7 ← mul16u::res#6 -Coalesced [192] mul16u::mb#7 ← mul16u::mb#1 -Coalesced (already) [193] mul16u::res#8 ← mul16u::res#2 -Coalesced [199] divr16u::rem#12 ← divr16u::rem#4 -Coalesced [206] divr16u::rem#13 ← divr16u::rem#10 -Coalesced [207] divr16u::dividend#9 ← divr16u::dividend#5 -Coalesced [214] divr16u::rem#16 ← divr16u::rem#1 -Coalesced [221] divr16u::rem#18 ← divr16u::rem#2 -Coalesced [222] divr16u::return#8 ← divr16u::quotient#2 -Coalesced [228] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [229] divr16u::dividend#10 ← divr16u::dividend#0 -Coalesced [230] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [231] divr16u::i#7 ← divr16u::i#1 -Coalesced [232] divr16u::rem#17 ← divr16u::rem#6 -Coalesced [233] divr16u::return#7 ← divr16u::quotient#1 -Coalesced [234] divr16u::rem#15 ← divr16u::rem#0 -Coalesced [250] sin16s_gen::i#5 ← sin16s_gen::i#1 -Coalesced [251] sin16s_gen::x#5 ← sin16s_gen::x#1 -Coalesced [252] sin16s_gen::sintab#7 ← sin16s_gen::sintab#0 -Coalesced [255] sin16s::x#9 ← sin16s::x#1 -Coalesced [259] sin16s::x#11 ← sin16s::x#2 -Coalesced [265] mulu16_sel::v1#13 ← mulu16_sel::v1#0 -Coalesced [266] mulu16_sel::v2#13 ← mulu16_sel::v2#0 -Coalesced [272] mulu16_sel::v1#14 ← mulu16_sel::v1#1 -Coalesced [273] mulu16_sel::v2#14 ← mulu16_sel::v2#1 -Coalesced [278] mulu16_sel::v1#15 ← mulu16_sel::v1#2 -Coalesced [285] mulu16_sel::v1#11 ← mulu16_sel::v1#3 -Coalesced [286] mulu16_sel::v2#11 ← mulu16_sel::v2#3 -Coalesced [292] mulu16_sel::v1#12 ← mulu16_sel::v1#4 -Coalesced [293] mulu16_sel::v2#12 ← mulu16_sel::v2#4 -Coalesced [301] sin16s::return#6 ← sin16s::sinx#1 -Coalesced [305] sin16s::x#10 ← sin16s::x#4 -Coalesced [306] sin16s::x#8 ← sin16s::x#0 +Coalesced [178] mul16u::a#7 ← mul16u::a#1 +Coalesced [179] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [187] mul16u::res#9 ← mul16u::res#1 +Coalesced [191] mul16u::a#8 ← mul16u::a#0 +Coalesced [192] mul16u::res#7 ← mul16u::res#6 +Coalesced [193] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [194] mul16u::res#8 ← mul16u::res#2 +Coalesced [200] divr16u::rem#12 ← divr16u::rem#4 +Coalesced [207] divr16u::rem#13 ← divr16u::rem#10 +Coalesced [208] divr16u::dividend#9 ← divr16u::dividend#5 +Coalesced [215] divr16u::rem#16 ← divr16u::rem#1 +Coalesced [222] divr16u::rem#18 ← divr16u::rem#2 +Coalesced [223] divr16u::return#8 ← divr16u::quotient#2 +Coalesced [229] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [230] divr16u::dividend#10 ← divr16u::dividend#0 +Coalesced [231] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [232] divr16u::i#7 ← divr16u::i#1 +Coalesced [233] divr16u::rem#17 ← divr16u::rem#6 +Coalesced [234] divr16u::return#7 ← divr16u::quotient#1 +Coalesced [235] divr16u::rem#15 ← divr16u::rem#0 +Coalesced [251] sin16s_gen::i#5 ← sin16s_gen::i#1 +Coalesced [252] sin16s_gen::x#5 ← sin16s_gen::x#1 +Coalesced [253] sin16s_gen::sintab#7 ← sin16s_gen::sintab#0 +Coalesced [256] sin16s::x#9 ← sin16s::x#1 +Coalesced [260] sin16s::x#11 ← sin16s::x#2 +Coalesced [266] mulu16_sel::v1#13 ← mulu16_sel::v1#0 +Coalesced [267] mulu16_sel::v2#13 ← mulu16_sel::v2#0 +Coalesced [273] mulu16_sel::v1#14 ← mulu16_sel::v1#1 +Coalesced [274] mulu16_sel::v2#14 ← mulu16_sel::v2#1 +Coalesced [279] mulu16_sel::v1#15 ← mulu16_sel::v1#2 +Coalesced [286] mulu16_sel::v1#11 ← mulu16_sel::v1#3 +Coalesced [287] mulu16_sel::v2#11 ← mulu16_sel::v2#3 +Coalesced [293] mulu16_sel::v1#12 ← mulu16_sel::v1#4 +Coalesced [294] mulu16_sel::v2#12 ← mulu16_sel::v2#4 +Coalesced [302] sin16s::return#6 ← sin16s::sinx#1 +Coalesced [306] sin16s::x#10 ← sin16s::x#4 +Coalesced [307] sin16s::x#8 ← sin16s::x#0 Coalesced down to 31 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @35 @@ -2668,7 +2631,6 @@ Adding NOP phi() at start of print_sword::@1 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset Adding NOP phi() at start of sin16s_genb -Adding NOP phi() at start of mul16u Adding NOP phi() at start of div32u16u Adding NOP phi() at start of sin16s_gen @@ -2846,8 +2808,8 @@ sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb to:sin16s_genb::@1 sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@3 sin16s_genb::@4 [72] (signed word*) sin16s_genb::sintab#2 ← phi( sin16s_genb::@3/(const signed word*) main::sintab2 sin16s_genb::@4/(signed word*) sin16s_genb::sintab#0 ) - [72] (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@3/(byte) 0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) - [72] (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(byte) 0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) + [72] (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@3/(dword) 0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) + [72] (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(word) 0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 to:sin16s_genb::@return sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 @@ -2957,11 +2919,11 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel - [131] phi() + [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [132] (dword) mul16u::mb#2 ← phi( mul16u/(word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [132] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [132] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [132] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [132] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -3008,7 +2970,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [152] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [152] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [152] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [152] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [152] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [153] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 @@ -3053,8 +3015,8 @@ sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [173] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintab1 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) + [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) + [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 @@ -3216,6 +3178,7 @@ VARIABLE REGISTER WEIGHTS (word) mul16u::b (word) mul16u::b#0 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 (dword) mul16u::mb#2 43.57142857142858 (dword) mul16u::res @@ -3395,7 +3358,6 @@ VARIABLE REGISTER WEIGHTS (word) sin16sb::x5_128 (word) sin16sb::x5_128#0 4.0 -Not consolidating phi with different size mul16u::mb#2 mul16u::b#0 Initial phi equivalence classes [ main::st1#2 main::st1#1 ] [ main::st2#2 main::st2#1 ] @@ -3417,8 +3379,7 @@ Initial phi equivalence classes [ mulu16_sel::select#10 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -[ mul16u::mb#2 mul16u::mb#1 ] -[ mul16u::b#0 ] +[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -3451,6 +3412,7 @@ Added variable mulu16_sel::return#11 to live range equivalence class [ mulu16_se Added variable sin16sb::x5#0 to live range equivalence class [ sin16sb::x5#0 ] Added variable sin16sb::x5_128#0 to live range equivalence class [ sin16sb::x5_128#0 ] Added variable sin16sb::usinx#1 to live range equivalence class [ sin16sb::usinx#1 ] +Added variable mul16u::b#0 to live range equivalence class [ mul16u::b#0 ] Added variable mul16u::return#2 to live range equivalence class [ mul16u::return#2 ] Added variable mulu16_sel::$0 to live range equivalence class [ mulu16_sel::$0 ] Added variable mulu16_sel::$1 to live range equivalence class [ mulu16_sel::$1 ] @@ -3504,8 +3466,7 @@ Complete equivalence classes [ mulu16_sel::select#10 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -[ mul16u::mb#2 mul16u::mb#1 ] -[ mul16u::b#0 ] +[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -3538,6 +3499,7 @@ Complete equivalence classes [ sin16sb::x5#0 ] [ sin16sb::x5_128#0 ] [ sin16sb::usinx#1 ] +[ mul16u::b#0 ] [ mul16u::return#2 ] [ mulu16_sel::$0 ] [ mulu16_sel::$1 ] @@ -3590,40 +3552,40 @@ Allocated zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_ Allocated zp[1]:34 [ mulu16_sel::select#10 ] Allocated zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -Allocated zp[4]:41 [ mul16u::mb#2 mul16u::mb#1 ] -Allocated zp[2]:45 [ mul16u::b#0 ] -Allocated zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] -Allocated zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp[1]:53 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp[2]:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] -Allocated zp[4]:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] -Allocated zp[2]:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] -Allocated zp[1]:62 [ sin16s::isUpper#2 ] -Allocated zp[4]:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] -Allocated zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] -Allocated zp[2]:69 [ main::sw#0 ] -Allocated zp[2]:71 [ print_word::w#0 ] -Allocated zp[1]:73 [ print_byte::$0 ] -Allocated zp[1]:74 [ print_byte::$2 ] -Allocated zp[4]:75 [ div32u16u::return#3 ] -Allocated zp[4]:79 [ sin16s_genb::step#0 ] -Allocated zp[2]:83 [ sin16sb::return#0 ] -Allocated zp[2]:85 [ sin16s_genb::$3 ] -Allocated zp[2]:87 [ sin16sb::x1#0 ] -Allocated zp[2]:89 [ mulu16_sel::return#18 ] -Allocated zp[2]:91 [ sin16sb::x2#0 ] -Allocated zp[2]:93 [ mulu16_sel::return#19 ] -Allocated zp[2]:95 [ sin16sb::x3#0 ] -Allocated zp[2]:97 [ mulu16_sel::return#20 ] -Allocated zp[2]:99 [ sin16sb::x3_6#0 ] -Allocated zp[2]:101 [ sin16sb::usinx#0 ] -Allocated zp[2]:103 [ mulu16_sel::return#10 ] -Allocated zp[2]:105 [ sin16sb::x4#0 ] -Allocated zp[2]:107 [ mulu16_sel::return#11 ] -Allocated zp[2]:109 [ sin16sb::x5#0 ] -Allocated zp[2]:111 [ sin16sb::x5_128#0 ] -Allocated zp[2]:113 [ sin16sb::usinx#1 ] +Allocated zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] +Allocated zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] +Allocated zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] +Allocated zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] +Allocated zp[1]:60 [ sin16s::isUpper#2 ] +Allocated zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] +Allocated zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] +Allocated zp[2]:67 [ main::sw#0 ] +Allocated zp[2]:69 [ print_word::w#0 ] +Allocated zp[1]:71 [ print_byte::$0 ] +Allocated zp[1]:72 [ print_byte::$2 ] +Allocated zp[4]:73 [ div32u16u::return#3 ] +Allocated zp[4]:77 [ sin16s_genb::step#0 ] +Allocated zp[2]:81 [ sin16sb::return#0 ] +Allocated zp[2]:83 [ sin16s_genb::$3 ] +Allocated zp[2]:85 [ sin16sb::x1#0 ] +Allocated zp[2]:87 [ mulu16_sel::return#18 ] +Allocated zp[2]:89 [ sin16sb::x2#0 ] +Allocated zp[2]:91 [ mulu16_sel::return#19 ] +Allocated zp[2]:93 [ sin16sb::x3#0 ] +Allocated zp[2]:95 [ mulu16_sel::return#20 ] +Allocated zp[2]:97 [ sin16sb::x3_6#0 ] +Allocated zp[2]:99 [ sin16sb::usinx#0 ] +Allocated zp[2]:101 [ mulu16_sel::return#10 ] +Allocated zp[2]:103 [ sin16sb::x4#0 ] +Allocated zp[2]:105 [ mulu16_sel::return#11 ] +Allocated zp[2]:107 [ sin16sb::x5#0 ] +Allocated zp[2]:109 [ sin16sb::x5_128#0 ] +Allocated zp[2]:111 [ sin16sb::usinx#1 ] +Allocated zp[2]:113 [ mul16u::b#0 ] Allocated zp[4]:115 [ mul16u::return#2 ] Allocated zp[4]:119 [ mulu16_sel::$0 ] Allocated zp[4]:123 [ mulu16_sel::$1 ] @@ -3700,7 +3662,7 @@ __bend: // main main: { .label wavelength = $78 - .label sw = $45 + .label sw = $43 .label st1 = 2 .label st2 = 4 .label i = 6 @@ -3980,9 +3942,9 @@ print_char: { } // print_word // Print a word as HEX -// print_word(word zp($47) w) +// print_word(word zp($45) w) print_word: { - .label w = $47 + .label w = $45 // [46] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuz1=_hi_vwuz2 lda.z w+1 sta.z print_byte.b @@ -4012,8 +3974,8 @@ print_word: { // Print a byte as HEX // print_byte(byte zp($e) b) print_byte: { - .label __0 = $49 - .label __2 = $4a + .label __0 = $47 + .label __2 = $48 .label b = $e // [52] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b @@ -4120,8 +4082,8 @@ memset: { // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_genb(signed word* zp($17) sintab) sin16s_genb: { - .label __3 = $55 - .label step = $4f + .label __3 = $53 + .label step = $4d .label sintab = $17 // u[4.28] // Iterate over the table @@ -4159,14 +4121,16 @@ sin16s_genb: { sta.z sintab lda #>main.sintab2 sta.z sintab+1 - // [72] phi (dword) sin16s_genb::x#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vbuc1 - lda #0 + // [72] phi (dword) sin16s_genb::x#2 = (dword) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [72] phi (word) sin16s_genb::i#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vbuc1 + // [72] phi (word) sin16s_genb::i#2 = (word) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4259,16 +4223,16 @@ sin16s_genb: { // sin16sb(word zp($1a) x) sin16sb: { .label x = $1a - .label return = $53 - .label x1 = $57 - .label x2 = $5b - .label x3 = $5f - .label x3_6 = $63 - .label usinx = $65 - .label x4 = $69 - .label x5 = $6d - .label x5_128 = $6f - .label usinx_1 = $71 + .label return = $51 + .label x1 = $55 + .label x2 = $59 + .label x3 = $5d + .label x3_6 = $61 + .label usinx = $63 + .label x4 = $67 + .label x5 = $6b + .label x5_128 = $6d + .label usinx_1 = $6f .label return_1 = $1c .label sinx = $1c // Move x1 into the range 0-PI/2 using sinus mirror symmetries @@ -4582,16 +4546,16 @@ mulu16_sel: { .label v2 = $20 .label return = $a4 .label return_1 = $a8 - .label return_2 = $67 - .label return_3 = $6b + .label return_2 = $65 + .label return_3 = $69 .label return_4 = $ac .label return_5 = $b2 .label return_6 = $b6 .label select = $22 .label return_7 = $7f - .label return_8 = $59 - .label return_9 = $5d - .label return_10 = $61 + .label return_8 = $57 + .label return_9 = $5b + .label return_10 = $5f // [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a @@ -4603,8 +4567,6 @@ mulu16_sel: { lda.z v2+1 sta.z mul16u.b+1 // [125] call mul16u - // [131] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] - mul16u_from_mulu16_sel: jsr mul16u // [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -4659,17 +4621,15 @@ mulu16_sel: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($23) a, word zp($2d) b) +// mul16u(word zp($23) a, word zp($71) b) mul16u: { .label __1 = $81 - .label a = $23 .label mb = $29 + .label a = $23 .label res = $25 - .label b = $2d + .label b = $71 .label return = $73 - // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [132] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -4677,12 +4637,17 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [132] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + __b1_from_mul16u: + // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [132] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [132] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 @@ -4755,7 +4720,7 @@ div32u16u: { .label quotient_lo = $88 .label return = $8a .label return_1 = $92 - .label return_2 = $4b + .label return_2 = $49 // [142] call divr16u // [151] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: @@ -4831,15 +4796,15 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($31) dividend, word zp($2f) rem) +// divr16u(word zp($2f) dividend, word zp($2d) rem) divr16u: { .label __1 = $8e .label __2 = $8f - .label rem = $2f - .label dividend = $31 - .label quotient = $33 - .label i = $35 - .label return = $33 + .label rem = $2d + .label dividend = $2f + .label quotient = $31 + .label i = $33 + .label return = $31 .label return_1 = $82 .label return_2 = $86 // [152] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] @@ -4847,7 +4812,7 @@ divr16u: { // [152] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [152] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [152] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -4955,15 +4920,15 @@ divr16u: { // Generate signed (large) word sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin16s_gen(signed word* zp($3c) sintab) +// sin16s_gen(signed word* zp($3a) sintab) sin16s_gen: { .label __2 = $9c .label step = $96 - .label sintab = $3c + .label sintab = $3a // u[4.28] // Iterate over the table - .label x = $38 - .label i = $36 + .label x = $36 + .label i = $34 // [170] call div32u16u // [141] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] div32u16u_from_sin16s_gen: @@ -4996,14 +4961,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - // [173] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [173] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [173] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [173] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5097,10 +5064,10 @@ sin16s_gen: { // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff -// sin16s(dword zp($3f) x) +// sin16s(dword zp($3d) x) sin16s: { .label __4 = $9e - .label x = $3f + .label x = $3d .label return = $9a .label x1 = $a2 .label x2 = $a6 @@ -5111,10 +5078,10 @@ sin16s: { .label x5 = $b8 .label x5_128 = $ba .label usinx_1 = $bc - .label return_1 = $43 - .label sinx = $43 + .label return_1 = $41 + .label sinx = $41 // Move x1 into the range 0-PI/2 using sinus mirror symmetries - .label isUpper = $3e + .label isUpper = $3c // [184] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 @@ -5522,12 +5489,13 @@ Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb: Statement [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#5 ] ) always clobbers reg byte a Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:34 [ mulu16_sel::select#10 ] -Removing always clobbered register reg byte a as potential for zp[1]:62 [ sin16s::isUpper#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:60 [ sin16s::isUpper#2 ] Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] ) always clobbers reg byte a Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] ) always clobbers reg byte a Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a +Statement [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a @@ -5538,7 +5506,7 @@ Statement [147] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16 Statement [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a Statement [149] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::return#0 ] main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::return#0 ] ) always clobbers reg byte a Statement [154] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:53 [ divr16u::i#2 divr16u::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] Statement [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a Statement [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a @@ -5643,6 +5611,7 @@ Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel: Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] ) always clobbers reg byte a Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] ) always clobbers reg byte a +Statement [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a @@ -5716,40 +5685,40 @@ Potential registers zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2 Potential registers zp[1]:34 [ mulu16_sel::select#10 ] : zp[1]:34 , reg byte x , reg byte y , Potential registers zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] : zp[2]:35 , Potential registers zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:37 , -Potential registers zp[4]:41 [ mul16u::mb#2 mul16u::mb#1 ] : zp[4]:41 , -Potential registers zp[2]:45 [ mul16u::b#0 ] : zp[2]:45 , -Potential registers zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:47 , -Potential registers zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:49 , -Potential registers zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:51 , -Potential registers zp[1]:53 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:53 , reg byte x , reg byte y , -Potential registers zp[2]:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp[2]:54 , -Potential registers zp[4]:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp[4]:56 , -Potential registers zp[2]:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp[2]:60 , -Potential registers zp[1]:62 [ sin16s::isUpper#2 ] : zp[1]:62 , reg byte x , reg byte y , -Potential registers zp[4]:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:63 , -Potential registers zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:67 , -Potential registers zp[2]:69 [ main::sw#0 ] : zp[2]:69 , -Potential registers zp[2]:71 [ print_word::w#0 ] : zp[2]:71 , -Potential registers zp[1]:73 [ print_byte::$0 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:74 [ print_byte::$2 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:75 [ div32u16u::return#3 ] : zp[4]:75 , -Potential registers zp[4]:79 [ sin16s_genb::step#0 ] : zp[4]:79 , -Potential registers zp[2]:83 [ sin16sb::return#0 ] : zp[2]:83 , -Potential registers zp[2]:85 [ sin16s_genb::$3 ] : zp[2]:85 , -Potential registers zp[2]:87 [ sin16sb::x1#0 ] : zp[2]:87 , -Potential registers zp[2]:89 [ mulu16_sel::return#18 ] : zp[2]:89 , -Potential registers zp[2]:91 [ sin16sb::x2#0 ] : zp[2]:91 , -Potential registers zp[2]:93 [ mulu16_sel::return#19 ] : zp[2]:93 , -Potential registers zp[2]:95 [ sin16sb::x3#0 ] : zp[2]:95 , -Potential registers zp[2]:97 [ mulu16_sel::return#20 ] : zp[2]:97 , -Potential registers zp[2]:99 [ sin16sb::x3_6#0 ] : zp[2]:99 , -Potential registers zp[2]:101 [ sin16sb::usinx#0 ] : zp[2]:101 , -Potential registers zp[2]:103 [ mulu16_sel::return#10 ] : zp[2]:103 , -Potential registers zp[2]:105 [ sin16sb::x4#0 ] : zp[2]:105 , -Potential registers zp[2]:107 [ mulu16_sel::return#11 ] : zp[2]:107 , -Potential registers zp[2]:109 [ sin16sb::x5#0 ] : zp[2]:109 , -Potential registers zp[2]:111 [ sin16sb::x5_128#0 ] : zp[2]:111 , -Potential registers zp[2]:113 [ sin16sb::usinx#1 ] : zp[2]:113 , +Potential registers zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:41 , +Potential registers zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:45 , +Potential registers zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:47 , +Potential registers zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:49 , +Potential registers zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:51 , reg byte x , reg byte y , +Potential registers zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp[2]:52 , +Potential registers zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp[4]:54 , +Potential registers zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp[2]:58 , +Potential registers zp[1]:60 [ sin16s::isUpper#2 ] : zp[1]:60 , reg byte x , reg byte y , +Potential registers zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:61 , +Potential registers zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:65 , +Potential registers zp[2]:67 [ main::sw#0 ] : zp[2]:67 , +Potential registers zp[2]:69 [ print_word::w#0 ] : zp[2]:69 , +Potential registers zp[1]:71 [ print_byte::$0 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:72 [ print_byte::$2 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:73 [ div32u16u::return#3 ] : zp[4]:73 , +Potential registers zp[4]:77 [ sin16s_genb::step#0 ] : zp[4]:77 , +Potential registers zp[2]:81 [ sin16sb::return#0 ] : zp[2]:81 , +Potential registers zp[2]:83 [ sin16s_genb::$3 ] : zp[2]:83 , +Potential registers zp[2]:85 [ sin16sb::x1#0 ] : zp[2]:85 , +Potential registers zp[2]:87 [ mulu16_sel::return#18 ] : zp[2]:87 , +Potential registers zp[2]:89 [ sin16sb::x2#0 ] : zp[2]:89 , +Potential registers zp[2]:91 [ mulu16_sel::return#19 ] : zp[2]:91 , +Potential registers zp[2]:93 [ sin16sb::x3#0 ] : zp[2]:93 , +Potential registers zp[2]:95 [ mulu16_sel::return#20 ] : zp[2]:95 , +Potential registers zp[2]:97 [ sin16sb::x3_6#0 ] : zp[2]:97 , +Potential registers zp[2]:99 [ sin16sb::usinx#0 ] : zp[2]:99 , +Potential registers zp[2]:101 [ mulu16_sel::return#10 ] : zp[2]:101 , +Potential registers zp[2]:103 [ sin16sb::x4#0 ] : zp[2]:103 , +Potential registers zp[2]:105 [ mulu16_sel::return#11 ] : zp[2]:105 , +Potential registers zp[2]:107 [ sin16sb::x5#0 ] : zp[2]:107 , +Potential registers zp[2]:109 [ sin16sb::x5_128#0 ] : zp[2]:109 , +Potential registers zp[2]:111 [ sin16sb::usinx#1 ] : zp[2]:111 , +Potential registers zp[2]:113 [ mul16u::b#0 ] : zp[2]:113 , Potential registers zp[4]:115 [ mul16u::return#2 ] : zp[4]:115 , Potential registers zp[4]:119 [ mulu16_sel::$0 ] : zp[4]:119 , Potential registers zp[4]:123 [ mulu16_sel::$1 ] : zp[4]:123 , @@ -5784,119 +5753,119 @@ Potential registers zp[2]:186 [ sin16s::x5_128#0 ] : zp[2]:186 , Potential registers zp[2]:188 [ sin16s::usinx#1 ] : zp[2]:188 , REGISTER UPLIFT SCOPES -Uplift Scope [mul16u] 353.83: zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 245.57: zp[4]:41 [ mul16u::mb#2 mul16u::mb#1 ] 202: zp[1]:129 [ mul16u::$1 ] 170: zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp[4]:115 [ mul16u::return#2 ] 2: zp[2]:45 [ mul16u::b#0 ] +Uplift Scope [mul16u] 353.83: zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:129 [ mul16u::$1 ] 170: zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp[4]:115 [ mul16u::return#2 ] 2: zp[2]:113 [ mul16u::b#0 ] Uplift Scope [print_str] 305.5: zp[2]:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplift Scope [divr16u] 106.92: zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:142 [ divr16u::$1 ] 22: zp[1]:143 [ divr16u::$2 ] 18.19: zp[1]:53 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:130 [ divr16u::return#2 ] 4: zp[2]:134 [ divr16u::return#3 ] +Uplift Scope [divr16u] 106.92: zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:142 [ divr16u::$1 ] 22: zp[1]:143 [ divr16u::$2 ] 18.19: zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:130 [ divr16u::return#2 ] 4: zp[2]:134 [ divr16u::return#3 ] Uplift Scope [] 177.86: zp[2]:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] 0.8: zp[2]:144 [ rem16u#1 ] -Uplift Scope [mulu16_sel] 46: zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] 41: zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] 4: zp[2]:89 [ mulu16_sel::return#18 ] 4: zp[2]:93 [ mulu16_sel::return#19 ] 4: zp[2]:97 [ mulu16_sel::return#20 ] 4: zp[2]:103 [ mulu16_sel::return#10 ] 4: zp[2]:107 [ mulu16_sel::return#11 ] 4: zp[4]:119 [ mulu16_sel::$0 ] 4: zp[4]:123 [ mulu16_sel::$1 ] 4: zp[2]:164 [ mulu16_sel::return#0 ] 4: zp[2]:168 [ mulu16_sel::return#1 ] 4: zp[2]:172 [ mulu16_sel::return#14 ] 4: zp[2]:178 [ mulu16_sel::return#15 ] 4: zp[2]:182 [ mulu16_sel::return#16 ] 1.83: zp[2]:127 [ mulu16_sel::return#17 ] 0.33: zp[1]:34 [ mulu16_sel::select#10 ] -Uplift Scope [sin16s] 27.5: zp[4]:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:154 [ sin16s::return#0 ] 13: zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:158 [ sin16s::$4 ] 4: zp[2]:166 [ sin16s::x2#0 ] 4: zp[2]:174 [ sin16s::x3_6#0 ] 4: zp[2]:180 [ sin16s::x4#0 ] 4: zp[2]:184 [ sin16s::x5#0 ] 4: zp[2]:186 [ sin16s::x5_128#0 ] 1: zp[2]:170 [ sin16s::x3#0 ] 1: zp[2]:188 [ sin16s::usinx#1 ] 0.64: zp[2]:162 [ sin16s::x1#0 ] 0.33: zp[2]:176 [ sin16s::usinx#0 ] 0.06: zp[1]:62 [ sin16s::isUpper#2 ] -Uplift Scope [sin16sb] 27.5: zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] 22: zp[2]:83 [ sin16sb::return#0 ] 13: zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] 4: zp[2]:91 [ sin16sb::x2#0 ] 4: zp[2]:99 [ sin16sb::x3_6#0 ] 4: zp[2]:105 [ sin16sb::x4#0 ] 4: zp[2]:109 [ sin16sb::x5#0 ] 4: zp[2]:111 [ sin16sb::x5_128#0 ] 1: zp[2]:95 [ sin16sb::x3#0 ] 1: zp[2]:113 [ sin16sb::usinx#1 ] 0.64: zp[2]:87 [ sin16sb::x1#0 ] 0.33: zp[2]:101 [ sin16sb::usinx#0 ] 0.06: zp[1]:25 [ sin16sb::isUpper#2 ] -Uplift Scope [sin16s_gen] 25.67: zp[2]:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp[2]:156 [ sin16s_gen::$2 ] 15.12: zp[4]:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp[2]:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp[4]:150 [ sin16s_gen::step#0 ] -Uplift Scope [sin16s_genb] 25.67: zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] 22: zp[2]:85 [ sin16s_genb::$3 ] 15.12: zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] 12.05: zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] 1.18: zp[4]:79 [ sin16s_genb::step#0 ] -Uplift Scope [main] 18.33: zp[1]:6 [ main::i#2 main::i#1 ] 10.33: zp[2]:4 [ main::st2#2 main::st2#1 ] 8.8: zp[2]:2 [ main::st1#2 main::st1#1 ] 6.6: zp[2]:69 [ main::sw#0 ] +Uplift Scope [mulu16_sel] 46: zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] 41: zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] 4: zp[2]:87 [ mulu16_sel::return#18 ] 4: zp[2]:91 [ mulu16_sel::return#19 ] 4: zp[2]:95 [ mulu16_sel::return#20 ] 4: zp[2]:101 [ mulu16_sel::return#10 ] 4: zp[2]:105 [ mulu16_sel::return#11 ] 4: zp[4]:119 [ mulu16_sel::$0 ] 4: zp[4]:123 [ mulu16_sel::$1 ] 4: zp[2]:164 [ mulu16_sel::return#0 ] 4: zp[2]:168 [ mulu16_sel::return#1 ] 4: zp[2]:172 [ mulu16_sel::return#14 ] 4: zp[2]:178 [ mulu16_sel::return#15 ] 4: zp[2]:182 [ mulu16_sel::return#16 ] 1.83: zp[2]:127 [ mulu16_sel::return#17 ] 0.33: zp[1]:34 [ mulu16_sel::select#10 ] +Uplift Scope [sin16s] 27.5: zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:154 [ sin16s::return#0 ] 13: zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:158 [ sin16s::$4 ] 4: zp[2]:166 [ sin16s::x2#0 ] 4: zp[2]:174 [ sin16s::x3_6#0 ] 4: zp[2]:180 [ sin16s::x4#0 ] 4: zp[2]:184 [ sin16s::x5#0 ] 4: zp[2]:186 [ sin16s::x5_128#0 ] 1: zp[2]:170 [ sin16s::x3#0 ] 1: zp[2]:188 [ sin16s::usinx#1 ] 0.64: zp[2]:162 [ sin16s::x1#0 ] 0.33: zp[2]:176 [ sin16s::usinx#0 ] 0.06: zp[1]:60 [ sin16s::isUpper#2 ] +Uplift Scope [sin16sb] 27.5: zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] 22: zp[2]:81 [ sin16sb::return#0 ] 13: zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] 4: zp[2]:89 [ sin16sb::x2#0 ] 4: zp[2]:97 [ sin16sb::x3_6#0 ] 4: zp[2]:103 [ sin16sb::x4#0 ] 4: zp[2]:107 [ sin16sb::x5#0 ] 4: zp[2]:109 [ sin16sb::x5_128#0 ] 1: zp[2]:93 [ sin16sb::x3#0 ] 1: zp[2]:111 [ sin16sb::usinx#1 ] 0.64: zp[2]:85 [ sin16sb::x1#0 ] 0.33: zp[2]:99 [ sin16sb::usinx#0 ] 0.06: zp[1]:25 [ sin16sb::isUpper#2 ] +Uplift Scope [sin16s_gen] 25.67: zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp[2]:156 [ sin16s_gen::$2 ] 15.12: zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp[4]:150 [ sin16s_gen::step#0 ] +Uplift Scope [sin16s_genb] 25.67: zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] 22: zp[2]:83 [ sin16s_genb::$3 ] 15.12: zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] 12.05: zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] 1.18: zp[4]:77 [ sin16s_genb::step#0 ] +Uplift Scope [main] 18.33: zp[1]:6 [ main::i#2 main::i#1 ] 10.33: zp[2]:4 [ main::st2#2 main::st2#1 ] 8.8: zp[2]:2 [ main::st1#2 main::st1#1 ] 6.6: zp[2]:67 [ main::sw#0 ] Uplift Scope [memset] 36.67: zp[2]:15 [ memset::dst#2 memset::dst#1 ] -Uplift Scope [print_byte] 10: zp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:73 [ print_byte::$0 ] 4: zp[1]:74 [ print_byte::$2 ] -Uplift Scope [div32u16u] 4: zp[4]:75 [ div32u16u::return#3 ] 4: zp[2]:136 [ div32u16u::quotient_lo#0 ] 4: zp[4]:146 [ div32u16u::return#2 ] 1.5: zp[4]:138 [ div32u16u::return#0 ] 0.8: zp[2]:132 [ div32u16u::quotient_hi#0 ] +Uplift Scope [print_byte] 10: zp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:71 [ print_byte::$0 ] 4: zp[1]:72 [ print_byte::$2 ] +Uplift Scope [div32u16u] 4: zp[4]:73 [ div32u16u::return#3 ] 4: zp[2]:136 [ div32u16u::quotient_lo#0 ] 4: zp[4]:146 [ div32u16u::return#2 ] 1.5: zp[4]:138 [ div32u16u::return#0 ] 0.8: zp[2]:132 [ div32u16u::quotient_hi#0 ] Uplift Scope [print_char] 14: zp[1]:11 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sword] 10.83: zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplift Scope [print_word] 2: zp[2]:71 [ print_word::w#0 ] +Uplift Scope [print_word] 2: zp[2]:69 [ print_word::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul16u] best 29984 combination zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:41 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:115 [ mul16u::return#2 ] zp[2]:45 [ mul16u::b#0 ] -Uplifting [print_str] best 29984 combination zp[2]:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 29774 combination zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:130 [ divr16u::return#2 ] zp[2]:134 [ divr16u::return#3 ] -Uplifting [] best 29774 combination zp[2]:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] zp[2]:144 [ rem16u#1 ] -Uplifting [mulu16_sel] best 29743 combination zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp[2]:89 [ mulu16_sel::return#18 ] zp[2]:93 [ mulu16_sel::return#19 ] zp[2]:97 [ mulu16_sel::return#20 ] zp[2]:103 [ mulu16_sel::return#10 ] zp[2]:107 [ mulu16_sel::return#11 ] zp[4]:119 [ mulu16_sel::$0 ] zp[4]:123 [ mulu16_sel::$1 ] zp[2]:164 [ mulu16_sel::return#0 ] zp[2]:168 [ mulu16_sel::return#1 ] zp[2]:172 [ mulu16_sel::return#14 ] zp[2]:178 [ mulu16_sel::return#15 ] zp[2]:182 [ mulu16_sel::return#16 ] zp[2]:127 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ] -Uplifting [sin16s] best 29734 combination zp[4]:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:154 [ sin16s::return#0 ] zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:158 [ sin16s::$4 ] zp[2]:166 [ sin16s::x2#0 ] zp[2]:174 [ sin16s::x3_6#0 ] zp[2]:180 [ sin16s::x4#0 ] zp[2]:184 [ sin16s::x5#0 ] zp[2]:186 [ sin16s::x5_128#0 ] zp[2]:170 [ sin16s::x3#0 ] zp[2]:188 [ sin16s::usinx#1 ] zp[2]:162 [ sin16s::x1#0 ] zp[2]:176 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16sb] best 29725 combination zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp[2]:83 [ sin16sb::return#0 ] zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp[2]:91 [ sin16sb::x2#0 ] zp[2]:99 [ sin16sb::x3_6#0 ] zp[2]:105 [ sin16sb::x4#0 ] zp[2]:109 [ sin16sb::x5#0 ] zp[2]:111 [ sin16sb::x5_128#0 ] zp[2]:95 [ sin16sb::x3#0 ] zp[2]:113 [ sin16sb::usinx#1 ] zp[2]:87 [ sin16sb::x1#0 ] zp[2]:101 [ sin16sb::usinx#0 ] reg byte y [ sin16sb::isUpper#2 ] -Uplifting [sin16s_gen] best 29725 combination zp[2]:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:156 [ sin16s_gen::$2 ] zp[4]:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:150 [ sin16s_gen::step#0 ] -Uplifting [sin16s_genb] best 29725 combination zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp[2]:85 [ sin16s_genb::$3 ] zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp[4]:79 [ sin16s_genb::step#0 ] -Uplifting [main] best 29635 combination reg byte x [ main::i#2 main::i#1 ] zp[2]:4 [ main::st2#2 main::st2#1 ] zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:69 [ main::sw#0 ] -Uplifting [memset] best 29635 combination zp[2]:15 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_byte] best 29627 combination zp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [div32u16u] best 29627 combination zp[4]:75 [ div32u16u::return#3 ] zp[2]:136 [ div32u16u::quotient_lo#0 ] zp[4]:146 [ div32u16u::return#2 ] zp[4]:138 [ div32u16u::return#0 ] zp[2]:132 [ div32u16u::quotient_hi#0 ] -Uplifting [print_char] best 29612 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sword] best 29612 combination zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [print_word] best 29612 combination zp[2]:71 [ print_word::w#0 ] -Uplifting [RADIX] best 29612 combination -Uplifting [print_cls] best 29612 combination +Uplifting [mul16u] best 28484 combination zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:115 [ mul16u::return#2 ] zp[2]:113 [ mul16u::b#0 ] +Uplifting [print_str] best 28484 combination zp[2]:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] +Uplifting [divr16u] best 28274 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:130 [ divr16u::return#2 ] zp[2]:134 [ divr16u::return#3 ] +Uplifting [] best 28274 combination zp[2]:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] zp[2]:144 [ rem16u#1 ] +Uplifting [mulu16_sel] best 28243 combination zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] zp[2]:87 [ mulu16_sel::return#18 ] zp[2]:91 [ mulu16_sel::return#19 ] zp[2]:95 [ mulu16_sel::return#20 ] zp[2]:101 [ mulu16_sel::return#10 ] zp[2]:105 [ mulu16_sel::return#11 ] zp[4]:119 [ mulu16_sel::$0 ] zp[4]:123 [ mulu16_sel::$1 ] zp[2]:164 [ mulu16_sel::return#0 ] zp[2]:168 [ mulu16_sel::return#1 ] zp[2]:172 [ mulu16_sel::return#14 ] zp[2]:178 [ mulu16_sel::return#15 ] zp[2]:182 [ mulu16_sel::return#16 ] zp[2]:127 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ] +Uplifting [sin16s] best 28234 combination zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:154 [ sin16s::return#0 ] zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:158 [ sin16s::$4 ] zp[2]:166 [ sin16s::x2#0 ] zp[2]:174 [ sin16s::x3_6#0 ] zp[2]:180 [ sin16s::x4#0 ] zp[2]:184 [ sin16s::x5#0 ] zp[2]:186 [ sin16s::x5_128#0 ] zp[2]:170 [ sin16s::x3#0 ] zp[2]:188 [ sin16s::usinx#1 ] zp[2]:162 [ sin16s::x1#0 ] zp[2]:176 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16sb] best 28225 combination zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp[2]:81 [ sin16sb::return#0 ] zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp[2]:89 [ sin16sb::x2#0 ] zp[2]:97 [ sin16sb::x3_6#0 ] zp[2]:103 [ sin16sb::x4#0 ] zp[2]:107 [ sin16sb::x5#0 ] zp[2]:109 [ sin16sb::x5_128#0 ] zp[2]:93 [ sin16sb::x3#0 ] zp[2]:111 [ sin16sb::usinx#1 ] zp[2]:85 [ sin16sb::x1#0 ] zp[2]:99 [ sin16sb::usinx#0 ] reg byte y [ sin16sb::isUpper#2 ] +Uplifting [sin16s_gen] best 28225 combination zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:156 [ sin16s_gen::$2 ] zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:150 [ sin16s_gen::step#0 ] +Uplifting [sin16s_genb] best 28225 combination zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp[2]:83 [ sin16s_genb::$3 ] zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp[4]:77 [ sin16s_genb::step#0 ] +Uplifting [main] best 28135 combination reg byte x [ main::i#2 main::i#1 ] zp[2]:4 [ main::st2#2 main::st2#1 ] zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:67 [ main::sw#0 ] +Uplifting [memset] best 28135 combination zp[2]:15 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_byte] best 28127 combination zp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [div32u16u] best 28127 combination zp[4]:73 [ div32u16u::return#3 ] zp[2]:136 [ div32u16u::quotient_lo#0 ] zp[4]:146 [ div32u16u::return#2 ] zp[4]:138 [ div32u16u::return#0 ] zp[2]:132 [ div32u16u::quotient_hi#0 ] +Uplifting [print_char] best 28112 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sword] best 28112 combination zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [print_word] best 28112 combination zp[2]:69 [ print_word::w#0 ] +Uplifting [RADIX] best 28112 combination +Uplifting [print_cls] best 28112 combination Attempting to uplift remaining variables inzp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Uplifting [print_byte] best 29612 combination zp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp[2]:113 [ sin16sb::usinx#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] ] with [ zp[2]:95 [ sin16sb::x3#0 ] ] - score: 2 +Uplifting [print_byte] best 28112 combination zp[1]:14 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] +Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp[2]:111 [ sin16sb::usinx#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 ] ] with [ zp[2]:93 [ sin16sb::x3#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 ] ] with [ zp[2]:170 [ sin16s::x3#0 ] ] - score: 2 -Coalescing zero page register [ zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:144 [ rem16u#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:188 [ sin16s::usinx#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp[2]:69 [ main::sw#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 ] ] with [ zp[2]:71 [ print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] ] with [ zp[2]:87 [ sin16sb::x1#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 ] ] with [ zp[2]:83 [ sin16sb::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 ] ] with [ zp[2]:91 [ sin16sb::x2#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 ] ] with [ zp[2]:105 [ sin16sb::x4#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:144 [ rem16u#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:188 [ sin16s::usinx#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp[2]:67 [ main::sw#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 ] ] with [ zp[2]:69 [ print_word::w#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] ] with [ zp[2]:85 [ sin16sb::x1#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 ] ] with [ zp[2]:81 [ sin16sb::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 ] ] with [ zp[2]:89 [ sin16sb::x2#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 ] ] with [ zp[2]:103 [ sin16sb::x4#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 ] ] with [ zp[2]:166 [ sin16s::x2#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 ] ] with [ zp[2]:180 [ sin16s::x4#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] ] with [ zp[2]:45 [ mul16u::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 ] ] with [ zp[2]:113 [ mul16u::b#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:115 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:130 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:134 [ divr16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:154 [ sin16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:75 [ div32u16u::return#3 ] ] with [ zp[4]:79 [ sin16s_genb::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:75 [ div32u16u::return#3 sin16s_genb::step#0 ] ] with [ zp[4]:138 [ div32u16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 ] ] with [ zp[2]:127 [ mulu16_sel::return#17 ] ] - score: 1 -Coalescing zero page register [ zp[2]:97 [ mulu16_sel::return#20 ] ] with [ zp[2]:99 [ sin16sb::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:107 [ mulu16_sel::return#11 ] ] with [ zp[2]:109 [ sin16sb::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:130 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:134 [ divr16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:154 [ sin16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:73 [ div32u16u::return#3 ] ] with [ zp[4]:77 [ sin16s_genb::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:73 [ div32u16u::return#3 sin16s_genb::step#0 ] ] with [ zp[4]:138 [ div32u16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 ] ] with [ zp[2]:127 [ mulu16_sel::return#17 ] ] - score: 1 +Coalescing zero page register [ zp[2]:95 [ mulu16_sel::return#20 ] ] with [ zp[2]:97 [ sin16sb::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:105 [ mulu16_sel::return#11 ] ] with [ zp[2]:107 [ sin16sb::x5#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:119 [ mulu16_sel::$0 ] ] with [ zp[4]:123 [ mulu16_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp[4]:146 [ div32u16u::return#2 ] ] with [ zp[4]:150 [ sin16s_gen::step#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:172 [ mulu16_sel::return#14 ] ] with [ zp[2]:174 [ sin16s::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:182 [ mulu16_sel::return#16 ] ] with [ zp[2]:184 [ sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 ] ] with [ zp[2]:85 [ sin16s_genb::$3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 ] ] with [ zp[2]:101 [ sin16sb::usinx#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:93 [ mulu16_sel::return#19 ] ] - score: 1 -Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 ] ] with [ zp[2]:103 [ mulu16_sel::return#10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 ] ] with [ zp[2]:83 [ sin16s_genb::$3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 ] ] with [ zp[2]:99 [ sin16sb::usinx#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:91 [ mulu16_sel::return#19 ] ] - score: 1 +Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 ] ] with [ zp[2]:101 [ mulu16_sel::return#10 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 ] ] with [ zp[2]:164 [ mulu16_sel::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 ] ] with [ zp[2]:168 [ mulu16_sel::return#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 ] ] with [ zp[2]:178 [ mulu16_sel::return#15 ] ] - score: 1 Coalescing zero page register [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:119 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:136 [ div32u16u::quotient_lo#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:156 [ sin16s_gen::$2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:176 [ sin16s::usinx#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:75 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 ] ] with [ zp[4]:146 [ div32u16u::return#2 sin16s_gen::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 ] ] with [ zp[2]:97 [ mulu16_sel::return#20 sin16sb::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 ] ] with [ zp[2]:107 [ mulu16_sel::return#11 sin16sb::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 ] ] with [ zp[2]:172 [ mulu16_sel::return#14 sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 ] ] with [ zp[2]:182 [ mulu16_sel::return#16 sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 ] ] with [ zp[2]:111 [ sin16sb::x5_128#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 ] ] with [ zp[2]:186 [ sin16s::x5_128#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:136 [ div32u16u::quotient_lo#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:156 [ sin16s_gen::$2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:176 [ sin16s::usinx#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:73 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 ] ] with [ zp[4]:146 [ div32u16u::return#2 sin16s_gen::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 ] ] with [ zp[2]:95 [ mulu16_sel::return#20 sin16sb::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 ] ] with [ zp[2]:105 [ mulu16_sel::return#11 sin16sb::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 ] ] with [ zp[2]:172 [ mulu16_sel::return#14 sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 ] ] with [ zp[2]:182 [ mulu16_sel::return#16 sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 ] ] with [ zp[2]:109 [ sin16sb::x5_128#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 ] ] with [ zp[2]:186 [ sin16s::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:15 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:2 [ main::st1#2 main::st1#1 ] ] Coalescing zero page register [ zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] ] with [ zp[2]:4 [ main::st2#2 main::st2#1 ] ] Coalescing zero page register [ zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] ] with [ zp[2]:7 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] Coalescing zero page register [ zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 ] ] with [ zp[2]:9 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 ] ] with [ zp[2]:12 [ print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] ] -Coalescing zero page register [ zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] -Coalescing zero page register [ zp[2]:49 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] -Coalescing zero page register [ zp[4]:56 [ sin16s_gen::x#2 sin16s_gen::x#1 ] ] with [ zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] ] -Coalescing zero page register [ zp[4]:63 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] -Coalescing zero page register [ zp[2]:132 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:54 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] -Coalescing zero page register [ zp[4]:158 [ sin16s::$4 ] ] with [ zp[4]:41 [ mul16u::mb#2 mul16u::mb#1 ] ] -Coalescing zero page register [ zp[2]:47 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] with [ zp[2]:15 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ] -Coalescing zero page register [ zp[2]:60 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ] ] -Coalescing zero page register [ zp[2]:67 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] ] -Coalescing zero page register [ zp[2]:89 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 ] ] with [ zp[2]:51 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] +Coalescing zero page register [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ] ] +Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] ] with [ zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] ] +Coalescing zero page register [ zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] +Coalescing zero page register [ zp[2]:132 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] +Coalescing zero page register [ zp[4]:158 [ sin16s::$4 ] ] with [ zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] +Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] with [ zp[2]:15 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ] +Coalescing zero page register [ zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ] ] +Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] ] +Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 ] ] with [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Coalescing zero page register [ zp[2]:132 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ] Coalescing zero page register [ zp[2]:162 [ sin16s::x1#0 ] ] with [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] ] Allocated (was zp[1]:14) zp[1]:2 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Allocated (was zp[2]:47) zp[2]:3 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] -Allocated (was zp[2]:49) zp[2]:5 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ] -Allocated (was zp[4]:56) zp[4]:7 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ] -Allocated (was zp[2]:60) zp[2]:11 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ] -Allocated (was zp[4]:63) zp[4]:13 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] -Allocated (was zp[2]:67) zp[2]:17 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] -Allocated (was zp[4]:75) zp[4]:19 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ] -Allocated (was zp[2]:89) zp[2]:23 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] +Allocated (was zp[2]:45) zp[2]:3 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] +Allocated (was zp[2]:47) zp[2]:5 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ] +Allocated (was zp[4]:54) zp[4]:7 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ] +Allocated (was zp[2]:58) zp[2]:11 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ] +Allocated (was zp[4]:61) zp[4]:13 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] +Allocated (was zp[2]:65) zp[2]:17 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ] +Allocated (was zp[4]:73) zp[4]:19 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ] +Allocated (was zp[2]:87) zp[2]:23 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated (was zp[2]:132) zp[2]:25 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] -Allocated (was zp[4]:158) zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] +Allocated (was zp[4]:158) zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp[2]:162) zp[2]:31 [ sin16s::x1#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] ASSEMBLER BEFORE OPTIMIZATION @@ -6363,14 +6332,16 @@ sin16s_genb: { sta.z sintab lda #>main.sintab2 sta.z sintab+1 - // [72] phi (dword) sin16s_genb::x#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vbuc1 - lda #0 + // [72] phi (dword) sin16s_genb::x#2 = (dword) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [72] phi (word) sin16s_genb::i#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vbuc1 + // [72] phi (word) sin16s_genb::i#2 = (word) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -6717,8 +6688,6 @@ mulu16_sel: { sta.z mul16u.a+1 // [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 // [125] call mul16u - // [131] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] - mul16u_from_mulu16_sel: jsr mul16u // [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b1 @@ -6751,14 +6720,12 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($17) a, word zp(5) b) mul16u: { - .label a = $17 .label mb = $1b + .label a = $17 .label res = $d .label b = 5 .label return = $d - // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [132] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -6766,12 +6733,17 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [132] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + __b1_from_mul16u: + // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [132] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [132] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 @@ -6910,7 +6882,7 @@ divr16u: { __b1_from_divr16u: // [152] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [152] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [152] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -7034,14 +7006,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - // [173] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [173] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [173] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [173] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7502,16 +7476,13 @@ Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda.z sw+1 Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 +Removing instruction lda #>0 Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 @@ -7624,7 +7595,6 @@ Removing instruction __b10: Removing instruction mulu16_sel_from___b10: Removing instruction __b11: Removing instruction __b6: -Removing instruction mul16u_from_mulu16_sel: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_mul16u: @@ -7673,6 +7643,8 @@ Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Removing instruction __b12: Removing instruction __b12: @@ -7685,11 +7657,11 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const dword) PI2_u4f28 = (number) $6487ed51 -(const word) PI_HALF_u4f12 = (number) $1922 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const word) PI_u4f12 = (number) $3244 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const word) PI_HALF_u4f12 = (word) $1922 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const word) PI_u4f12 = (word) $3244 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -7800,6 +7772,7 @@ FINAL SYMBOL TABLE (word) mul16u::b (word) mul16u::b#0 b zp[2]:5 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 mb zp[4]:27 4.0 (dword) mul16u::mb#1 mb zp[4]:27 202.0 (dword) mul16u::mb#2 mb zp[4]:27 43.57142857142858 (dword) mul16u::res @@ -8054,12 +8027,12 @@ reg byte a [ mul16u::$1 ] zp[2]:25 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] -zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] +zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:31 [ sin16s::x1#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] FINAL ASSEMBLER -Score: 25042 +Score: 23582 // File Comments // Generates a 16-bit signed sinus @@ -8482,13 +8455,16 @@ sin16s_genb: { sta.z sintab lda #>main.sintab2 sta.z sintab+1 - // [72] phi (dword) sin16s_genb::x#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vbuc1 - lda #0 + // [72] phi (dword) sin16s_genb::x#2 = (dword) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [72] phi (word) sin16s_genb::i#2 = (byte) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vbuc1 + // [72] phi (word) sin16s_genb::i#2 = (word) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -8828,9 +8804,7 @@ mulu16_sel: { sta.z mul16u.a+1 // [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 // [125] call mul16u - // [131] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] jsr mul16u - // mul16u(v1, v2) // [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 // mulu16_sel::@1 // [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 @@ -8861,13 +8835,13 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($17) a, word zp(5) b) mul16u: { - .label a = $17 .label mb = $1b + .label a = $17 .label res = $d .label b = 5 .label return = $d - // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [132] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // mb = b + // [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -8875,10 +8849,14 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [132] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [132] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [132] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 @@ -9013,7 +8991,7 @@ divr16u: { // [152] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [152] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [152] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [152] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 @@ -9131,13 +9109,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintab1 sta.z sintab+1 - // [173] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [173] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [173] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [173] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] diff --git a/src/test/ref/sinusgen16b.sym b/src/test/ref/sinusgen16b.sym index 067a505f3..2b80f87a9 100644 --- a/src/test/ref/sinusgen16b.sym +++ b/src/test/ref/sinusgen16b.sym @@ -1,11 +1,11 @@ (label) @1 (label) @begin (label) @end -(const dword) PI2_u4f28 = (number) $6487ed51 -(const word) PI_HALF_u4f12 = (number) $1922 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const word) PI_u4f12 = (number) $3244 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const word) PI_HALF_u4f12 = (word) $1922 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const word) PI_u4f12 = (word) $3244 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -116,6 +116,7 @@ (word) mul16u::b (word) mul16u::b#0 b zp[2]:5 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 mb zp[4]:27 4.0 (dword) mul16u::mb#1 mb zp[4]:27 202.0 (dword) mul16u::mb#2 mb zp[4]:27 43.57142857142858 (dword) mul16u::res @@ -370,5 +371,5 @@ reg byte a [ mul16u::$1 ] zp[2]:25 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] -zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] +zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:31 [ sin16s::x1#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ] diff --git a/src/test/ref/sinusgen8.cfg b/src/test/ref/sinusgen8.cfg index 269c513eb..79ab79d8d 100644 --- a/src/test/ref/sinusgen8.cfg +++ b/src/test/ref/sinusgen8.cfg @@ -140,8 +140,8 @@ sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 [58] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte*) sintab2 sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 ) - [58] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) - [58] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) + [58] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) + [58] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) [59] if((word) sin8s_gen::i#2<(const word) wavelength) goto sin8s_gen::@2 to:sin8s_gen::@return sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 @@ -259,11 +259,11 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@1 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mulu8_sel - [121] phi() + [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [122] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [122] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [122] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [122] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [122] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [123] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -302,7 +302,7 @@ divr16u: scope:[divr16u] from div16u to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [137] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [137] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [137] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [137] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12 divr16u::@3/(word) divr16u::dividend#0 ) [137] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) [138] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 diff --git a/src/test/ref/sinusgen8.log b/src/test/ref/sinusgen8.log index 4f54a2351..d544eb0c9 100644 --- a/src/test/ref/sinusgen8.log +++ b/src/test/ref/sinusgen8.log @@ -103,7 +103,7 @@ divr16u: scope:[divr16u] from div16u (word) divr16u::divisor#5 ← phi( div16u/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -198,8 +198,8 @@ div16u::@return: scope:[div16u] from div16u::@2 mul8u: scope:[mul8u] from mulu8_sel (byte) mul8u::a#5 ← phi( mulu8_sel/(byte) mul8u::a#1 ) (byte) mul8u::b#1 ← phi( mulu8_sel/(byte) mul8u::b#0 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#1 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#1 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -258,8 +258,8 @@ sin8s_gen::@7: scope:[sin8s_gen] from sin8s_gen (word) div16u::return#4 ← phi( sin8s_gen/(word) div16u::return#2 ) (word~) sin8s_gen::$0 ← (word) div16u::return#4 (word) sin8s_gen::step#0 ← (word~) sin8s_gen::$0 - (word) sin8s_gen::x#0 ← (number) 0 - (word) sin8s_gen::i#0 ← (number) 0 + (word) sin8s_gen::x#0 ← (word) 0 + (word) sin8s_gen::i#0 ← (word) 0 to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@7 sin8s_gen::@8 (word) sin8s_gen::step#3 ← phi( sin8s_gen::@7/(word) sin8s_gen::step#0 sin8s_gen::@8/(word) sin8s_gen::step#1 ) @@ -301,7 +301,7 @@ sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 (signed byte()) sin8s((word) sin8s::x) sin8s: scope:[sin8s] from sin8s_gen::@2 (word) sin8s::x#3 ← phi( sin8s_gen::@2/(word) sin8s::x#0 ) - (byte) sin8s::isUpper#0 ← (number) 0 + (byte) sin8s::isUpper#0 ← (byte) 0 (bool~) sin8s::$0 ← (word) sin8s::x#3 >= (const word) PI_u4f12 (bool~) sin8s::$1 ← ! (bool~) sin8s::$0 if((bool~) sin8s::$1) goto sin8s::@1 @@ -715,9 +715,9 @@ SYMBOL TABLE SSA (label) @59 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const word) PI_HALF_u4f12 = (number) $1922 -(const word) PI_u4f12 = (number) $3244 +(const word) PI2_u4f12 = (word) $6488 +(const word) PI_HALF_u4f12 = (word) $1922 +(const word) PI_u4f12 = (word) $3244 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1122,7 +1122,7 @@ SYMBOL TABLE SSA (label) sin8s::@7 (label) sin8s::@8 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#0 (byte) sin8s::isUpper#1 @@ -1226,10 +1226,9 @@ SYMBOL TABLE SSA (word) sin8s_gen::x#3 (word) sin8s_gen::x#4 (const signed byte*) sintab2[(number) $c0] = { fill( $c0, 0) } -(const byte*) sintabref[] = { (byte)(number) 0, (byte)(number) 4, (byte)(number) 8, (byte)(number) $c, (byte)(number) $11, (byte)(number) $15, (byte)(number) $19, (byte)(number) $1d, (byte)(number) $21, (byte)(number) $25, (byte)(number) $29, (byte)(number) $2d, (byte)(number) $31, (byte)(number) $35, (byte)(number) $38, (byte)(number) $3c, (byte)(number) $40, (byte)(number) $43, (byte)(number) $47, (byte)(number) $4a, (byte)(number) $4e, (byte)(number) $51, (byte)(number) $54, (byte)(number) $57, (byte)(number) $5a, (byte)(number) $5d, (byte)(number) $60, (byte)(number) $63, (byte)(number) $65, (byte)(number) $68, (byte)(number) $6a, (byte)(number) $6c, (byte)(number) $6e, (byte)(number) $70, (byte)(number) $72, (byte)(number) $74, (byte)(number) $76, (byte)(number) $77, (byte)(number) $79, (byte)(number) $7a, (byte)(number) $7b, (byte)(number) $7c, (byte)(number) $7d, (byte)(number) $7e, (byte)(number) $7e, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $80, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $7e, (byte)(number) $7e, (byte)(number) $7d, (byte)(number) $7c, (byte)(number) $7b, (byte)(number) $7a, (byte)(number) $79, (byte)(number) $77, (byte)(number) $76, (byte)(number) $74, (byte)(number) $72, (byte)(number) $70, (byte)(number) $6e, (byte)(number) $6c, (byte)(number) $6a, (byte)(number) $68, (byte)(number) $65, (byte)(number) $63, (byte)(number) $60, (byte)(number) $5d, (byte)(number) $5a, (byte)(number) $57, (byte)(number) $54, (byte)(number) $51, (byte)(number) $4e, (byte)(number) $4a, (byte)(number) $47, (byte)(number) $43, (byte)(number) $40, (byte)(number) $3c, (byte)(number) $38, (byte)(number) $35, (byte)(number) $31, (byte)(number) $2d, (byte)(number) $29, (byte)(number) $25, (byte)(number) $21, (byte)(number) $1d, (byte)(number) $19, (byte)(number) $15, (byte)(number) $11, (byte)(number) $c, (byte)(number) 8, (byte)(number) 4, (byte)(number) 0, (byte)(number) $fc, (byte)(number) $f8, (byte)(number) $f4, (byte)(number) $ef, (byte)(number) $eb, (byte)(number) $e7, (byte)(number) $e3, (byte)(number) $df, (byte)(number) $db, (byte)(number) $d7, (byte)(number) $d3, (byte)(number) $cf, (byte)(number) $cb, (byte)(number) $c8, (byte)(number) $c4, (byte)(number) $c0, (byte)(number) $bd, (byte)(number) $b9, (byte)(number) $b6, (byte)(number) $b2, (byte)(number) $af, (byte)(number) $ac, (byte)(number) $a9, (byte)(number) $a6, (byte)(number) $a3, (byte)(number) $a0, (byte)(number) $9d, (byte)(number) $9b, (byte)(number) $98, (byte)(number) $96, (byte)(number) $94, (byte)(number) $92, (byte)(number) $90, (byte)(number) $8e, (byte)(number) $8c, (byte)(number) $8a, (byte)(number) $89, (byte)(number) $87, (byte)(number) $86, (byte)(number) $85, (byte)(number) $84, (byte)(number) $83, (byte)(number) $82, (byte)(number) $82, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $82, (byte)(number) $82, (byte)(number) $83, (byte)(number) $84, (byte)(number) $85, (byte)(number) $86, (byte)(number) $87, (byte)(number) $89, (byte)(number) $8a, (byte)(number) $8c, (byte)(number) $8e, (byte)(number) $90, (byte)(number) $92, (byte)(number) $94, (byte)(number) $96, (byte)(number) $98, (byte)(number) $9b, (byte)(number) $9d, (byte)(number) $a0, (byte)(number) $a3, (byte)(number) $a6, (byte)(number) $a9, (byte)(number) $ac, (byte)(number) $af, (byte)(number) $b2, (byte)(number) $b6, (byte)(number) $b9, (byte)(number) $bd, (byte)(number) $c0, (byte)(number) $c4, (byte)(number) $c8, (byte)(number) $cb, (byte)(number) $cf, (byte)(number) $d3, (byte)(number) $d7, (byte)(number) $db, (byte)(number) $df, (byte)(number) $e3, (byte)(number) $e7, (byte)(number) $eb, (byte)(number) $ef, (byte)(number) $f4, (byte)(number) $f8, (byte)(number) $fc } +(const byte*) sintabref[] = { (byte) 0, (byte) 4, (byte) 8, (byte) $c, (byte) $11, (byte) $15, (byte) $19, (byte) $1d, (byte) $21, (byte) $25, (byte) $29, (byte) $2d, (byte) $31, (byte) $35, (byte) $38, (byte) $3c, (byte) $40, (byte) $43, (byte) $47, (byte) $4a, (byte) $4e, (byte) $51, (byte) $54, (byte) $57, (byte) $5a, (byte) $5d, (byte) $60, (byte) $63, (byte) $65, (byte) $68, (byte) $6a, (byte) $6c, (byte) $6e, (byte) $70, (byte) $72, (byte) $74, (byte) $76, (byte) $77, (byte) $79, (byte) $7a, (byte) $7b, (byte) $7c, (byte) $7d, (byte) $7e, (byte) $7e, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $80, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $7e, (byte) $7e, (byte) $7d, (byte) $7c, (byte) $7b, (byte) $7a, (byte) $79, (byte) $77, (byte) $76, (byte) $74, (byte) $72, (byte) $70, (byte) $6e, (byte) $6c, (byte) $6a, (byte) $68, (byte) $65, (byte) $63, (byte) $60, (byte) $5d, (byte) $5a, (byte) $57, (byte) $54, (byte) $51, (byte) $4e, (byte) $4a, (byte) $47, (byte) $43, (byte) $40, (byte) $3c, (byte) $38, (byte) $35, (byte) $31, (byte) $2d, (byte) $29, (byte) $25, (byte) $21, (byte) $1d, (byte) $19, (byte) $15, (byte) $11, (byte) $c, (byte) 8, (byte) 4, (byte) 0, (byte) $fc, (byte) $f8, (byte) $f4, (byte) $ef, (byte) $eb, (byte) $e7, (byte) $e3, (byte) $df, (byte) $db, (byte) $d7, (byte) $d3, (byte) $cf, (byte) $cb, (byte) $c8, (byte) $c4, (byte) $c0, (byte) $bd, (byte) $b9, (byte) $b6, (byte) $b2, (byte) $af, (byte) $ac, (byte) $a9, (byte) $a6, (byte) $a3, (byte) $a0, (byte) $9d, (byte) $9b, (byte) $98, (byte) $96, (byte) $94, (byte) $92, (byte) $90, (byte) $8e, (byte) $8c, (byte) $8a, (byte) $89, (byte) $87, (byte) $86, (byte) $85, (byte) $84, (byte) $83, (byte) $82, (byte) $82, (byte) $81, (byte) $81, (byte) $81, (byte) $81, (byte) $81, (byte) $81, (byte) $81, (byte) $82, (byte) $82, (byte) $83, (byte) $84, (byte) $85, (byte) $86, (byte) $87, (byte) $89, (byte) $8a, (byte) $8c, (byte) $8e, (byte) $90, (byte) $92, (byte) $94, (byte) $96, (byte) $98, (byte) $9b, (byte) $9d, (byte) $a0, (byte) $a3, (byte) $a6, (byte) $a9, (byte) $ac, (byte) $af, (byte) $b2, (byte) $b6, (byte) $b9, (byte) $bd, (byte) $c0, (byte) $c4, (byte) $c8, (byte) $cb, (byte) $cf, (byte) $d3, (byte) $d7, (byte) $db, (byte) $df, (byte) $e3, (byte) $e7, (byte) $eb, (byte) $ef, (byte) $f4, (byte) $f8, (byte) $fc } (const word) wavelength = (word) $c0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1239,16 +1238,12 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (word) sin8s_gen::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin8s_gen::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin8s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin8s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (word~) sin8s::$4 ← (word) sin8s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu8_sel::select#0 ← (number) 0 @@ -1267,12 +1262,7 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#2 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 -Inlining cast (word) sin8s_gen::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin8s_gen::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sin8s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin8s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu8_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu8_sel::select#1 ← (unumber)(number) 1 @@ -1287,199 +1277,6 @@ Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#4 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast (signed byte~) main::$2 ← (signed byte)*((const byte*) sintabref + (byte) main::i#2) Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $c -Simplifying constant integer cast $11 -Simplifying constant integer cast $15 -Simplifying constant integer cast $19 -Simplifying constant integer cast $1d -Simplifying constant integer cast $21 -Simplifying constant integer cast $25 -Simplifying constant integer cast $29 -Simplifying constant integer cast $2d -Simplifying constant integer cast $31 -Simplifying constant integer cast $35 -Simplifying constant integer cast $38 -Simplifying constant integer cast $3c -Simplifying constant integer cast $40 -Simplifying constant integer cast $43 -Simplifying constant integer cast $47 -Simplifying constant integer cast $4a -Simplifying constant integer cast $4e -Simplifying constant integer cast $51 -Simplifying constant integer cast $54 -Simplifying constant integer cast $57 -Simplifying constant integer cast $5a -Simplifying constant integer cast $5d -Simplifying constant integer cast $60 -Simplifying constant integer cast $63 -Simplifying constant integer cast $65 -Simplifying constant integer cast $68 -Simplifying constant integer cast $6a -Simplifying constant integer cast $6c -Simplifying constant integer cast $6e -Simplifying constant integer cast $70 -Simplifying constant integer cast $72 -Simplifying constant integer cast $74 -Simplifying constant integer cast $76 -Simplifying constant integer cast $77 -Simplifying constant integer cast $79 -Simplifying constant integer cast $7a -Simplifying constant integer cast $7b -Simplifying constant integer cast $7c -Simplifying constant integer cast $7d -Simplifying constant integer cast $7e -Simplifying constant integer cast $7e -Simplifying constant integer cast $7f -Simplifying constant integer cast $7f -Simplifying constant integer cast $7f -Simplifying constant integer cast $80 -Simplifying constant integer cast $7f -Simplifying constant integer cast $7f -Simplifying constant integer cast $7f -Simplifying constant integer cast $7e -Simplifying constant integer cast $7e -Simplifying constant integer cast $7d -Simplifying constant integer cast $7c -Simplifying constant integer cast $7b -Simplifying constant integer cast $7a -Simplifying constant integer cast $79 -Simplifying constant integer cast $77 -Simplifying constant integer cast $76 -Simplifying constant integer cast $74 -Simplifying constant integer cast $72 -Simplifying constant integer cast $70 -Simplifying constant integer cast $6e -Simplifying constant integer cast $6c -Simplifying constant integer cast $6a -Simplifying constant integer cast $68 -Simplifying constant integer cast $65 -Simplifying constant integer cast $63 -Simplifying constant integer cast $60 -Simplifying constant integer cast $5d -Simplifying constant integer cast $5a -Simplifying constant integer cast $57 -Simplifying constant integer cast $54 -Simplifying constant integer cast $51 -Simplifying constant integer cast $4e -Simplifying constant integer cast $4a -Simplifying constant integer cast $47 -Simplifying constant integer cast $43 -Simplifying constant integer cast $40 -Simplifying constant integer cast $3c -Simplifying constant integer cast $38 -Simplifying constant integer cast $35 -Simplifying constant integer cast $31 -Simplifying constant integer cast $2d -Simplifying constant integer cast $29 -Simplifying constant integer cast $25 -Simplifying constant integer cast $21 -Simplifying constant integer cast $1d -Simplifying constant integer cast $19 -Simplifying constant integer cast $15 -Simplifying constant integer cast $11 -Simplifying constant integer cast $c -Simplifying constant integer cast 8 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast $fc -Simplifying constant integer cast $f8 -Simplifying constant integer cast $f4 -Simplifying constant integer cast $ef -Simplifying constant integer cast $eb -Simplifying constant integer cast $e7 -Simplifying constant integer cast $e3 -Simplifying constant integer cast $df -Simplifying constant integer cast $db -Simplifying constant integer cast $d7 -Simplifying constant integer cast $d3 -Simplifying constant integer cast $cf -Simplifying constant integer cast $cb -Simplifying constant integer cast $c8 -Simplifying constant integer cast $c4 -Simplifying constant integer cast $c0 -Simplifying constant integer cast $bd -Simplifying constant integer cast $b9 -Simplifying constant integer cast $b6 -Simplifying constant integer cast $b2 -Simplifying constant integer cast $af -Simplifying constant integer cast $ac -Simplifying constant integer cast $a9 -Simplifying constant integer cast $a6 -Simplifying constant integer cast $a3 -Simplifying constant integer cast $a0 -Simplifying constant integer cast $9d -Simplifying constant integer cast $9b -Simplifying constant integer cast $98 -Simplifying constant integer cast $96 -Simplifying constant integer cast $94 -Simplifying constant integer cast $92 -Simplifying constant integer cast $90 -Simplifying constant integer cast $8e -Simplifying constant integer cast $8c -Simplifying constant integer cast $8a -Simplifying constant integer cast $89 -Simplifying constant integer cast $87 -Simplifying constant integer cast $86 -Simplifying constant integer cast $85 -Simplifying constant integer cast $84 -Simplifying constant integer cast $83 -Simplifying constant integer cast $82 -Simplifying constant integer cast $82 -Simplifying constant integer cast $81 -Simplifying constant integer cast $81 -Simplifying constant integer cast $81 -Simplifying constant integer cast $81 -Simplifying constant integer cast $81 -Simplifying constant integer cast $81 -Simplifying constant integer cast $81 -Simplifying constant integer cast $82 -Simplifying constant integer cast $82 -Simplifying constant integer cast $83 -Simplifying constant integer cast $84 -Simplifying constant integer cast $85 -Simplifying constant integer cast $86 -Simplifying constant integer cast $87 -Simplifying constant integer cast $89 -Simplifying constant integer cast $8a -Simplifying constant integer cast $8c -Simplifying constant integer cast $8e -Simplifying constant integer cast $90 -Simplifying constant integer cast $92 -Simplifying constant integer cast $94 -Simplifying constant integer cast $96 -Simplifying constant integer cast $98 -Simplifying constant integer cast $9b -Simplifying constant integer cast $9d -Simplifying constant integer cast $a0 -Simplifying constant integer cast $a3 -Simplifying constant integer cast $a6 -Simplifying constant integer cast $a9 -Simplifying constant integer cast $ac -Simplifying constant integer cast $af -Simplifying constant integer cast $b2 -Simplifying constant integer cast $b6 -Simplifying constant integer cast $b9 -Simplifying constant integer cast $bd -Simplifying constant integer cast $c0 -Simplifying constant integer cast $c4 -Simplifying constant integer cast $c8 -Simplifying constant integer cast $cb -Simplifying constant integer cast $cf -Simplifying constant integer cast $d3 -Simplifying constant integer cast $d7 -Simplifying constant integer cast $db -Simplifying constant integer cast $df -Simplifying constant integer cast $e3 -Simplifying constant integer cast $e7 -Simplifying constant integer cast $eb -Simplifying constant integer cast $ef -Simplifying constant integer cast $f4 -Simplifying constant integer cast $f8 -Simplifying constant integer cast $fc -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1488,14 +1285,10 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -1514,7 +1307,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1523,14 +1315,10 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -1576,7 +1364,6 @@ Alias (word) divr16u::rem#2 = (word~) divr16u::$10 Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#3 (word) divr16u::return#1 Alias (word) divr16u::return#2 = (word) divr16u::return#4 Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#3 (word) div16u::return#1 -Alias (word) mul8u::mb#0 = (byte) mul8u::b#1 Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 @@ -1673,7 +1460,7 @@ Identical Phi Values (word) divr16u::divisor#5 (word) divr16u::divisor#0 Identical Phi Values (word) divr16u::divisor#1 (word) divr16u::divisor#5 Identical Phi Values (word) div16u::dividend#1 (word) div16u::dividend#0 Identical Phi Values (word) div16u::divisor#1 (word) div16u::divisor#0 -Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 +Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 Identical Phi Values (word) sin8s_gen::wavelength#1 (word) sin8s_gen::wavelength#0 Identical Phi Values (signed byte*) sin8s_gen::sintab#5 (signed byte*) sin8s_gen::sintab#1 @@ -1779,13 +1566,13 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $c0 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [96] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Constant right-side identified [97] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [80] (signed byte) sin8s::sinx#0 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 -Inlining Noop Cast [84] (signed byte~) sin8s::$21 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 -Inlining Noop Cast [131] (signed byte~) main::$2 ← (signed byte)*((const byte*) sintabref + (byte) main::i#2) keeping *(sintabref + main::i#2) +Inlining Noop Cast [81] (signed byte) sin8s::sinx#0 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 +Inlining Noop Cast [85] (signed byte~) sin8s::$21 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 +Inlining Noop Cast [132] (signed byte~) main::$2 ← (signed byte)*((const byte*) sintabref + (byte) main::i#2) keeping *(sintabref + main::i#2) Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -1812,9 +1599,9 @@ Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined divr16u::i#0 = (byte) 0 Constant inlined sin8s::isUpper#1 = (byte) 1 Constant inlined sin8s::isUpper#0 = (byte) 0 -Constant inlined sin8s_gen::x#0 = (byte) 0 +Constant inlined sin8s_gen::x#0 = (word) 0 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined div16u::divisor#0 = (const word) wavelength Constant inlined main::i#0 = (byte) 0 Constant inlined mulu8_sel::select#0 = (byte) 0 @@ -1826,14 +1613,14 @@ Constant inlined mulu8_sel::select#4 = (byte) 0 Constant inlined mulu8_sel::select#3 = (byte) 0 Constant inlined divr16u::dividend#1 = (const word) PI2_u4f12 Constant inlined mulu8_sel::v2#2 = (const byte) sin8s::DIV_6 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined print_char::ch#1 = (byte) ' ' Constant inlined print_char::ch#0 = (byte) '-' Constant inlined sin8s_gen::sintab#1 = (const signed byte*) sintab2 Constant inlined sin8s_gen::wavelength#0 = (const word) wavelength Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined print_str::str#1 = (const string) main::str -Constant inlined sin8s_gen::i#0 = (byte) 0 +Constant inlined sin8s_gen::i#0 = (word) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) @@ -1875,7 +1662,7 @@ Calls in [print_cls] to memset:61 Calls in [sin8s_gen] to div16u:74 sin8s:81 Calls in [sin8s] to mulu8_sel:105 mulu8_sel:112 mulu8_sel:117 mulu8_sel:125 mulu8_sel:132 Calls in [mulu8_sel] to mul8u:153 -Calls in [div16u] to divr16u:177 +Calls in [div16u] to divr16u:178 Created 30 initial phi equivalence classes Coalesced [20] main::i#5 ← main::i#1 @@ -1911,23 +1698,23 @@ Coalesced [143] sin8s::return#6 ← sin8s::sinx#1 Coalesced [147] sin8s::usinx#8 ← sin8s::usinx#1 Coalesced [148] sin8s::x#10 ← sin8s::x#4 Coalesced [149] sin8s::x#8 ← sin8s::x#0 -Coalesced [159] mul8u::a#7 ← mul8u::a#1 -Coalesced [160] mul8u::mb#6 ← mul8u::b#0 -Coalesced [168] mul8u::res#9 ← mul8u::res#1 -Coalesced [172] mul8u::a#8 ← mul8u::a#0 -Coalesced [173] mul8u::res#7 ← mul8u::res#6 -Coalesced [174] mul8u::mb#7 ← mul8u::mb#1 -Coalesced (already) [175] mul8u::res#8 ← mul8u::res#2 -Coalesced [188] divr16u::rem#12 ← divr16u::rem#1 -Coalesced [195] divr16u::rem#14 ← divr16u::rem#2 -Coalesced [196] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [202] divr16u::rem#10 ← divr16u::rem#9 -Coalesced [203] divr16u::dividend#8 ← divr16u::dividend#0 -Coalesced [204] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [205] divr16u::i#7 ← divr16u::i#1 -Coalesced [206] divr16u::rem#13 ← divr16u::rem#5 -Coalesced [207] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [208] divr16u::rem#11 ← divr16u::rem#0 +Coalesced [160] mul8u::a#7 ← mul8u::a#1 +Coalesced [161] mul8u::mb#6 ← mul8u::mb#0 +Coalesced [169] mul8u::res#9 ← mul8u::res#1 +Coalesced [173] mul8u::a#8 ← mul8u::a#0 +Coalesced [174] mul8u::res#7 ← mul8u::res#6 +Coalesced [175] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [176] mul8u::res#8 ← mul8u::res#2 +Coalesced [189] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [196] divr16u::rem#14 ← divr16u::rem#2 +Coalesced [197] divr16u::return#6 ← divr16u::quotient#2 +Coalesced [203] divr16u::rem#10 ← divr16u::rem#9 +Coalesced [204] divr16u::dividend#8 ← divr16u::dividend#0 +Coalesced [205] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [206] divr16u::i#7 ← divr16u::i#1 +Coalesced [207] divr16u::rem#13 ← divr16u::rem#5 +Coalesced [208] divr16u::return#5 ← divr16u::quotient#1 +Coalesced [209] divr16u::rem#11 ← divr16u::rem#0 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) @33 Culled Empty Block (label) @59 @@ -1979,7 +1766,6 @@ Adding NOP phi() at start of print_sbyte::@1 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset Adding NOP phi() at start of sin8s_gen -Adding NOP phi() at start of mul8u Adding NOP phi() at start of div16u Adding NOP phi() at start of divr16u @@ -2126,8 +1912,8 @@ sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 [58] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte*) sintab2 sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 ) - [58] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) - [58] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) + [58] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) + [58] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) [59] if((word) sin8s_gen::i#2<(const word) wavelength) goto sin8s_gen::@2 to:sin8s_gen::@return sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 @@ -2245,11 +2031,11 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@1 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mulu8_sel - [121] phi() + [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [122] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [122] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [122] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [122] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [122] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [123] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -2288,7 +2074,7 @@ divr16u: scope:[divr16u] from div16u to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [137] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [137] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [137] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [137] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12 divr16u::@3/(word) divr16u::dividend#0 ) [137] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) [138] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 @@ -2375,6 +2161,7 @@ VARIABLE REGISTER WEIGHTS (byte) mul8u::b (byte) mul8u::b#0 2.0 (word) mul8u::mb +(word) mul8u::mb#0 4.0 (word) mul8u::mb#1 202.0 (word) mul8u::mb#2 43.57142857142858 (word) mul8u::res @@ -2486,7 +2273,6 @@ VARIABLE REGISTER WEIGHTS (word) sin8s_gen::x#1 11.0 (word) sin8s_gen::x#2 4.125 -Not consolidating phi with different size mul8u::mb#2 mul8u::b#0 Initial phi equivalence classes [ main::i#2 main::i#1 ] [ print_str::str#2 print_str::str#0 ] @@ -2506,8 +2292,7 @@ Initial phi equivalence classes [ mulu8_sel::select#5 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#1 ] -[ mul8u::b#0 ] +[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -2534,6 +2319,7 @@ Added variable sin8s::x4#0 to live range equivalence class [ sin8s::x4#0 ] Added variable mulu8_sel::return#11 to live range equivalence class [ mulu8_sel::return#11 ] Added variable sin8s::x5#0 to live range equivalence class [ sin8s::x5#0 ] Added variable sin8s::x5_128#0 to live range equivalence class [ sin8s::x5_128#0 ] +Added variable mul8u::b#0 to live range equivalence class [ mul8u::b#0 ] Added variable mul8u::return#2 to live range equivalence class [ mul8u::return#2 ] Added variable mulu8_sel::$0 to live range equivalence class [ mulu8_sel::$0 ] Added variable mulu8_sel::$1 to live range equivalence class [ mulu8_sel::$1 ] @@ -2562,8 +2348,7 @@ Complete equivalence classes [ mulu8_sel::select#5 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#1 ] -[ mul8u::b#0 ] +[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -2590,6 +2375,7 @@ Complete equivalence classes [ mulu8_sel::return#11 ] [ sin8s::x5#0 ] [ sin8s::x5_128#0 ] +[ mul8u::b#0 ] [ mul8u::return#2 ] [ mulu8_sel::$0 ] [ mulu8_sel::$1 ] @@ -2617,34 +2403,34 @@ Allocated zp[1]:23 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel:: Allocated zp[1]:24 [ mulu8_sel::select#5 ] Allocated zp[1]:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Allocated zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -Allocated zp[2]:28 [ mul8u::mb#2 mul8u::mb#1 ] -Allocated zp[1]:30 [ mul8u::b#0 ] -Allocated zp[2]:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp[2]:33 [ divr16u::dividend#2 divr16u::dividend#0 ] -Allocated zp[2]:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp[1]:37 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp[1]:38 [ main::sb#0 ] -Allocated zp[1]:39 [ print_byte::b#0 ] -Allocated zp[1]:40 [ print_byte::$0 ] -Allocated zp[1]:41 [ print_byte::$2 ] -Allocated zp[2]:42 [ div16u::return#2 ] -Allocated zp[2]:44 [ sin8s_gen::step#0 ] -Allocated zp[1]:46 [ sin8s::return#0 ] -Allocated zp[1]:47 [ sin8s_gen::$2 ] -Allocated zp[2]:48 [ sin8s::$4 ] -Allocated zp[1]:50 [ sin8s::x1#0 ] -Allocated zp[1]:51 [ mulu8_sel::return#0 ] -Allocated zp[1]:52 [ sin8s::x2#0 ] -Allocated zp[1]:53 [ mulu8_sel::return#1 ] -Allocated zp[1]:54 [ sin8s::x3#0 ] -Allocated zp[1]:55 [ mulu8_sel::return#2 ] -Allocated zp[1]:56 [ sin8s::x3_6#0 ] -Allocated zp[1]:57 [ sin8s::usinx#0 ] -Allocated zp[1]:58 [ mulu8_sel::return#10 ] -Allocated zp[1]:59 [ sin8s::x4#0 ] -Allocated zp[1]:60 [ mulu8_sel::return#11 ] -Allocated zp[1]:61 [ sin8s::x5#0 ] -Allocated zp[1]:62 [ sin8s::x5_128#0 ] +Allocated zp[2]:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated zp[2]:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp[2]:32 [ divr16u::dividend#2 divr16u::dividend#0 ] +Allocated zp[2]:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp[1]:36 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp[1]:37 [ main::sb#0 ] +Allocated zp[1]:38 [ print_byte::b#0 ] +Allocated zp[1]:39 [ print_byte::$0 ] +Allocated zp[1]:40 [ print_byte::$2 ] +Allocated zp[2]:41 [ div16u::return#2 ] +Allocated zp[2]:43 [ sin8s_gen::step#0 ] +Allocated zp[1]:45 [ sin8s::return#0 ] +Allocated zp[1]:46 [ sin8s_gen::$2 ] +Allocated zp[2]:47 [ sin8s::$4 ] +Allocated zp[1]:49 [ sin8s::x1#0 ] +Allocated zp[1]:50 [ mulu8_sel::return#0 ] +Allocated zp[1]:51 [ sin8s::x2#0 ] +Allocated zp[1]:52 [ mulu8_sel::return#1 ] +Allocated zp[1]:53 [ sin8s::x3#0 ] +Allocated zp[1]:54 [ mulu8_sel::return#2 ] +Allocated zp[1]:55 [ sin8s::x3_6#0 ] +Allocated zp[1]:56 [ sin8s::usinx#0 ] +Allocated zp[1]:57 [ mulu8_sel::return#10 ] +Allocated zp[1]:58 [ sin8s::x4#0 ] +Allocated zp[1]:59 [ mulu8_sel::return#11 ] +Allocated zp[1]:60 [ sin8s::x5#0 ] +Allocated zp[1]:61 [ sin8s::x5_128#0 ] +Allocated zp[1]:62 [ mul8u::b#0 ] Allocated zp[2]:63 [ mul8u::return#2 ] Allocated zp[2]:65 [ mulu8_sel::$0 ] Allocated zp[2]:67 [ mulu8_sel::$1 ] @@ -2690,7 +2476,7 @@ __bend_from___b1: __bend: // main main: { - .label sb = $26 + .label sb = $25 .label i = 2 // [5] call sin8s_gen // [54] phi from main to sin8s_gen [phi:main->sin8s_gen] @@ -2893,11 +2679,11 @@ print_char: { } // print_byte // Print a byte as HEX -// print_byte(byte zp($27) b) +// print_byte(byte zp($26) b) print_byte: { - .label __0 = $28 - .label __2 = $29 - .label b = $27 + .label __0 = $27 + .label __2 = $28 + .label b = $26 // [38] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b lsr @@ -3003,8 +2789,8 @@ memset: { // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin8s_gen(signed byte* zp($f) sintab) sin8s_gen: { - .label __2 = $2f - .label step = $2c + .label __2 = $2e + .label step = $2b .label sintab = $f // u[4.12] // Iterate over the table @@ -3034,12 +2820,12 @@ sin8s_gen: { sta.z sintab lda #>sintab2 sta.z sintab+1 - // [58] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) sin8s_gen::x#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 sta.z x+1 - // [58] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [58] phi (word) sin8s_gen::i#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3117,17 +2903,17 @@ sin8s_gen: { sin8s: { // u[2.6] x^3 .const DIV_6 = $2b - .label __4 = $30 + .label __4 = $2f .label x = $12 - .label return = $2e - .label x1 = $32 - .label x2 = $34 - .label x3 = $36 - .label x3_6 = $38 - .label usinx = $39 - .label x4 = $3b - .label x5 = $3d - .label x5_128 = $3e + .label return = $2d + .label x1 = $31 + .label x2 = $33 + .label x3 = $35 + .label x3_6 = $37 + .label usinx = $38 + .label x4 = $3a + .label x5 = $3c + .label x5_128 = $3d .label usinx_1 = $14 .label return_1 = $15 .label sinx = $15 @@ -3403,11 +3189,11 @@ mulu8_sel: { .label __1 = $43 .label v1 = $16 .label v2 = $17 - .label return = $33 - .label return_1 = $35 - .label return_2 = $37 - .label return_3 = $3a - .label return_4 = $3c + .label return = $32 + .label return_1 = $34 + .label return_2 = $36 + .label return_3 = $39 + .label return_4 = $3b .label select = $18 .label return_5 = $45 // [113] (byte) mul8u::a#1 ← (byte) mulu8_sel::v1#5 -- vbuz1=vbuz2 @@ -3417,8 +3203,6 @@ mulu8_sel: { lda.z v2 sta.z mul8u.b // [115] call mul8u - // [121] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] - mul8u_from_mulu8_sel: jsr mul8u // [116] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -3457,22 +3241,23 @@ mulu8_sel: { } // mul8u // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word -// mul8u(byte zp($19) a, byte zp($1e) b) +// mul8u(byte zp($19) a, byte zp($3e) b) mul8u: { .label __1 = $46 - .label a = $19 .label mb = $1c + .label a = $19 .label res = $1a - .label b = $1e + .label b = $3e .label return = $3f - // [122] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - __b1_from_mul8u: - // [122] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuz2 + // [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuz2 lda.z b sta.z mb lda #0 sta.z mb+1 - // [122] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [122] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + __b1_from_mul8u: + // [122] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [122] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -3537,7 +3322,7 @@ mul8u: { // Implemented using simple binary division div16u: { .label return = $49 - .label return_1 = $2a + .label return_1 = $29 // [132] call divr16u // [136] phi from div16u to divr16u [phi:div16u->divr16u] divr16u_from_div16u: @@ -3566,22 +3351,22 @@ div16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($21) dividend, word zp($1f) rem) +// divr16u(word zp($20) dividend, word zp($1e) rem) divr16u: { .label __1 = $4b .label __2 = $4c - .label rem = $1f - .label dividend = $21 - .label quotient = $23 - .label i = $25 - .label return = $23 + .label rem = $1e + .label dividend = $20 + .label quotient = $22 + .label i = $24 + .label return = $22 .label return_1 = $47 // [137] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: // [137] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [137] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [137] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -3700,9 +3485,9 @@ Statement [21] *((byte*) print_char_cursor#19) ← *((byte*) print_str::str#2) [ Statement [33] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#10 print_sbyte::b#0 ] ( main:2::print_sbyte:11 [ main::i#2 print_char_cursor#10 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [35] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#4 [ print_char_cursor#28 ] ( main:2::print_sbyte:11::print_char:26 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:11::print_char:32 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:11::print_byte:29::print_char:40 [ main::i#2 print_byte::b#0 print_char_cursor#28 ] main:2::print_sbyte:11::print_byte:29::print_char:43 [ main::i#2 print_char_cursor#28 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:39 [ print_byte::b#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:38 [ print_byte::b#0 ] Statement [38] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte) 4 [ print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ( main:2::print_sbyte:11::print_byte:29 [ main::i#2 print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:39 [ print_byte::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:38 [ print_byte::b#0 ] Statement [41] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_sbyte:11::print_byte:29 [ main::i#2 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a Statement [50] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:7::memset:46 [ memset::dst#2 ] ) always clobbers reg byte a Statement [52] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:7::memset:46 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y @@ -3720,10 +3505,10 @@ Statement [73] (word) sin8s::x#2 ← (const word) PI_u4f12 - (word) sin8s::x#4 [ Statement [75] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:62 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a Statement [76] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:62 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a Statement [91] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:62 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:50 [ sin8s::x1#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:54 [ sin8s::x3#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:49 [ sin8s::x1#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:53 [ sin8s::x3#0 ] Statement [102] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:62 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:57 [ sin8s::usinx#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:56 [ sin8s::usinx#0 ] Statement [103] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:62 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a Statement [108] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:62 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::sinx#1 ] ) always clobbers reg byte a Statement [116] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a @@ -3731,12 +3516,14 @@ Removing always clobbered register reg byte a as potential for zp[1]:24 [ mulu8_ Statement [117] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a Statement [118] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a Statement [119] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [127] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +Statement [125] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [127] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [133] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:55 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [134] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8s_gen:5::div16u:55 [ div16u::return#0 ] ) always clobbers reg byte a Statement [139] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8s_gen:5::div16u:55::divr16u:132 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:37 [ divr16u::i#2 divr16u::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:36 [ divr16u::i#2 divr16u::i#1 ] Statement [142] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8s_gen:5::div16u:55::divr16u:132 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a Statement [146] if((word) divr16u::rem#5<(const word) wavelength) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8s_gen:5::div16u:55::divr16u:132 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [148] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) wavelength [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8s_gen:5::div16u:55::divr16u:132 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a @@ -3769,6 +3556,7 @@ Statement [116] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::sele Statement [117] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a Statement [118] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a Statement [119] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] ) always clobbers reg byte a Statement [125] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a Statement [127] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:62::mulu8_sel:79::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:84::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:88::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:94::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:62::mulu8_sel:99::mul8u:115 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [133] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:55 [ divr16u::return#2 ] ) always clobbers reg byte a @@ -3795,34 +3583,34 @@ Potential registers zp[1]:23 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 m Potential registers zp[1]:24 [ mulu8_sel::select#5 ] : zp[1]:24 , reg byte x , reg byte y , Potential registers zp[1]:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp[1]:25 , reg byte x , reg byte y , Potential registers zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:26 , -Potential registers zp[2]:28 [ mul8u::mb#2 mul8u::mb#1 ] : zp[2]:28 , -Potential registers zp[1]:30 [ mul8u::b#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:31 , -Potential registers zp[2]:33 [ divr16u::dividend#2 divr16u::dividend#0 ] : zp[2]:33 , -Potential registers zp[2]:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:35 , -Potential registers zp[1]:37 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:37 , reg byte x , reg byte y , -Potential registers zp[1]:38 [ main::sb#0 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ print_byte::b#0 ] : zp[1]:39 , reg byte x , -Potential registers zp[1]:40 [ print_byte::$0 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:41 [ print_byte::$2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:42 [ div16u::return#2 ] : zp[2]:42 , -Potential registers zp[2]:44 [ sin8s_gen::step#0 ] : zp[2]:44 , -Potential registers zp[1]:46 [ sin8s::return#0 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:47 [ sin8s_gen::$2 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:48 [ sin8s::$4 ] : zp[2]:48 , -Potential registers zp[1]:50 [ sin8s::x1#0 ] : zp[1]:50 , reg byte x , reg byte y , -Potential registers zp[1]:51 [ mulu8_sel::return#0 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:52 [ sin8s::x2#0 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:53 [ mulu8_sel::return#1 ] : zp[1]:53 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:54 [ sin8s::x3#0 ] : zp[1]:54 , reg byte x , reg byte y , -Potential registers zp[1]:55 [ mulu8_sel::return#2 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:56 [ sin8s::x3_6#0 ] : zp[1]:56 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:57 [ sin8s::usinx#0 ] : zp[1]:57 , reg byte x , reg byte y , -Potential registers zp[1]:58 [ mulu8_sel::return#10 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:59 [ sin8s::x4#0 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:60 [ mulu8_sel::return#11 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:61 [ sin8s::x5#0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:62 [ sin8s::x5_128#0 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:28 , +Potential registers zp[2]:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:30 , +Potential registers zp[2]:32 [ divr16u::dividend#2 divr16u::dividend#0 ] : zp[2]:32 , +Potential registers zp[2]:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:34 , +Potential registers zp[1]:36 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:36 , reg byte x , reg byte y , +Potential registers zp[1]:37 [ main::sb#0 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:38 [ print_byte::b#0 ] : zp[1]:38 , reg byte x , +Potential registers zp[1]:39 [ print_byte::$0 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ print_byte::$2 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:41 [ div16u::return#2 ] : zp[2]:41 , +Potential registers zp[2]:43 [ sin8s_gen::step#0 ] : zp[2]:43 , +Potential registers zp[1]:45 [ sin8s::return#0 ] : zp[1]:45 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:46 [ sin8s_gen::$2 ] : zp[1]:46 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:47 [ sin8s::$4 ] : zp[2]:47 , +Potential registers zp[1]:49 [ sin8s::x1#0 ] : zp[1]:49 , reg byte x , reg byte y , +Potential registers zp[1]:50 [ mulu8_sel::return#0 ] : zp[1]:50 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:51 [ sin8s::x2#0 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:52 [ mulu8_sel::return#1 ] : zp[1]:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:53 [ sin8s::x3#0 ] : zp[1]:53 , reg byte x , reg byte y , +Potential registers zp[1]:54 [ mulu8_sel::return#2 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:55 [ sin8s::x3_6#0 ] : zp[1]:55 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:56 [ sin8s::usinx#0 ] : zp[1]:56 , reg byte x , reg byte y , +Potential registers zp[1]:57 [ mulu8_sel::return#10 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:58 [ sin8s::x4#0 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:59 [ mulu8_sel::return#11 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:60 [ sin8s::x5#0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:61 [ sin8s::x5_128#0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:62 [ mul8u::b#0 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:63 [ mul8u::return#2 ] : zp[2]:63 , Potential registers zp[2]:65 [ mulu8_sel::$0 ] : zp[2]:65 , Potential registers zp[2]:67 [ mulu8_sel::$1 ] : zp[2]:67 , @@ -3834,98 +3622,98 @@ Potential registers zp[1]:75 [ divr16u::$1 ] : zp[1]:75 , reg byte a , reg byte Potential registers zp[1]:76 [ divr16u::$2 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [mul8u] 353.83: zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 245.57: zp[2]:28 [ mul8u::mb#2 mul8u::mb#1 ] 202: zp[1]:70 [ mul8u::$1 ] 170: zp[1]:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp[2]:63 [ mul8u::return#2 ] 2: zp[1]:30 [ mul8u::b#0 ] +Uplift Scope [mul8u] 353.83: zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 249.57: zp[2]:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 202: zp[1]:70 [ mul8u::$1 ] 170: zp[1]:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp[2]:63 [ mul8u::return#2 ] 2: zp[1]:62 [ mul8u::b#0 ] Uplift Scope [print_str] 303: zp[2]:3 [ print_str::str#2 print_str::str#0 ] -Uplift Scope [divr16u] 96.25: zp[2]:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp[2]:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:75 [ divr16u::$1 ] 22: zp[1]:76 [ divr16u::$2 ] 18.19: zp[1]:37 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp[2]:33 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp[2]:71 [ divr16u::return#2 ] +Uplift Scope [divr16u] 96.25: zp[2]:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp[2]:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:75 [ divr16u::$1 ] 22: zp[1]:76 [ divr16u::$2 ] 18.19: zp[1]:36 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp[2]:32 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp[2]:71 [ divr16u::return#2 ] Uplift Scope [] 155.06: zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -Uplift Scope [sin8s] 27.5: zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp[1]:46 [ sin8s::return#0 ] 13: zp[1]:21 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp[1]:20 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp[2]:48 [ sin8s::$4 ] 4: zp[1]:52 [ sin8s::x2#0 ] 4: zp[1]:56 [ sin8s::x3_6#0 ] 4: zp[1]:59 [ sin8s::x4#0 ] 4: zp[1]:61 [ sin8s::x5#0 ] 4: zp[1]:62 [ sin8s::x5_128#0 ] 1: zp[1]:54 [ sin8s::x3#0 ] 0.64: zp[1]:50 [ sin8s::x1#0 ] 0.33: zp[1]:57 [ sin8s::usinx#0 ] 0.06: zp[1]:17 [ sin8s::isUpper#10 ] -Uplift Scope [sin8s_gen] 25.67: zp[2]:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] 22: zp[1]:47 [ sin8s_gen::$2 ] 15.12: zp[2]:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] 12.05: zp[2]:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] 1.18: zp[2]:44 [ sin8s_gen::step#0 ] -Uplift Scope [mulu8_sel] 24: zp[1]:22 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp[1]:23 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp[1]:51 [ mulu8_sel::return#0 ] 4: zp[1]:53 [ mulu8_sel::return#1 ] 4: zp[1]:55 [ mulu8_sel::return#2 ] 4: zp[1]:58 [ mulu8_sel::return#10 ] 4: zp[1]:60 [ mulu8_sel::return#11 ] 4: zp[2]:65 [ mulu8_sel::$0 ] 4: zp[2]:67 [ mulu8_sel::$1 ] 1.71: zp[1]:69 [ mulu8_sel::return#12 ] 0.33: zp[1]:24 [ mulu8_sel::select#5 ] -Uplift Scope [main] 22: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:38 [ main::sb#0 ] +Uplift Scope [sin8s] 27.5: zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp[1]:45 [ sin8s::return#0 ] 13: zp[1]:21 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp[1]:20 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp[2]:47 [ sin8s::$4 ] 4: zp[1]:51 [ sin8s::x2#0 ] 4: zp[1]:55 [ sin8s::x3_6#0 ] 4: zp[1]:58 [ sin8s::x4#0 ] 4: zp[1]:60 [ sin8s::x5#0 ] 4: zp[1]:61 [ sin8s::x5_128#0 ] 1: zp[1]:53 [ sin8s::x3#0 ] 0.64: zp[1]:49 [ sin8s::x1#0 ] 0.33: zp[1]:56 [ sin8s::usinx#0 ] 0.06: zp[1]:17 [ sin8s::isUpper#10 ] +Uplift Scope [sin8s_gen] 25.67: zp[2]:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] 22: zp[1]:46 [ sin8s_gen::$2 ] 15.12: zp[2]:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] 12.05: zp[2]:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] 1.18: zp[2]:43 [ sin8s_gen::step#0 ] +Uplift Scope [mulu8_sel] 24: zp[1]:22 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp[1]:23 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp[1]:50 [ mulu8_sel::return#0 ] 4: zp[1]:52 [ mulu8_sel::return#1 ] 4: zp[1]:54 [ mulu8_sel::return#2 ] 4: zp[1]:57 [ mulu8_sel::return#10 ] 4: zp[1]:59 [ mulu8_sel::return#11 ] 4: zp[2]:65 [ mulu8_sel::$0 ] 4: zp[2]:67 [ mulu8_sel::$1 ] 1.71: zp[1]:69 [ mulu8_sel::return#12 ] 0.33: zp[1]:24 [ mulu8_sel::select#5 ] +Uplift Scope [main] 22: zp[1]:2 [ main::i#2 main::i#1 ] 22: zp[1]:37 [ main::sb#0 ] Uplift Scope [memset] 36.67: zp[2]:9 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_char] 14: zp[1]:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sbyte] 10.83: zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplift Scope [print_byte] 4: zp[1]:40 [ print_byte::$0 ] 4: zp[1]:41 [ print_byte::$2 ] 1.5: zp[1]:39 [ print_byte::b#0 ] -Uplift Scope [div16u] 4: zp[2]:42 [ div16u::return#2 ] 1.33: zp[2]:73 [ div16u::return#0 ] +Uplift Scope [print_byte] 4: zp[1]:39 [ print_byte::$0 ] 4: zp[1]:40 [ print_byte::$2 ] 1.5: zp[1]:38 [ print_byte::b#0 ] +Uplift Scope [div16u] 4: zp[2]:41 [ div16u::return#2 ] 1.33: zp[2]:73 [ div16u::return#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul8u] best 20686 combination zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:28 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] -Uplifting [print_str] best 20686 combination zp[2]:3 [ print_str::str#2 print_str::str#0 ] -Uplifting [divr16u] best 20476 combination zp[2]:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:33 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:71 [ divr16u::return#2 ] -Uplifting [] best 20476 combination zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -Uplifting [sin8s] best 20371 combination zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp[2]:48 [ sin8s::$4 ] zp[1]:52 [ sin8s::x2#0 ] zp[1]:56 [ sin8s::x3_6#0 ] zp[1]:59 [ sin8s::x4#0 ] zp[1]:61 [ sin8s::x5#0 ] zp[1]:62 [ sin8s::x5_128#0 ] zp[1]:54 [ sin8s::x3#0 ] zp[1]:50 [ sin8s::x1#0 ] zp[1]:57 [ sin8s::usinx#0 ] zp[1]:17 [ sin8s::isUpper#10 ] +Uplifting [mul8u] best 19894 combination zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:63 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] +Uplifting [print_str] best 19894 combination zp[2]:3 [ print_str::str#2 print_str::str#0 ] +Uplifting [divr16u] best 19684 combination zp[2]:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:32 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:71 [ divr16u::return#2 ] +Uplifting [] best 19684 combination zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] +Uplifting [sin8s] best 19579 combination zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp[2]:47 [ sin8s::$4 ] zp[1]:51 [ sin8s::x2#0 ] zp[1]:55 [ sin8s::x3_6#0 ] zp[1]:58 [ sin8s::x4#0 ] zp[1]:60 [ sin8s::x5#0 ] zp[1]:61 [ sin8s::x5_128#0 ] zp[1]:53 [ sin8s::x3#0 ] zp[1]:49 [ sin8s::x1#0 ] zp[1]:56 [ sin8s::usinx#0 ] zp[1]:17 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [sin8s_gen] best 20311 combination zp[2]:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] reg byte a [ sin8s_gen::$2 ] zp[2]:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp[2]:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp[2]:44 [ sin8s_gen::step#0 ] -Uplifting [mulu8_sel] best 20265 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp[1]:55 [ mulu8_sel::return#2 ] zp[1]:58 [ mulu8_sel::return#10 ] zp[1]:60 [ mulu8_sel::return#11 ] zp[2]:65 [ mulu8_sel::$0 ] zp[2]:67 [ mulu8_sel::$1 ] zp[1]:69 [ mulu8_sel::return#12 ] zp[1]:24 [ mulu8_sel::select#5 ] +Uplifting [sin8s_gen] best 19519 combination zp[2]:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] reg byte a [ sin8s_gen::$2 ] zp[2]:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp[2]:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp[2]:43 [ sin8s_gen::step#0 ] +Uplifting [mulu8_sel] best 19473 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp[1]:54 [ mulu8_sel::return#2 ] zp[1]:57 [ mulu8_sel::return#10 ] zp[1]:59 [ mulu8_sel::return#11 ] zp[2]:65 [ mulu8_sel::$0 ] zp[2]:67 [ mulu8_sel::$1 ] zp[1]:69 [ mulu8_sel::return#12 ] zp[1]:24 [ mulu8_sel::select#5 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [main] best 20085 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::sb#0 ] -Uplifting [memset] best 20085 combination zp[2]:9 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 20070 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sbyte] best 20070 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_byte] best 20062 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp[1]:39 [ print_byte::b#0 ] -Uplifting [div16u] best 20062 combination zp[2]:42 [ div16u::return#2 ] zp[2]:73 [ div16u::return#0 ] -Uplifting [RADIX] best 20062 combination -Uplifting [print_cls] best 20062 combination +Uplifting [main] best 19293 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::sb#0 ] +Uplifting [memset] best 19293 combination zp[2]:9 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_char] best 19278 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sbyte] best 19278 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [print_byte] best 19270 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp[1]:38 [ print_byte::b#0 ] +Uplifting [div16u] best 19270 combination zp[2]:41 [ div16u::return#2 ] zp[2]:73 [ div16u::return#0 ] +Uplifting [RADIX] best 19270 combination +Uplifting [print_cls] best 19270 combination Attempting to uplift remaining variables inzp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_sbyte] best 20062 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Attempting to uplift remaining variables inzp[1]:52 [ sin8s::x2#0 ] -Uplifting [sin8s] best 20058 combination reg byte a [ sin8s::x2#0 ] -Attempting to uplift remaining variables inzp[1]:55 [ mulu8_sel::return#2 ] -Uplifting [mulu8_sel] best 20052 combination reg byte a [ mulu8_sel::return#2 ] -Attempting to uplift remaining variables inzp[1]:56 [ sin8s::x3_6#0 ] -Uplifting [sin8s] best 20048 combination reg byte a [ sin8s::x3_6#0 ] -Attempting to uplift remaining variables inzp[1]:58 [ mulu8_sel::return#10 ] -Uplifting [mulu8_sel] best 20042 combination reg byte a [ mulu8_sel::return#10 ] -Attempting to uplift remaining variables inzp[1]:59 [ sin8s::x4#0 ] -Uplifting [sin8s] best 20038 combination reg byte a [ sin8s::x4#0 ] -Attempting to uplift remaining variables inzp[1]:60 [ mulu8_sel::return#11 ] -Uplifting [mulu8_sel] best 20032 combination reg byte a [ mulu8_sel::return#11 ] -Attempting to uplift remaining variables inzp[1]:61 [ sin8s::x5#0 ] -Uplifting [sin8s] best 20026 combination reg byte a [ sin8s::x5#0 ] -Attempting to uplift remaining variables inzp[1]:62 [ sin8s::x5_128#0 ] -Uplifting [sin8s] best 20020 combination reg byte a [ sin8s::x5_128#0 ] +Uplifting [print_sbyte] best 19270 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Attempting to uplift remaining variables inzp[1]:51 [ sin8s::x2#0 ] +Uplifting [sin8s] best 19266 combination reg byte a [ sin8s::x2#0 ] +Attempting to uplift remaining variables inzp[1]:54 [ mulu8_sel::return#2 ] +Uplifting [mulu8_sel] best 19260 combination reg byte a [ mulu8_sel::return#2 ] +Attempting to uplift remaining variables inzp[1]:55 [ sin8s::x3_6#0 ] +Uplifting [sin8s] best 19256 combination reg byte a [ sin8s::x3_6#0 ] +Attempting to uplift remaining variables inzp[1]:57 [ mulu8_sel::return#10 ] +Uplifting [mulu8_sel] best 19250 combination reg byte a [ mulu8_sel::return#10 ] +Attempting to uplift remaining variables inzp[1]:58 [ sin8s::x4#0 ] +Uplifting [sin8s] best 19246 combination reg byte a [ sin8s::x4#0 ] +Attempting to uplift remaining variables inzp[1]:59 [ mulu8_sel::return#11 ] +Uplifting [mulu8_sel] best 19240 combination reg byte a [ mulu8_sel::return#11 ] +Attempting to uplift remaining variables inzp[1]:60 [ sin8s::x5#0 ] +Uplifting [sin8s] best 19234 combination reg byte a [ sin8s::x5#0 ] +Attempting to uplift remaining variables inzp[1]:61 [ sin8s::x5_128#0 ] +Uplifting [sin8s] best 19228 combination reg byte a [ sin8s::x5_128#0 ] Attempting to uplift remaining variables inzp[1]:69 [ mulu8_sel::return#12 ] -Uplifting [mulu8_sel] best 20002 combination reg byte a [ mulu8_sel::return#12 ] -Attempting to uplift remaining variables inzp[1]:39 [ print_byte::b#0 ] -Uplifting [print_byte] best 20002 combination zp[1]:39 [ print_byte::b#0 ] -Attempting to uplift remaining variables inzp[1]:54 [ sin8s::x3#0 ] -Uplifting [sin8s] best 20002 combination zp[1]:54 [ sin8s::x3#0 ] -Attempting to uplift remaining variables inzp[1]:50 [ sin8s::x1#0 ] -Uplifting [sin8s] best 20002 combination zp[1]:50 [ sin8s::x1#0 ] +Uplifting [mulu8_sel] best 19210 combination reg byte a [ mulu8_sel::return#12 ] +Attempting to uplift remaining variables inzp[1]:38 [ print_byte::b#0 ] +Uplifting [print_byte] best 19210 combination zp[1]:38 [ print_byte::b#0 ] +Attempting to uplift remaining variables inzp[1]:53 [ sin8s::x3#0 ] +Uplifting [sin8s] best 19210 combination zp[1]:53 [ sin8s::x3#0 ] +Attempting to uplift remaining variables inzp[1]:49 [ sin8s::x1#0 ] +Uplifting [sin8s] best 19210 combination zp[1]:49 [ sin8s::x1#0 ] Attempting to uplift remaining variables inzp[1]:24 [ mulu8_sel::select#5 ] -Uplifting [mulu8_sel] best 20002 combination zp[1]:24 [ mulu8_sel::select#5 ] -Attempting to uplift remaining variables inzp[1]:57 [ sin8s::usinx#0 ] -Uplifting [sin8s] best 20002 combination zp[1]:57 [ sin8s::usinx#0 ] +Uplifting [mulu8_sel] best 19210 combination zp[1]:24 [ mulu8_sel::select#5 ] +Attempting to uplift remaining variables inzp[1]:56 [ sin8s::usinx#0 ] +Uplifting [sin8s] best 19210 combination zp[1]:56 [ sin8s::usinx#0 ] Attempting to uplift remaining variables inzp[1]:17 [ sin8s::isUpper#10 ] -Uplifting [sin8s] best 20002 combination zp[1]:17 [ sin8s::isUpper#10 ] -Coalescing zero page register [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] with [ zp[1]:39 [ print_byte::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] ] with [ zp[2]:48 [ sin8s::$4 ] ] - score: 1 +Uplifting [sin8s] best 19210 combination zp[1]:17 [ sin8s::isUpper#10 ] +Coalescing zero page register [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] with [ zp[1]:38 [ print_byte::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] ] with [ zp[2]:47 [ sin8s::$4 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:63 [ mul8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:71 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:42 [ div16u::return#2 ] ] with [ zp[2]:44 [ sin8s_gen::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:42 [ div16u::return#2 sin8s_gen::step#0 ] ] with [ zp[2]:73 [ div16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:71 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:41 [ div16u::return#2 ] ] with [ zp[2]:43 [ sin8s_gen::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:41 [ div16u::return#2 sin8s_gen::step#0 ] ] with [ zp[2]:73 [ div16u::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:65 [ mulu8_sel::$0 ] ] with [ zp[2]:67 [ mulu8_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp[2]:65 [ mulu8_sel::$0 mulu8_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:42 [ div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:41 [ div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:9 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:3 [ print_str::str#2 print_str::str#0 ] ] Coalescing zero page register [ zp[2]:11 [ sin8s_gen::i#2 sin8s_gen::i#1 ] ] with [ zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] Coalescing zero page register [ zp[1]:17 [ sin8s::isUpper#10 ] ] with [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] ] Coalescing zero page register [ zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 ] ] with [ zp[2]:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] -Coalescing zero page register [ zp[2]:31 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] -Coalescing zero page register [ zp[2]:33 [ divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp[2]:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] +Coalescing zero page register [ zp[2]:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:13 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] +Coalescing zero page register [ zp[2]:32 [ divr16u::dividend#2 divr16u::dividend#0 ] ] with [ zp[2]:15 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] Coalescing zero page register [ zp[2]:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp[2]:9 [ memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] ] Allocated (was zp[2]:11) zp[2]:2 [ sin8s_gen::i#2 sin8s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] Allocated (was zp[1]:17) zp[1]:4 [ sin8s::isUpper#10 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] Allocated (was zp[1]:24) zp[1]:5 [ mulu8_sel::select#5 ] Allocated (was zp[2]:26) zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] -Allocated (was zp[2]:28) zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] -Allocated (was zp[2]:31) zp[2]:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#2 sin8s_gen::x#1 ] -Allocated (was zp[2]:33) zp[2]:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] -Allocated (was zp[2]:35) zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] -Allocated (was zp[1]:50) zp[1]:16 [ sin8s::x1#0 ] -Allocated (was zp[1]:54) zp[1]:17 [ sin8s::x3#0 ] -Allocated (was zp[1]:57) zp[1]:18 [ sin8s::usinx#0 ] +Allocated (was zp[2]:28) zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated (was zp[2]:30) zp[2]:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#2 sin8s_gen::x#1 ] +Allocated (was zp[2]:32) zp[2]:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +Allocated (was zp[2]:34) zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] +Allocated (was zp[1]:49) zp[1]:16 [ sin8s::x1#0 ] +Allocated (was zp[1]:53) zp[1]:17 [ sin8s::x3#0 ] +Allocated (was zp[1]:56) zp[1]:18 [ sin8s::usinx#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4277,12 +4065,12 @@ sin8s_gen: { sta.z sintab lda #>sintab2 sta.z sintab+1 - // [58] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) sin8s_gen::x#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 sta.z x+1 - // [58] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [58] phi (word) sin8s_gen::i#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4596,8 +4384,6 @@ mulu8_sel: { // [114] (byte) mul8u::b#0 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy tya // [115] call mul8u - // [121] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] - mul8u_from_mulu8_sel: jsr mul8u // [116] (word) mul8u::return#2 ← (word) mul8u::res#2 jmp __b1 @@ -4628,13 +4414,14 @@ mul8u: { .label mb = 8 .label res = 6 .label return = 6 - // [122] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - __b1_from_mul8u: - // [122] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + // [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa sta.z mb lda #0 sta.z mb+1 - // [122] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [122] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + __b1_from_mul8u: + // [122] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [122] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -4728,7 +4515,7 @@ divr16u: { __b1_from_divr16u: // [137] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [137] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [137] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -4894,7 +4681,6 @@ Removing instruction lda #>0 Replacing instruction ldx.z x1 with TAX Replacing instruction ldy.z x1 with TAY Replacing instruction ldx.z x3 with TAX -Removing instruction lda #<0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 @@ -4989,7 +4775,6 @@ Removing instruction mulu8_sel_from___b12: Removing instruction __b13: Removing instruction __b7: Removing instruction __b8: -Removing instruction mul8u_from_mulu8_sel: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_mul8u: @@ -5013,6 +4798,8 @@ Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Removing instruction __b4: Succesful ASM optimization Pass5UnusedLabelElimination @@ -5021,9 +4808,9 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const word) PI_HALF_u4f12 = (number) $1922 -(const word) PI_u4f12 = (number) $3244 +(const word) PI2_u4f12 = (word) $6488 +(const word) PI_HALF_u4f12 = (word) $1922 +(const word) PI_u4f12 = (word) $3244 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -5108,6 +4895,7 @@ FINAL SYMBOL TABLE (byte) mul8u::b (byte) mul8u::b#0 reg byte a 2.0 (word) mul8u::mb +(word) mul8u::mb#0 mb zp[2]:8 4.0 (word) mul8u::mb#1 mb zp[2]:8 202.0 (word) mul8u::mb#2 mb zp[2]:8 43.57142857142858 (word) mul8u::res @@ -5202,7 +4990,7 @@ FINAL SYMBOL TABLE (label) sin8s::@8 (label) sin8s::@9 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#10 isUpper zp[1]:4 0.05555555555555555 (signed byte) sin8s::return @@ -5270,8 +5058,7 @@ reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mul zp[1]:5 [ mulu8_sel::select#5 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] -zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] -reg byte a [ mul8u::b#0 ] +zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] zp[2]:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#2 sin8s_gen::x#1 ] zp[2]:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] @@ -5294,6 +5081,7 @@ reg byte a [ sin8s::x4#0 ] reg byte a [ mulu8_sel::return#11 ] reg byte a [ sin8s::x5#0 ] reg byte a [ sin8s::x5_128#0 ] +reg byte a [ mul8u::b#0 ] reg byte a [ mulu8_sel::return#12 ] reg byte a [ mul8u::$1 ] reg byte a [ divr16u::$1 ] @@ -5301,7 +5089,7 @@ reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 16797 +Score: 16005 // File Comments // Upstart @@ -5620,11 +5408,11 @@ sin8s_gen: { sta.z sintab lda #>sintab2 sta.z sintab+1 - // [58] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [58] phi (word) sin8s_gen::x#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x sta.z x+1 - // [58] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [58] phi (word) sin8s_gen::i#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vwuc1 sta.z i sta.z i+1 // u[4.12] @@ -5930,9 +5718,7 @@ mulu8_sel: { // [114] (byte) mul8u::b#0 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy tya // [115] call mul8u - // [121] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] jsr mul8u - // mul8u(v1, v2) // [116] (word) mul8u::return#2 ← (word) mul8u::res#2 // mulu8_sel::@1 // [117] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 @@ -5961,12 +5747,14 @@ mul8u: { .label mb = 8 .label res = 6 .label return = 6 - // [122] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [122] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + // mb = b + // [121] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa sta.z mb lda #0 sta.z mb+1 - // [122] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [122] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [122] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [122] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 sta.z res sta.z res+1 // [122] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy @@ -6053,7 +5841,7 @@ divr16u: { // [137] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [137] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [137] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [137] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/sinusgen8.sym b/src/test/ref/sinusgen8.sym index 88c7dbca0..eaa394071 100644 --- a/src/test/ref/sinusgen8.sym +++ b/src/test/ref/sinusgen8.sym @@ -1,9 +1,9 @@ (label) @1 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const word) PI_HALF_u4f12 = (number) $1922 -(const word) PI_u4f12 = (number) $3244 +(const word) PI2_u4f12 = (word) $6488 +(const word) PI_HALF_u4f12 = (word) $1922 +(const word) PI_u4f12 = (word) $3244 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -88,6 +88,7 @@ (byte) mul8u::b (byte) mul8u::b#0 reg byte a 2.0 (word) mul8u::mb +(word) mul8u::mb#0 mb zp[2]:8 4.0 (word) mul8u::mb#1 mb zp[2]:8 202.0 (word) mul8u::mb#2 mb zp[2]:8 43.57142857142858 (word) mul8u::res @@ -182,7 +183,7 @@ (label) sin8s::@8 (label) sin8s::@9 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#10 isUpper zp[1]:4 0.05555555555555555 (signed byte) sin8s::return @@ -250,8 +251,7 @@ reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mul zp[1]:5 [ mulu8_sel::select#5 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:6 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] -zp[2]:8 [ mul8u::mb#2 mul8u::mb#1 ] -reg byte a [ mul8u::b#0 ] +zp[2]:8 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] zp[2]:10 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 sin8s_gen::x#2 sin8s_gen::x#1 ] zp[2]:12 [ divr16u::dividend#2 divr16u::dividend#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] @@ -274,6 +274,7 @@ reg byte a [ sin8s::x4#0 ] reg byte a [ mulu8_sel::return#11 ] reg byte a [ sin8s::x5#0 ] reg byte a [ sin8s::x5_128#0 ] +reg byte a [ mul8u::b#0 ] reg byte a [ mulu8_sel::return#12 ] reg byte a [ mul8u::$1 ] reg byte a [ divr16u::$1 ] diff --git a/src/test/ref/sinusgen8b.asm b/src/test/ref/sinusgen8b.asm index 66b319492..1fbabfb7e 100644 --- a/src/test/ref/sinusgen8b.asm +++ b/src/test/ref/sinusgen8b.asm @@ -203,11 +203,14 @@ sin16s_gen: { sta.z sintab lda #>main.sintabw sta.z sintab+1 - lda #0 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -482,8 +485,8 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($20) a, word zp($e) b) mul16u: { - .label a = $20 .label mb = $1a + .label a = $20 .label res = 6 .label b = $e .label return = 6 @@ -496,7 +499,9 @@ mul16u: { sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a diff --git a/src/test/ref/sinusgen8b.cfg b/src/test/ref/sinusgen8b.cfg index 6f8c5afac..6db2725b1 100644 --- a/src/test/ref/sinusgen8b.cfg +++ b/src/test/ref/sinusgen8b.cfg @@ -150,8 +150,8 @@ sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [66] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintabw sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [66] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [66] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) + [66] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) + [66] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [67] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 @@ -262,11 +262,11 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel - [126] phi() + [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [127] (dword) mul16u::mb#2 ← phi( mul16u/(word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [127] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [127] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [127] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [127] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -313,7 +313,7 @@ divr16u: scope:[divr16u] from div16u div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [147] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [147] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [147] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [147] (word) divr16u::dividend#4 ← phi( divr16u/(word) divr16u::dividend#6 divr16u::@3/(word) divr16u::dividend#0 ) [147] (word) divr16u::rem#6 ← phi( divr16u/(word) divr16u::rem#11 divr16u::@3/(word) divr16u::rem#10 ) [148] (word) divr16u::rem#0 ← (word) divr16u::rem#6 << (byte) 1 @@ -358,8 +358,8 @@ sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 [168] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte*) main::sintabb sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 ) - [168] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) - [168] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) + [168] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) + [168] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) [169] if((word) sin8s_gen::i#2<(const word) main::wavelength) goto sin8s_gen::@2 to:sin8s_gen::@return sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 @@ -477,11 +477,11 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@1 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mulu8_sel - [231] phi() + [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [232] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [232] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [232] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [232] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [232] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [233] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return diff --git a/src/test/ref/sinusgen8b.log b/src/test/ref/sinusgen8b.log index e1fd06224..ce7839c68 100644 --- a/src/test/ref/sinusgen8b.log +++ b/src/test/ref/sinusgen8b.log @@ -109,7 +109,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@2 @2: scope:[] from @begin - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@33 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -117,7 +117,7 @@ divr16u: scope:[divr16u] from div16u div32u16u div32u16u::@2 (word) divr16u::divisor#7 ← phi( div16u/(word) divr16u::divisor#0 div32u16u/(word) divr16u::divisor#1 div32u16u::@2/(word) divr16u::divisor#2 ) (word) divr16u::dividend#6 ← phi( div16u/(word) divr16u::dividend#1 div32u16u/(word) divr16u::dividend#2 div32u16u::@2/(word) divr16u::dividend#3 ) (word) divr16u::rem#11 ← phi( div16u/(word) divr16u::rem#3 div32u16u/(word) divr16u::rem#4 div32u16u::@2/(word) divr16u::rem#5 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -251,7 +251,7 @@ div32u16u::@3: scope:[div32u16u] from div32u16u::@2 (word~) div32u16u::$3 ← (word) divr16u::return#8 (word) rem16u#6 ← (word) rem16u#20 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 - (dword) div32u16u::quotient#0 ← ((dword)) { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } + (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@3 @@ -266,8 +266,8 @@ div32u16u::@return: scope:[div32u16u] from div32u16u::@3 mul8u: scope:[mul8u] from mulu8_sel (byte) mul8u::a#5 ← phi( mulu8_sel/(byte) mul8u::a#1 ) (byte) mul8u::b#1 ← phi( mulu8_sel/(byte) mul8u::b#0 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#1 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#1 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -315,8 +315,8 @@ mul8u::@return: scope:[mul8u] from mul8u::@3 mul16u: scope:[mul16u] from mulu16_sel (word) mul16u::a#5 ← phi( mulu16_sel/(word) mul16u::a#1 ) (word) mul16u::b#1 ← phi( mulu16_sel/(word) mul16u::b#0 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#1 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#1 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -378,8 +378,8 @@ sin16s_gen::@7: scope:[sin16s_gen] from sin16s_gen (dword~) sin16s_gen::$0 ← (dword) div32u16u::return#4 (word) rem16u#8 ← (word) rem16u#22 (dword) sin16s_gen::step#0 ← (dword~) sin16s_gen::$0 - (dword) sin16s_gen::x#0 ← (number) 0 - (word) sin16s_gen::i#0 ← (number) 0 + (dword) sin16s_gen::x#0 ← (dword) 0 + (word) sin16s_gen::i#0 ← (word) 0 to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@7 sin16s_gen::@8 (dword) sin16s_gen::step#3 ← phi( sin16s_gen::@7/(dword) sin16s_gen::step#0 sin16s_gen::@8/(dword) sin16s_gen::step#1 ) @@ -441,8 +441,8 @@ sin8s_gen::@7: scope:[sin8s_gen] from sin8s_gen (word~) sin8s_gen::$0 ← (word) div16u::return#4 (word) rem16u#10 ← (word) rem16u#24 (word) sin8s_gen::step#0 ← (word~) sin8s_gen::$0 - (word) sin8s_gen::x#0 ← (number) 0 - (word) sin8s_gen::i#0 ← (number) 0 + (word) sin8s_gen::x#0 ← (word) 0 + (word) sin8s_gen::i#0 ← (word) 0 to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@7 sin8s_gen::@8 (word) sin8s_gen::step#3 ← phi( sin8s_gen::@7/(word) sin8s_gen::step#0 sin8s_gen::@8/(word) sin8s_gen::step#1 ) @@ -489,7 +489,7 @@ sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen::@2 (dword) sin16s::x#3 ← phi( sin16s_gen::@2/(dword) sin16s::x#0 ) - (byte) sin16s::isUpper#0 ← (number) 0 + (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 @@ -612,7 +612,7 @@ sin16s::@return: scope:[sin16s] from sin16s::@3 (signed byte()) sin8s((word) sin8s::x) sin8s: scope:[sin8s] from sin8s_gen::@2 (word) sin8s::x#3 ← phi( sin8s_gen::@2/(word) sin8s::x#0 ) - (byte) sin8s::isUpper#0 ← (number) 0 + (byte) sin8s::isUpper#0 ← (byte) 0 (bool~) sin8s::$0 ← (word) sin8s::x#3 >= (const word) PI_u4f12 (bool~) sin8s::$1 ← ! (bool~) sin8s::$0 if((bool~) sin8s::$1) goto sin8s::@1 @@ -1080,12 +1080,12 @@ SYMBOL TABLE SSA (label) @59 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const word) PI_HALF_u4f12 = (number) $1922 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const word) PI_u4f12 = (number) $3244 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const word) PI2_u4f12 = (word) $6488 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const word) PI_HALF_u4f12 = (word) $1922 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const word) PI_u4f12 = (word) $3244 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1813,7 +1813,7 @@ SYMBOL TABLE SSA (label) sin8s::@7 (label) sin8s::@8 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#0 (byte) sin8s::isUpper#1 @@ -1919,8 +1919,6 @@ SYMBOL TABLE SSA Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Successful SSA optimization Pass2FixInlineConstructors -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#6 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1931,25 +1929,18 @@ Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) di Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#8 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#4 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$2 ← (unumber~) mul16u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (word~) mul16u::$5 ← (word) mul16u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (dword) sin16s_gen::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin16s_gen::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin8s_gen::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin8s_gen::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin16s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 @@ -1960,7 +1951,6 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#3 ← (nu Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (number) 0 Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin8s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin8s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (word~) sin8s::$4 ← (word) sin8s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu8_sel::select#0 ← (number) 0 @@ -1979,17 +1969,8 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#2 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#4 ← (unumber)(number) 0 -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 -Inlining cast (dword) sin16s_gen::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin16s_gen::i#0 ← (unumber)(number) 0 -Inlining cast (word) sin8s_gen::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin8s_gen::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sin16s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 @@ -1999,7 +1980,6 @@ Inlining cast (byte) mulu16_sel::select#3 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#4 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s::$14 ← (signed word)(word) sin16s::usinx#1 Inlining cast (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#3 -Inlining cast (byte) sin8s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin8s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu8_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu8_sel::select#1 ← (unumber)(number) 1 @@ -2015,8 +1995,6 @@ Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Inlining cast (word~) main::$3 ← (word)(byte) main::i#2 Inlining cast (signed byte~) main::$6 ← (signed byte)(byte~) main::$5 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2028,22 +2006,15 @@ Simplifying constant integer cast 0 Simplifying constant integer cast (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -2053,7 +2024,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -2072,8 +2042,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2083,22 +2051,15 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2108,7 +2069,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2173,14 +2133,12 @@ Alias (word) divr16u::return#4 = (word) divr16u::return#8 Alias (word) rem16u#20 = (word) rem16u#6 (word) rem16u#21 (word) rem16u#7 Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword~) div32u16u::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 -Alias (word) mul8u::mb#0 = (byte) mul8u::b#1 Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 Alias (byte) mul8u::a#0 = (byte~) mul8u::$5 Alias (word) mul8u::mb#1 = (word~) mul8u::$6 Alias (word) mul8u::res#1 = (word~) mul8u::$4 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#1 Alias (word) mul16u::a#2 = (word) mul16u::a#3 (word) mul16u::a#6 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#3 (dword) mul16u::return#1 @@ -2330,9 +2288,9 @@ Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 Identical Phi Values (word) rem16u#31 (word) rem16u#32 Identical Phi Values (word) rem16u#19 (word) rem16u#1 Identical Phi Values (word) rem16u#20 (word) rem16u#1 -Identical Phi Values (word) mul8u::mb#0 (byte) mul8u::b#0 +Identical Phi Values (byte) mul8u::b#1 (byte) mul8u::b#0 Identical Phi Values (byte) mul8u::a#5 (byte) mul8u::a#1 -Identical Phi Values (dword) mul16u::mb#0 (word) mul16u::b#0 +Identical Phi Values (word) mul16u::b#1 (word) mul16u::b#0 Identical Phi Values (word) mul16u::a#5 (word) mul16u::a#1 Identical Phi Values (word) sin16s_gen::wavelength#1 (word) sin16s_gen::wavelength#0 Identical Phi Values (word) rem16u#32 (word) rem16u#12 @@ -2484,20 +2442,20 @@ Finalized unsigned number type (byte) $c0 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [22] (word) divr16u::dividend#2 ← > (const dword) div32u16u::dividend#0 Constant right-side identified [26] (word) divr16u::dividend#3 ← < (const dword) div32u16u::dividend#0 -Constant right-side identified [182] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Constant right-side identified [184] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#2 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#3 = (const dword) PI2_u4f28 Constant inlined divr16u::dividend#3 = <(const dword) PI2_u4f28 Constant inlined sin16s_gen::sintab#1 = (const signed word*) main::sintabw Constant inlined mulu8_sel::v2#2 = (const byte) sin8s::DIV_6 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined print_char::ch#1 = (byte) ' ' Constant inlined mulu16_sel::v2#2 = (word)(number) $10000/(number) 6 Constant inlined print_char::ch#0 = (byte) '-' Constant inlined sin8s_gen::sintab#1 = (const signed byte*) main::sintabb -Constant inlined sin16s_gen::x#0 = (byte) 0 +Constant inlined sin16s_gen::x#0 = (dword) 0 Constant inlined sin8s_gen::wavelength#0 = (const word) main::wavelength Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined div32u16u::divisor#0 = (const word) main::wavelength Constant inlined print_str::str#1 = (const string) main::str -Constant inlined sin8s_gen::i#0 = (byte) 0 +Constant inlined sin8s_gen::i#0 = (word) 0 Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) divr16u::divisor#7 (const word) main::wavelength Successful SSA optimization Pass2IdenticalPhiElimination @@ -2635,11 +2593,11 @@ Calls in [print_cls] to memset:70 Calls in [sin16s_gen] to div32u16u:83 sin16s:90 Calls in [sin16s] to mulu16_sel:114 mulu16_sel:121 mulu16_sel:126 mulu16_sel:134 mulu16_sel:141 Calls in [mulu16_sel] to mul16u:157 -Calls in [div32u16u] to divr16u:181 divr16u:186 -Calls in [sin8s_gen] to div16u:222 sin8s:229 -Calls in [sin8s] to mulu8_sel:253 mulu8_sel:260 mulu8_sel:265 mulu8_sel:273 mulu8_sel:280 -Calls in [mulu8_sel] to mul8u:301 -Calls in [div16u] to divr16u:325 +Calls in [div32u16u] to divr16u:182 divr16u:187 +Calls in [sin8s_gen] to div16u:223 sin8s:230 +Calls in [sin8s] to mulu8_sel:254 mulu8_sel:261 mulu8_sel:266 mulu8_sel:274 mulu8_sel:281 +Calls in [mulu8_sel] to mul8u:302 +Calls in [div16u] to divr16u:327 Created 46 initial phi equivalence classes Coalesced [29] main::i#5 ← main::i#1 @@ -2673,52 +2631,52 @@ Coalesced [140] mulu16_sel::v2#7 ← mulu16_sel::v2#4 Coalesced [148] sin16s::return#6 ← sin16s::sinx#1 Coalesced [152] sin16s::x#10 ← sin16s::x#4 Coalesced [153] sin16s::x#8 ← sin16s::x#0 -Coalesced [163] mul16u::a#7 ← mul16u::a#1 -Coalesced [164] mul16u::mb#6 ← mul16u::b#0 -Coalesced [172] mul16u::res#9 ← mul16u::res#1 -Coalesced [176] mul16u::a#8 ← mul16u::a#0 -Coalesced [177] mul16u::res#7 ← mul16u::res#6 -Coalesced [178] mul16u::mb#7 ← mul16u::mb#1 -Coalesced (already) [179] mul16u::res#8 ← mul16u::res#2 -Coalesced [185] divr16u::rem#13 ← divr16u::rem#5 -Coalesced [192] divr16u::rem#14 ← divr16u::rem#11 -Coalesced [193] divr16u::dividend#10 ← divr16u::dividend#6 -Coalesced [200] divr16u::rem#17 ← divr16u::rem#1 -Coalesced [207] divr16u::rem#19 ← divr16u::rem#2 -Coalesced [208] divr16u::return#10 ← divr16u::quotient#2 -Coalesced [214] divr16u::rem#15 ← divr16u::rem#10 -Coalesced [215] divr16u::dividend#11 ← divr16u::dividend#0 -Coalesced [216] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [217] divr16u::i#7 ← divr16u::i#1 -Coalesced [218] divr16u::rem#18 ← divr16u::rem#7 -Coalesced [219] divr16u::return#9 ← divr16u::quotient#1 -Coalesced [220] divr16u::rem#16 ← divr16u::rem#0 -Coalesced [236] sin8s_gen::i#5 ← sin8s_gen::i#1 -Coalesced [237] sin8s_gen::x#5 ← sin8s_gen::x#1 -Coalesced [238] sin8s_gen::sintab#7 ← sin8s_gen::sintab#0 -Coalesced [241] sin8s::x#9 ← sin8s::x#1 -Coalesced [245] sin8s::x#11 ← sin8s::x#2 -Coalesced [251] mulu8_sel::v1#10 ← mulu8_sel::v1#0 -Coalesced [252] mulu8_sel::v2#9 ← mulu8_sel::v2#0 -Coalesced [258] mulu8_sel::v1#6 ← mulu8_sel::v1#1 -Coalesced [259] mulu8_sel::v2#6 ← mulu8_sel::v2#1 -Coalesced [264] mulu8_sel::v1#7 ← mulu8_sel::v1#2 -Coalesced [271] mulu8_sel::v1#8 ← mulu8_sel::v1#3 -Coalesced [272] mulu8_sel::v2#7 ← mulu8_sel::v2#3 -Coalesced [278] mulu8_sel::v1#9 ← mulu8_sel::v1#4 -Coalesced [279] mulu8_sel::v2#8 ← mulu8_sel::v2#4 -Coalesced [287] sin8s::usinx#9 ← sin8s::usinx#2 -Coalesced [291] sin8s::return#6 ← sin8s::sinx#1 -Coalesced [295] sin8s::usinx#8 ← sin8s::usinx#1 -Coalesced [296] sin8s::x#10 ← sin8s::x#4 -Coalesced [297] sin8s::x#8 ← sin8s::x#0 -Coalesced [307] mul8u::a#7 ← mul8u::a#1 -Coalesced [308] mul8u::mb#6 ← mul8u::b#0 -Coalesced [316] mul8u::res#9 ← mul8u::res#1 -Coalesced [320] mul8u::a#8 ← mul8u::a#0 -Coalesced [321] mul8u::res#7 ← mul8u::res#6 -Coalesced [322] mul8u::mb#7 ← mul8u::mb#1 -Coalesced (already) [323] mul8u::res#8 ← mul8u::res#2 +Coalesced [164] mul16u::a#7 ← mul16u::a#1 +Coalesced [165] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [173] mul16u::res#9 ← mul16u::res#1 +Coalesced [177] mul16u::a#8 ← mul16u::a#0 +Coalesced [178] mul16u::res#7 ← mul16u::res#6 +Coalesced [179] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [180] mul16u::res#8 ← mul16u::res#2 +Coalesced [186] divr16u::rem#13 ← divr16u::rem#5 +Coalesced [193] divr16u::rem#14 ← divr16u::rem#11 +Coalesced [194] divr16u::dividend#10 ← divr16u::dividend#6 +Coalesced [201] divr16u::rem#17 ← divr16u::rem#1 +Coalesced [208] divr16u::rem#19 ← divr16u::rem#2 +Coalesced [209] divr16u::return#10 ← divr16u::quotient#2 +Coalesced [215] divr16u::rem#15 ← divr16u::rem#10 +Coalesced [216] divr16u::dividend#11 ← divr16u::dividend#0 +Coalesced [217] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [218] divr16u::i#7 ← divr16u::i#1 +Coalesced [219] divr16u::rem#18 ← divr16u::rem#7 +Coalesced [220] divr16u::return#9 ← divr16u::quotient#1 +Coalesced [221] divr16u::rem#16 ← divr16u::rem#0 +Coalesced [237] sin8s_gen::i#5 ← sin8s_gen::i#1 +Coalesced [238] sin8s_gen::x#5 ← sin8s_gen::x#1 +Coalesced [239] sin8s_gen::sintab#7 ← sin8s_gen::sintab#0 +Coalesced [242] sin8s::x#9 ← sin8s::x#1 +Coalesced [246] sin8s::x#11 ← sin8s::x#2 +Coalesced [252] mulu8_sel::v1#10 ← mulu8_sel::v1#0 +Coalesced [253] mulu8_sel::v2#9 ← mulu8_sel::v2#0 +Coalesced [259] mulu8_sel::v1#6 ← mulu8_sel::v1#1 +Coalesced [260] mulu8_sel::v2#6 ← mulu8_sel::v2#1 +Coalesced [265] mulu8_sel::v1#7 ← mulu8_sel::v1#2 +Coalesced [272] mulu8_sel::v1#8 ← mulu8_sel::v1#3 +Coalesced [273] mulu8_sel::v2#7 ← mulu8_sel::v2#3 +Coalesced [279] mulu8_sel::v1#9 ← mulu8_sel::v1#4 +Coalesced [280] mulu8_sel::v2#8 ← mulu8_sel::v2#4 +Coalesced [288] sin8s::usinx#9 ← sin8s::usinx#2 +Coalesced [292] sin8s::return#6 ← sin8s::sinx#1 +Coalesced [296] sin8s::usinx#8 ← sin8s::usinx#1 +Coalesced [297] sin8s::x#10 ← sin8s::x#4 +Coalesced [298] sin8s::x#8 ← sin8s::x#0 +Coalesced [309] mul8u::a#7 ← mul8u::a#1 +Coalesced [310] mul8u::mb#6 ← mul8u::mb#0 +Coalesced [318] mul8u::res#9 ← mul8u::res#1 +Coalesced [322] mul8u::a#8 ← mul8u::a#0 +Coalesced [323] mul8u::res#7 ← mul8u::res#6 +Coalesced [324] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [325] mul8u::res#8 ← mul8u::res#2 Coalesced down to 35 phi equivalence classes Culled Empty Block (label) @2 Culled Empty Block (label) @33 @@ -2789,10 +2747,8 @@ Adding NOP phi() at start of print_sbyte::@1 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset Adding NOP phi() at start of sin16s_gen -Adding NOP phi() at start of mul16u Adding NOP phi() at start of div32u16u Adding NOP phi() at start of sin8s_gen -Adding NOP phi() at start of mul8u Adding NOP phi() at start of div16u FINAL CONTROL FLOW GRAPH @@ -2948,8 +2904,8 @@ sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [66] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintabw sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) - [66] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) - [66] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(byte) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) + [66] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) + [66] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [67] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 @@ -3060,11 +3016,11 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel - [126] phi() + [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [127] (dword) mul16u::mb#2 ← phi( mul16u/(word) mul16u::b#0 mul16u::@3/(dword) mul16u::mb#1 ) - [127] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) + [127] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [127] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [127] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return @@ -3111,7 +3067,7 @@ divr16u: scope:[divr16u] from div16u div32u16u div32u16u::@1 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [147] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [147] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [147] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [147] (word) divr16u::dividend#4 ← phi( divr16u/(word) divr16u::dividend#6 divr16u::@3/(word) divr16u::dividend#0 ) [147] (word) divr16u::rem#6 ← phi( divr16u/(word) divr16u::rem#11 divr16u::@3/(word) divr16u::rem#10 ) [148] (word) divr16u::rem#0 ← (word) divr16u::rem#6 << (byte) 1 @@ -3156,8 +3112,8 @@ sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 [168] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte*) main::sintabb sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 ) - [168] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) - [168] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) + [168] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 ) + [168] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(word) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) [169] if((word) sin8s_gen::i#2<(const word) main::wavelength) goto sin8s_gen::@2 to:sin8s_gen::@return sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@1 @@ -3275,11 +3231,11 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@1 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mulu8_sel - [231] phi() + [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [232] (word) mul8u::mb#2 ← phi( mul8u/(byte) mul8u::b#0 mul8u::@3/(word) mul8u::mb#1 ) - [232] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) + [232] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [232] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) [232] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@3/(byte) mul8u::a#0 ) [233] if((byte) mul8u::a#2!=(byte) 0) goto mul8u::@2 to:mul8u::@return @@ -3392,6 +3348,7 @@ VARIABLE REGISTER WEIGHTS (word) mul16u::b (word) mul16u::b#0 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 202.0 (dword) mul16u::mb#2 43.57142857142858 (dword) mul16u::res @@ -3409,6 +3366,7 @@ VARIABLE REGISTER WEIGHTS (byte) mul8u::b (byte) mul8u::b#0 2.0 (word) mul8u::mb +(word) mul8u::mb#0 4.0 (word) mul8u::mb#1 202.0 (word) mul8u::mb#2 43.57142857142858 (word) mul8u::res @@ -3594,8 +3552,6 @@ VARIABLE REGISTER WEIGHTS (word) sin8s_gen::x#1 11.0 (word) sin8s_gen::x#2 4.125 -Not consolidating phi with different size mul16u::mb#2 mul16u::b#0 -Not consolidating phi with different size mul8u::mb#2 mul8u::b#0 Initial phi equivalence classes [ main::i#2 main::i#1 ] [ print_str::str#2 print_str::str#0 ] @@ -3614,8 +3570,7 @@ Initial phi equivalence classes [ mulu16_sel::select#5 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -[ mul16u::mb#2 mul16u::mb#1 ] -[ mul16u::b#0 ] +[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -3632,8 +3587,7 @@ Initial phi equivalence classes [ mulu8_sel::select#5 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#1 ] -[ mul8u::b#0 ] +[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] Added variable main::sb#0 to live range equivalence class [ main::sb#0 ] Added variable main::$3 to live range equivalence class [ main::$3 ] Added variable main::$11 to live range equivalence class [ main::$11 ] @@ -3663,6 +3617,7 @@ Added variable mulu16_sel::return#11 to live range equivalence class [ mulu16_se Added variable sin16s::x5#0 to live range equivalence class [ sin16s::x5#0 ] Added variable sin16s::x5_128#0 to live range equivalence class [ sin16s::x5_128#0 ] Added variable sin16s::usinx#1 to live range equivalence class [ sin16s::usinx#1 ] +Added variable mul16u::b#0 to live range equivalence class [ mul16u::b#0 ] Added variable mul16u::return#2 to live range equivalence class [ mul16u::return#2 ] Added variable mulu16_sel::$0 to live range equivalence class [ mulu16_sel::$0 ] Added variable mulu16_sel::$1 to live range equivalence class [ mulu16_sel::$1 ] @@ -3694,6 +3649,7 @@ Added variable sin8s::x4#0 to live range equivalence class [ sin8s::x4#0 ] Added variable mulu8_sel::return#11 to live range equivalence class [ mulu8_sel::return#11 ] Added variable sin8s::x5#0 to live range equivalence class [ sin8s::x5#0 ] Added variable sin8s::x5_128#0 to live range equivalence class [ sin8s::x5_128#0 ] +Added variable mul8u::b#0 to live range equivalence class [ mul8u::b#0 ] Added variable mul8u::return#2 to live range equivalence class [ mul8u::return#2 ] Added variable mulu8_sel::$0 to live range equivalence class [ mulu8_sel::$0 ] Added variable mulu8_sel::$1 to live range equivalence class [ mulu8_sel::$1 ] @@ -3719,8 +3675,7 @@ Complete equivalence classes [ mulu16_sel::select#5 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -[ mul16u::mb#2 mul16u::mb#1 ] -[ mul16u::b#0 ] +[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] @@ -3737,8 +3692,7 @@ Complete equivalence classes [ mulu8_sel::select#5 ] [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -[ mul8u::mb#2 mul8u::mb#1 ] -[ mul8u::b#0 ] +[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] [ main::sb#0 ] [ main::$3 ] [ main::$11 ] @@ -3768,6 +3722,7 @@ Complete equivalence classes [ sin16s::x5#0 ] [ sin16s::x5_128#0 ] [ sin16s::usinx#1 ] +[ mul16u::b#0 ] [ mul16u::return#2 ] [ mulu16_sel::$0 ] [ mulu16_sel::$1 ] @@ -3799,6 +3754,7 @@ Complete equivalence classes [ mulu8_sel::return#11 ] [ sin8s::x5#0 ] [ sin8s::x5_128#0 ] +[ mul8u::b#0 ] [ mul8u::return#2 ] [ mulu8_sel::$0 ] [ mulu8_sel::$1 ] @@ -3823,86 +3779,86 @@ Allocated zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_s Allocated zp[1]:30 [ mulu16_sel::select#5 ] Allocated zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -Allocated zp[4]:37 [ mul16u::mb#2 mul16u::mb#1 ] -Allocated zp[2]:41 [ mul16u::b#0 ] -Allocated zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp[2]:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] -Allocated zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp[1]:49 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp[2]:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] -Allocated zp[2]:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] -Allocated zp[2]:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] -Allocated zp[1]:56 [ sin8s::isUpper#10 ] -Allocated zp[2]:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] -Allocated zp[1]:59 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] -Allocated zp[1]:60 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] -Allocated zp[1]:61 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] -Allocated zp[1]:62 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] -Allocated zp[1]:63 [ mulu8_sel::select#5 ] -Allocated zp[1]:64 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] -Allocated zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -Allocated zp[2]:67 [ mul8u::mb#2 mul8u::mb#1 ] -Allocated zp[1]:69 [ mul8u::b#0 ] -Allocated zp[1]:70 [ main::sb#0 ] -Allocated zp[2]:71 [ main::$3 ] -Allocated zp[2]:73 [ main::$11 ] -Allocated zp[2]:75 [ main::$4 ] -Allocated zp[2]:77 [ main::sw#0 ] -Allocated zp[1]:79 [ main::$6 ] -Allocated zp[1]:80 [ main::sd#0 ] -Allocated zp[1]:81 [ print_byte::b#0 ] -Allocated zp[1]:82 [ print_byte::$0 ] -Allocated zp[1]:83 [ print_byte::$2 ] -Allocated zp[4]:84 [ div32u16u::return#2 ] -Allocated zp[4]:88 [ sin16s_gen::step#0 ] -Allocated zp[2]:92 [ sin16s::return#0 ] -Allocated zp[2]:94 [ sin16s_gen::$2 ] -Allocated zp[4]:96 [ sin16s::$4 ] -Allocated zp[2]:100 [ sin16s::x1#0 ] -Allocated zp[2]:102 [ mulu16_sel::return#0 ] -Allocated zp[2]:104 [ sin16s::x2#0 ] -Allocated zp[2]:106 [ mulu16_sel::return#1 ] -Allocated zp[2]:108 [ sin16s::x3#0 ] -Allocated zp[2]:110 [ mulu16_sel::return#2 ] -Allocated zp[2]:112 [ sin16s::x3_6#0 ] -Allocated zp[2]:114 [ sin16s::usinx#0 ] -Allocated zp[2]:116 [ mulu16_sel::return#10 ] -Allocated zp[2]:118 [ sin16s::x4#0 ] -Allocated zp[2]:120 [ mulu16_sel::return#11 ] -Allocated zp[2]:122 [ sin16s::x5#0 ] -Allocated zp[2]:124 [ sin16s::x5_128#0 ] -Allocated zp[2]:126 [ sin16s::usinx#1 ] -Allocated zp[4]:128 [ mul16u::return#2 ] -Allocated zp[4]:132 [ mulu16_sel::$0 ] -Allocated zp[4]:136 [ mulu16_sel::$1 ] -Allocated zp[2]:140 [ mulu16_sel::return#12 ] -Allocated zp[1]:142 [ mul16u::$1 ] -Allocated zp[2]:143 [ divr16u::return#3 ] -Allocated zp[2]:145 [ div32u16u::quotient_hi#0 ] -Allocated zp[2]:147 [ divr16u::return#4 ] -Allocated zp[2]:149 [ div32u16u::quotient_lo#0 ] -Allocated zp[4]:151 [ div32u16u::return#0 ] -Allocated zp[1]:155 [ divr16u::$1 ] -Allocated zp[1]:156 [ divr16u::$2 ] -Allocated zp[2]:157 [ rem16u#1 ] -Allocated zp[2]:159 [ div16u::return#2 ] -Allocated zp[2]:161 [ sin8s_gen::step#0 ] -Allocated zp[1]:163 [ sin8s::return#0 ] -Allocated zp[1]:164 [ sin8s_gen::$2 ] -Allocated zp[2]:165 [ sin8s::$4 ] -Allocated zp[1]:167 [ sin8s::x1#0 ] -Allocated zp[1]:168 [ mulu8_sel::return#0 ] -Allocated zp[1]:169 [ sin8s::x2#0 ] -Allocated zp[1]:170 [ mulu8_sel::return#1 ] -Allocated zp[1]:171 [ sin8s::x3#0 ] -Allocated zp[1]:172 [ mulu8_sel::return#2 ] -Allocated zp[1]:173 [ sin8s::x3_6#0 ] -Allocated zp[1]:174 [ sin8s::usinx#0 ] -Allocated zp[1]:175 [ mulu8_sel::return#10 ] -Allocated zp[1]:176 [ sin8s::x4#0 ] -Allocated zp[1]:177 [ mulu8_sel::return#11 ] -Allocated zp[1]:178 [ sin8s::x5#0 ] -Allocated zp[1]:179 [ sin8s::x5_128#0 ] +Allocated zp[4]:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp[2]:43 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] +Allocated zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp[1]:47 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp[2]:48 [ sin8s_gen::i#2 sin8s_gen::i#1 ] +Allocated zp[2]:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] +Allocated zp[2]:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] +Allocated zp[1]:54 [ sin8s::isUpper#10 ] +Allocated zp[2]:55 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] +Allocated zp[1]:57 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] +Allocated zp[1]:58 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] +Allocated zp[1]:59 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] +Allocated zp[1]:60 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] +Allocated zp[1]:61 [ mulu8_sel::select#5 ] +Allocated zp[1]:62 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +Allocated zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +Allocated zp[2]:65 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated zp[1]:67 [ main::sb#0 ] +Allocated zp[2]:68 [ main::$3 ] +Allocated zp[2]:70 [ main::$11 ] +Allocated zp[2]:72 [ main::$4 ] +Allocated zp[2]:74 [ main::sw#0 ] +Allocated zp[1]:76 [ main::$6 ] +Allocated zp[1]:77 [ main::sd#0 ] +Allocated zp[1]:78 [ print_byte::b#0 ] +Allocated zp[1]:79 [ print_byte::$0 ] +Allocated zp[1]:80 [ print_byte::$2 ] +Allocated zp[4]:81 [ div32u16u::return#2 ] +Allocated zp[4]:85 [ sin16s_gen::step#0 ] +Allocated zp[2]:89 [ sin16s::return#0 ] +Allocated zp[2]:91 [ sin16s_gen::$2 ] +Allocated zp[4]:93 [ sin16s::$4 ] +Allocated zp[2]:97 [ sin16s::x1#0 ] +Allocated zp[2]:99 [ mulu16_sel::return#0 ] +Allocated zp[2]:101 [ sin16s::x2#0 ] +Allocated zp[2]:103 [ mulu16_sel::return#1 ] +Allocated zp[2]:105 [ sin16s::x3#0 ] +Allocated zp[2]:107 [ mulu16_sel::return#2 ] +Allocated zp[2]:109 [ sin16s::x3_6#0 ] +Allocated zp[2]:111 [ sin16s::usinx#0 ] +Allocated zp[2]:113 [ mulu16_sel::return#10 ] +Allocated zp[2]:115 [ sin16s::x4#0 ] +Allocated zp[2]:117 [ mulu16_sel::return#11 ] +Allocated zp[2]:119 [ sin16s::x5#0 ] +Allocated zp[2]:121 [ sin16s::x5_128#0 ] +Allocated zp[2]:123 [ sin16s::usinx#1 ] +Allocated zp[2]:125 [ mul16u::b#0 ] +Allocated zp[4]:127 [ mul16u::return#2 ] +Allocated zp[4]:131 [ mulu16_sel::$0 ] +Allocated zp[4]:135 [ mulu16_sel::$1 ] +Allocated zp[2]:139 [ mulu16_sel::return#12 ] +Allocated zp[1]:141 [ mul16u::$1 ] +Allocated zp[2]:142 [ divr16u::return#3 ] +Allocated zp[2]:144 [ div32u16u::quotient_hi#0 ] +Allocated zp[2]:146 [ divr16u::return#4 ] +Allocated zp[2]:148 [ div32u16u::quotient_lo#0 ] +Allocated zp[4]:150 [ div32u16u::return#0 ] +Allocated zp[1]:154 [ divr16u::$1 ] +Allocated zp[1]:155 [ divr16u::$2 ] +Allocated zp[2]:156 [ rem16u#1 ] +Allocated zp[2]:158 [ div16u::return#2 ] +Allocated zp[2]:160 [ sin8s_gen::step#0 ] +Allocated zp[1]:162 [ sin8s::return#0 ] +Allocated zp[1]:163 [ sin8s_gen::$2 ] +Allocated zp[2]:164 [ sin8s::$4 ] +Allocated zp[1]:166 [ sin8s::x1#0 ] +Allocated zp[1]:167 [ mulu8_sel::return#0 ] +Allocated zp[1]:168 [ sin8s::x2#0 ] +Allocated zp[1]:169 [ mulu8_sel::return#1 ] +Allocated zp[1]:170 [ sin8s::x3#0 ] +Allocated zp[1]:171 [ mulu8_sel::return#2 ] +Allocated zp[1]:172 [ sin8s::x3_6#0 ] +Allocated zp[1]:173 [ sin8s::usinx#0 ] +Allocated zp[1]:174 [ mulu8_sel::return#10 ] +Allocated zp[1]:175 [ sin8s::x4#0 ] +Allocated zp[1]:176 [ mulu8_sel::return#11 ] +Allocated zp[1]:177 [ sin8s::x5#0 ] +Allocated zp[1]:178 [ sin8s::x5_128#0 ] +Allocated zp[1]:179 [ mul8u::b#0 ] Allocated zp[2]:180 [ mul8u::return#2 ] Allocated zp[2]:182 [ mulu8_sel::$0 ] Allocated zp[2]:184 [ mulu8_sel::$1 ] @@ -3934,7 +3890,7 @@ Target platform is c64basic / MOS6502X .const SIZEOF_SIGNED_WORD = 2 .label print_line_cursor = $400 // Remainder after unsigned 16-bit division - .label rem16u = $9d + .label rem16u = $9c .label print_char_cursor = 7 // @begin __bbegin: @@ -3955,13 +3911,13 @@ __bend: // main main: { .label wavelength = $c0 - .label __3 = $47 - .label __4 = $4b - .label __6 = $4f - .label __11 = $49 - .label sb = $46 - .label sw = $4d - .label sd = $50 + .label __3 = $44 + .label __4 = $48 + .label __6 = $4c + .label __11 = $46 + .label sb = $43 + .label sw = $4a + .label sd = $4d .label i = 2 // [5] call sin8s_gen // [164] phi from main to sin8s_gen [phi:main->sin8s_gen] @@ -4208,11 +4164,11 @@ print_char: { } // print_byte // Print a byte as HEX -// print_byte(byte zp($51) b) +// print_byte(byte zp($4e) b) print_byte: { - .label __0 = $52 - .label __2 = $53 - .label b = $51 + .label __0 = $4f + .label __2 = $50 + .label b = $4e // [46] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b lsr @@ -4318,8 +4274,8 @@ memset: { // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_gen(signed word* zp($11) sintab) sin16s_gen: { - .label __2 = $5e - .label step = $58 + .label __2 = $5b + .label step = $55 .label sintab = $11 // u[4.28] // Iterate over the table @@ -4357,14 +4313,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintabw sta.z sintab+1 - // [66] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [66] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [66] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [66] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4460,18 +4418,18 @@ sin16s_gen: { // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16s(dword zp($14) x) sin16s: { - .label __4 = $60 + .label __4 = $5d .label x = $14 - .label return = $5c - .label x1 = $64 - .label x2 = $68 - .label x3 = $6c - .label x3_6 = $70 - .label usinx = $72 - .label x4 = $76 - .label x5 = $7a - .label x5_128 = $7c - .label usinx_1 = $7e + .label return = $59 + .label x1 = $61 + .label x2 = $65 + .label x3 = $69 + .label x3_6 = $6d + .label usinx = $6f + .label x4 = $73 + .label x5 = $77 + .label x5_128 = $79 + .label usinx_1 = $7b .label return_1 = $18 .label sinx = $18 // Move x1 into the range 0-PI/2 using sinus mirror symmetries @@ -4822,17 +4780,17 @@ sin16s: { // The select parameter indicates how many of the highest bits of the 32-bit result to skip // mulu16_sel(word zp($1a) v1, word zp($1c) v2, byte zp($1e) select) mulu16_sel: { - .label __0 = $84 - .label __1 = $88 + .label __0 = $83 + .label __1 = $87 .label v1 = $1a .label v2 = $1c - .label return = $66 - .label return_1 = $6a - .label return_2 = $6e - .label return_3 = $74 - .label return_4 = $78 + .label return = $63 + .label return_1 = $67 + .label return_2 = $6b + .label return_3 = $71 + .label return_4 = $75 .label select = $1e - .label return_5 = $8c + .label return_5 = $8b // [118] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a @@ -4844,8 +4802,6 @@ mulu16_sel: { lda.z v2+1 sta.z mul16u.b+1 // [120] call mul16u - // [126] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] - mul16u_from_mulu16_sel: jsr mul16u // [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -4900,17 +4856,15 @@ mulu16_sel: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($1f) a, word zp($29) b) +// mul16u(word zp($1f) a, word zp($7d) b) mul16u: { - .label __1 = $8e - .label a = $1f + .label __1 = $8d .label mb = $25 + .label a = $1f .label res = $21 - .label b = $29 - .label return = $80 - // [127] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [127] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + .label b = $7d + .label return = $7f + // [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -4918,12 +4872,17 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [127] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [127] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + __b1_from_mul16u: + // [127] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [127] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [127] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 @@ -4992,10 +4951,10 @@ mul16u: { // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $91 - .label quotient_lo = $95 - .label return = $97 - .label return_1 = $54 + .label quotient_hi = $90 + .label quotient_lo = $94 + .label return = $96 + .label return_1 = $51 // [137] call divr16u // [146] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: @@ -5071,24 +5030,24 @@ div32u16u: { // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division -// divr16u(word zp($2d) dividend, word zp($2b) rem) +// divr16u(word zp($2b) dividend, word zp($29) rem) divr16u: { - .label __1 = $9b - .label __2 = $9c - .label rem = $2b - .label dividend = $2d - .label quotient = $2f - .label i = $31 - .label return = $2f + .label __1 = $9a + .label __2 = $9b + .label rem = $29 + .label dividend = $2b + .label quotient = $2d + .label i = $2f + .label return = $2d .label return_1 = $bc - .label return_2 = $8f - .label return_3 = $93 + .label return_2 = $8e + .label return_3 = $92 // [147] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: // [147] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [147] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [147] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -5196,15 +5155,15 @@ divr16u: { // Generate signed byte sinus table - on the full -$7f - $7f range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) -// sin8s_gen(signed byte* zp($36) sintab) +// sin8s_gen(signed byte* zp($34) sintab) sin8s_gen: { - .label __2 = $a4 - .label step = $a1 - .label sintab = $36 + .label __2 = $a3 + .label step = $a0 + .label sintab = $34 // u[4.12] // Iterate over the table - .label x = $34 - .label i = $32 + .label x = $32 + .label i = $30 // [165] call div16u // [241] phi from sin8s_gen to div16u [phi:sin8s_gen->div16u] div16u_from_sin8s_gen: @@ -5229,12 +5188,12 @@ sin8s_gen: { sta.z sintab lda #>main.sintabb sta.z sintab+1 - // [168] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::x#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 sta.z x+1 - // [168] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::i#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5308,26 +5267,26 @@ sin8s_gen: { // Calculate signed byte sinus sin(x) // x: unsigned word input u[4.12] in the interval $0000 - PI2_u4f12 // result: signed byte sin(x) s[0.7] - using the full range -$7f - $7f -// sin8s(word zp($39) x) +// sin8s(word zp($37) x) sin8s: { // u[2.6] x^3 .const DIV_6 = $2b - .label __4 = $a5 - .label x = $39 - .label return = $a3 - .label x1 = $a7 - .label x2 = $a9 - .label x3 = $ab - .label x3_6 = $ad - .label usinx = $ae - .label x4 = $b0 - .label x5 = $b2 - .label x5_128 = $b3 - .label usinx_1 = $3b - .label return_1 = $3c - .label sinx = $3c + .label __4 = $a4 + .label x = $37 + .label return = $a2 + .label x1 = $a6 + .label x2 = $a8 + .label x3 = $aa + .label x3_6 = $ac + .label usinx = $ad + .label x4 = $af + .label x5 = $b1 + .label x5_128 = $b2 + .label usinx_1 = $39 + .label return_1 = $3a + .label sinx = $3a // Move x1 into the range 0-PI/2 using sinus mirror symmetries - .label isUpper = $38 + .label isUpper = $36 // [179] if((word) sin8s::x#0<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 @@ -5592,18 +5551,18 @@ sin8s: { // mulu8_sel // Calculate val*val for two unsigned byte values - the result is 8 selected bits of the 16-bit result. // The select parameter indicates how many of the highest bits of the 16-bit result to skip -// mulu8_sel(byte zp($3d) v1, byte zp($3e) v2, byte zp($3f) select) +// mulu8_sel(byte zp($3b) v1, byte zp($3c) v2, byte zp($3d) select) mulu8_sel: { .label __0 = $b6 .label __1 = $b8 - .label v1 = $3d - .label v2 = $3e - .label return = $a8 - .label return_1 = $aa - .label return_2 = $ac - .label return_3 = $af - .label return_4 = $b1 - .label select = $3f + .label v1 = $3b + .label v2 = $3c + .label return = $a7 + .label return_1 = $a9 + .label return_2 = $ab + .label return_3 = $ae + .label return_4 = $b0 + .label select = $3d .label return_5 = $ba // [223] (byte) mul8u::a#1 ← (byte) mulu8_sel::v1#5 -- vbuz1=vbuz2 lda.z v1 @@ -5612,8 +5571,6 @@ mulu8_sel: { lda.z v2 sta.z mul8u.b // [225] call mul8u - // [231] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] - mul8u_from_mulu8_sel: jsr mul8u // [226] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -5652,22 +5609,23 @@ mulu8_sel: { } // mul8u // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word -// mul8u(byte zp($40) a, byte zp($45) b) +// mul8u(byte zp($3e) a, byte zp($b3) b) mul8u: { .label __1 = $bb - .label a = $40 - .label mb = $43 - .label res = $41 - .label b = $45 + .label mb = $41 + .label a = $3e + .label res = $3f + .label b = $b3 .label return = $b4 - // [232] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - __b1_from_mul8u: - // [232] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuz2 + // [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuz2 lda.z b sta.z mb lda #0 sta.z mb+1 - // [232] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [232] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + __b1_from_mul8u: + // [232] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [232] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -5732,7 +5690,7 @@ mul8u: { // Implemented using simple binary division div16u: { .label return = $be - .label return_1 = $9f + .label return_1 = $9e // [242] call divr16u // [146] phi from div16u to divr16u [phi:div16u->divr16u] divr16u_from_div16u: @@ -5772,12 +5730,12 @@ div16u: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [12] (word~) main::$3 ← (word)(byte) main::i#2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$3 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$3 ] ) 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]:70 [ main::sb#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:67 [ main::sb#0 ] Statement [13] (word~) main::$11 ← (word~) main::$3 << (byte) 1 [ main::i#2 print_char_cursor#42 main::sb#0 main::$11 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$11 ] ) always clobbers reg byte a Statement [14] (signed word*~) main::$4 ← (const signed word*) main::sintabw + (word~) main::$11 [ main::i#2 print_char_cursor#42 main::sb#0 main::$4 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$4 ] ) always clobbers reg byte a Statement [15] (signed word) main::sw#0 ← *((signed word*~) main::$4) [ main::i#2 print_char_cursor#42 main::sb#0 main::sw#0 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::sw#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::i#2 main::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:70 [ main::sb#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:67 [ main::sb#0 ] Statement [16] (byte~) main::$6 ← > (signed word) main::sw#0 [ main::i#2 print_char_cursor#42 main::sb#0 main::$6 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$6 ] ) always clobbers reg byte a Statement [17] (signed byte) main::sd#0 ← (signed byte) main::sb#0 - (signed byte)(byte~) main::$6 [ main::i#2 print_char_cursor#42 main::sd#0 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sd#0 ] ) always clobbers reg byte a Statement [27] if((byte) 0!=*((byte*) print_str::str#2)) goto print_str::@2 [ print_char_cursor#19 print_str::str#2 ] ( main:2::print_str:21 [ main::i#2 print_char_cursor#19 print_str::str#2 ] ) always clobbers reg byte a reg byte y @@ -5785,9 +5743,9 @@ Statement [29] *((byte*) print_char_cursor#19) ← *((byte*) print_str::str#2) [ Statement [41] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1 [ print_char_cursor#10 print_sbyte::b#0 ] ( main:2::print_sbyte:19 [ main::i#2 print_char_cursor#10 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [43] *((byte*) print_char_cursor#28) ← (byte) print_char::ch#4 [ print_char_cursor#28 ] ( main:2::print_sbyte:19::print_char:34 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_char:40 [ main::i#2 print_sbyte::b#1 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:48 [ main::i#2 print_byte::b#0 print_char_cursor#28 ] main:2::print_sbyte:19::print_byte:37::print_char:51 [ main::i#2 print_char_cursor#28 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:81 [ print_byte::b#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:78 [ print_byte::b#0 ] Statement [46] (byte~) print_byte::$0 ← (byte) print_byte::b#0 >> (byte) 4 [ print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ( main:2::print_sbyte:19::print_byte:37 [ main::i#2 print_char_cursor#10 print_byte::b#0 print_byte::$0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:81 [ print_byte::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:78 [ print_byte::b#0 ] Statement [49] (byte~) print_byte::$2 ← (byte) print_byte::b#0 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_sbyte:19::print_byte:37 [ main::i#2 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a Statement [58] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:54 [ memset::dst#2 ] ) always clobbers reg byte a Statement [60] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:54 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y @@ -5838,6 +5796,7 @@ Statement [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel: Statement [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a Statement [123] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a Statement [124] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a Statement [130] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [132] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a @@ -5848,7 +5807,7 @@ Statement [142] (word) divr16u::return#4 ← (word) divr16u::return#0 [ div32u16 Statement [143] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#4 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen:7::div32u16u:63 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a Statement [144] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen:7::div32u16u:63 [ div32u16u::return#0 ] ) always clobbers reg byte a Statement [149] (byte~) divr16u::$1 ← > (word) divr16u::dividend#4 [ divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen:7::div32u16u:63::divr16u:137 [ divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen:7::div32u16u:63::divr16u:141 [ div32u16u::quotient_hi#0 divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin8s_gen:5::div16u:165::divr16u:242 [ divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:49 [ divr16u::i#2 divr16u::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:47 [ divr16u::i#2 divr16u::i#1 ] Statement [152] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen:7::div32u16u:63::divr16u:137 [ divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen:7::div32u16u:63::divr16u:141 [ div32u16u::quotient_hi#0 divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin8s_gen:5::div16u:165::divr16u:242 [ divr16u::dividend#4 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a Statement [156] if((word) divr16u::rem#7<(const word) main::wavelength) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#7 divr16u::quotient#1 ] ( main:2::sin16s_gen:7::div32u16u:63::divr16u:137 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#7 divr16u::quotient#1 ] main:2::sin16s_gen:7::div32u16u:63::divr16u:141 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#7 divr16u::quotient#1 ] main:2::sin8s_gen:5::div16u:165::divr16u:242 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#7 divr16u::quotient#1 ] ) always clobbers reg byte a Statement [158] (word) divr16u::rem#2 ← (word) divr16u::rem#7 - (const word) main::wavelength [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen:7::div32u16u:63::divr16u:137 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen:7::div32u16u:63::divr16u:141 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin8s_gen:5::div16u:165::divr16u:242 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a @@ -5862,24 +5821,26 @@ Statement [177] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_g Statement [179] if((word) sin8s::x#0<(const word) PI_u4f12) goto sin8s::@1 [ sin8s::x#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#0 ] ) always clobbers reg byte a Statement [180] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12 [ sin8s::x#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#1 ] ) always clobbers reg byte a Statement [182] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:56 [ sin8s::isUpper#10 ] +Removing always clobbered register reg byte a as potential for zp[1]:54 [ sin8s::isUpper#10 ] Statement [183] (word) sin8s::x#2 ← (const word) PI_u4f12 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#2 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x#2 ] ) always clobbers reg byte a Statement [185] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a Statement [186] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a Statement [201] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:167 [ sin8s::x1#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:171 [ sin8s::x3#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:166 [ sin8s::x1#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:170 [ sin8s::x3#0 ] Statement [212] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:174 [ sin8s::usinx#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:173 [ sin8s::usinx#0 ] Statement [213] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a Statement [218] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8s_gen:5::sin8s:172 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::sinx#1 ] ) always clobbers reg byte a Statement [226] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#2 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:63 [ mulu8_sel::select#5 ] +Removing always clobbered register reg byte a as potential for zp[1]:61 [ mulu8_sel::select#5 ] Statement [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a Statement [228] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a Statement [229] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:62 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] +Statement [235] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a Statement [237] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:64 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Statement [243] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:165 [ divr16u::return#2 ] ) always clobbers reg byte a Statement [244] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8s_gen:5::div16u:165 [ div16u::return#0 ] ) always clobbers reg byte a Statement [12] (word~) main::$3 ← (word)(byte) main::i#2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$3 ] ( main:2 [ main::i#2 print_char_cursor#42 main::sb#0 main::$3 ] ) always clobbers reg byte a @@ -5941,6 +5902,7 @@ Statement [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel: Statement [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a Statement [123] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a Statement [124] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a +Statement [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a Statement [128] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a Statement [130] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a Statement [132] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:7::sin16s:70::mulu16_sel:87::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:92::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:96::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:102::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:7::sin16s:70::mulu16_sel:107::mul16u:120 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a @@ -5975,6 +5937,7 @@ Statement [226] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mulu8_sel::sele Statement [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a Statement [228] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a Statement [229] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 [ mul8u::a#1 mul8u::mb#0 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#1 mul8u::mb#0 ] ) always clobbers reg byte a Statement [235] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte) 1 [ mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#2 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a Statement [237] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8s_gen:5::sin8s:172::mulu8_sel:189::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:194::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:198::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:204::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] main:2::sin8s_gen:5::sin8s:172::mulu8_sel:209::mul8u:225 [ sin8s_gen::step#0 sin8s_gen::i#2 sin8s_gen::x#2 sin8s_gen::sintab#2 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#2 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a Statement [243] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8s_gen:5::div16u:165 [ divr16u::return#2 ] ) always clobbers reg byte a @@ -5996,86 +5959,86 @@ Potential registers zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2# Potential registers zp[1]:30 [ mulu16_sel::select#5 ] : zp[1]:30 , reg byte x , reg byte y , Potential registers zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] : zp[2]:31 , Potential registers zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:33 , -Potential registers zp[4]:37 [ mul16u::mb#2 mul16u::mb#1 ] : zp[4]:37 , -Potential registers zp[2]:41 [ mul16u::b#0 ] : zp[2]:41 , -Potential registers zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:43 , -Potential registers zp[2]:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] : zp[2]:45 , -Potential registers zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:47 , -Potential registers zp[1]:49 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:49 , reg byte x , reg byte y , -Potential registers zp[2]:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] : zp[2]:50 , -Potential registers zp[2]:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] : zp[2]:52 , -Potential registers zp[2]:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] : zp[2]:54 , -Potential registers zp[1]:56 [ sin8s::isUpper#10 ] : zp[1]:56 , reg byte x , reg byte y , -Potential registers zp[2]:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] : zp[2]:57 , -Potential registers zp[1]:59 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:60 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:61 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:62 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:63 [ mulu8_sel::select#5 ] : zp[1]:63 , reg byte x , reg byte y , -Potential registers zp[1]:64 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp[1]:64 , reg byte x , reg byte y , -Potential registers zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:65 , -Potential registers zp[2]:67 [ mul8u::mb#2 mul8u::mb#1 ] : zp[2]:67 , -Potential registers zp[1]:69 [ mul8u::b#0 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:70 [ main::sb#0 ] : zp[1]:70 , reg byte x , -Potential registers zp[2]:71 [ main::$3 ] : zp[2]:71 , -Potential registers zp[2]:73 [ main::$11 ] : zp[2]:73 , -Potential registers zp[2]:75 [ main::$4 ] : zp[2]:75 , -Potential registers zp[2]:77 [ main::sw#0 ] : zp[2]:77 , -Potential registers zp[1]:79 [ main::$6 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:80 [ main::sd#0 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:81 [ print_byte::b#0 ] : zp[1]:81 , reg byte x , -Potential registers zp[1]:82 [ print_byte::$0 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:83 [ print_byte::$2 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:84 [ div32u16u::return#2 ] : zp[4]:84 , -Potential registers zp[4]:88 [ sin16s_gen::step#0 ] : zp[4]:88 , -Potential registers zp[2]:92 [ sin16s::return#0 ] : zp[2]:92 , -Potential registers zp[2]:94 [ sin16s_gen::$2 ] : zp[2]:94 , -Potential registers zp[4]:96 [ sin16s::$4 ] : zp[4]:96 , -Potential registers zp[2]:100 [ sin16s::x1#0 ] : zp[2]:100 , -Potential registers zp[2]:102 [ mulu16_sel::return#0 ] : zp[2]:102 , -Potential registers zp[2]:104 [ sin16s::x2#0 ] : zp[2]:104 , -Potential registers zp[2]:106 [ mulu16_sel::return#1 ] : zp[2]:106 , -Potential registers zp[2]:108 [ sin16s::x3#0 ] : zp[2]:108 , -Potential registers zp[2]:110 [ mulu16_sel::return#2 ] : zp[2]:110 , -Potential registers zp[2]:112 [ sin16s::x3_6#0 ] : zp[2]:112 , -Potential registers zp[2]:114 [ sin16s::usinx#0 ] : zp[2]:114 , -Potential registers zp[2]:116 [ mulu16_sel::return#10 ] : zp[2]:116 , -Potential registers zp[2]:118 [ sin16s::x4#0 ] : zp[2]:118 , -Potential registers zp[2]:120 [ mulu16_sel::return#11 ] : zp[2]:120 , -Potential registers zp[2]:122 [ sin16s::x5#0 ] : zp[2]:122 , -Potential registers zp[2]:124 [ sin16s::x5_128#0 ] : zp[2]:124 , -Potential registers zp[2]:126 [ sin16s::usinx#1 ] : zp[2]:126 , -Potential registers zp[4]:128 [ mul16u::return#2 ] : zp[4]:128 , -Potential registers zp[4]:132 [ mulu16_sel::$0 ] : zp[4]:132 , -Potential registers zp[4]:136 [ mulu16_sel::$1 ] : zp[4]:136 , -Potential registers zp[2]:140 [ mulu16_sel::return#12 ] : zp[2]:140 , -Potential registers zp[1]:142 [ mul16u::$1 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:143 [ divr16u::return#3 ] : zp[2]:143 , -Potential registers zp[2]:145 [ div32u16u::quotient_hi#0 ] : zp[2]:145 , -Potential registers zp[2]:147 [ divr16u::return#4 ] : zp[2]:147 , -Potential registers zp[2]:149 [ div32u16u::quotient_lo#0 ] : zp[2]:149 , -Potential registers zp[4]:151 [ div32u16u::return#0 ] : zp[4]:151 , -Potential registers zp[1]:155 [ divr16u::$1 ] : zp[1]:155 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:156 [ divr16u::$2 ] : zp[1]:156 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:157 [ rem16u#1 ] : zp[2]:157 , -Potential registers zp[2]:159 [ div16u::return#2 ] : zp[2]:159 , -Potential registers zp[2]:161 [ sin8s_gen::step#0 ] : zp[2]:161 , -Potential registers zp[1]:163 [ sin8s::return#0 ] : zp[1]:163 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:164 [ sin8s_gen::$2 ] : zp[1]:164 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:165 [ sin8s::$4 ] : zp[2]:165 , -Potential registers zp[1]:167 [ sin8s::x1#0 ] : zp[1]:167 , reg byte x , reg byte y , -Potential registers zp[1]:168 [ mulu8_sel::return#0 ] : zp[1]:168 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:169 [ sin8s::x2#0 ] : zp[1]:169 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:170 [ mulu8_sel::return#1 ] : zp[1]:170 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:171 [ sin8s::x3#0 ] : zp[1]:171 , reg byte x , reg byte y , -Potential registers zp[1]:172 [ mulu8_sel::return#2 ] : zp[1]:172 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:173 [ sin8s::x3_6#0 ] : zp[1]:173 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:174 [ sin8s::usinx#0 ] : zp[1]:174 , reg byte x , reg byte y , -Potential registers zp[1]:175 [ mulu8_sel::return#10 ] : zp[1]:175 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:176 [ sin8s::x4#0 ] : zp[1]:176 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:177 [ mulu8_sel::return#11 ] : zp[1]:177 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:178 [ sin8s::x5#0 ] : zp[1]:178 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:179 [ sin8s::x5_128#0 ] : zp[1]:179 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:37 , +Potential registers zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:41 , +Potential registers zp[2]:43 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] : zp[2]:43 , +Potential registers zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:45 , +Potential registers zp[1]:47 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:47 , reg byte x , reg byte y , +Potential registers zp[2]:48 [ sin8s_gen::i#2 sin8s_gen::i#1 ] : zp[2]:48 , +Potential registers zp[2]:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] : zp[2]:50 , +Potential registers zp[2]:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] : zp[2]:52 , +Potential registers zp[1]:54 [ sin8s::isUpper#10 ] : zp[1]:54 , reg byte x , reg byte y , +Potential registers zp[2]:55 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] : zp[2]:55 , +Potential registers zp[1]:57 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:58 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:59 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:60 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:61 [ mulu8_sel::select#5 ] : zp[1]:61 , reg byte x , reg byte y , +Potential registers zp[1]:62 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp[1]:62 , reg byte x , reg byte y , +Potential registers zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:63 , +Potential registers zp[2]:65 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:65 , +Potential registers zp[1]:67 [ main::sb#0 ] : zp[1]:67 , reg byte x , +Potential registers zp[2]:68 [ main::$3 ] : zp[2]:68 , +Potential registers zp[2]:70 [ main::$11 ] : zp[2]:70 , +Potential registers zp[2]:72 [ main::$4 ] : zp[2]:72 , +Potential registers zp[2]:74 [ main::sw#0 ] : zp[2]:74 , +Potential registers zp[1]:76 [ main::$6 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:77 [ main::sd#0 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:78 [ print_byte::b#0 ] : zp[1]:78 , reg byte x , +Potential registers zp[1]:79 [ print_byte::$0 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:80 [ print_byte::$2 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:81 [ div32u16u::return#2 ] : zp[4]:81 , +Potential registers zp[4]:85 [ sin16s_gen::step#0 ] : zp[4]:85 , +Potential registers zp[2]:89 [ sin16s::return#0 ] : zp[2]:89 , +Potential registers zp[2]:91 [ sin16s_gen::$2 ] : zp[2]:91 , +Potential registers zp[4]:93 [ sin16s::$4 ] : zp[4]:93 , +Potential registers zp[2]:97 [ sin16s::x1#0 ] : zp[2]:97 , +Potential registers zp[2]:99 [ mulu16_sel::return#0 ] : zp[2]:99 , +Potential registers zp[2]:101 [ sin16s::x2#0 ] : zp[2]:101 , +Potential registers zp[2]:103 [ mulu16_sel::return#1 ] : zp[2]:103 , +Potential registers zp[2]:105 [ sin16s::x3#0 ] : zp[2]:105 , +Potential registers zp[2]:107 [ mulu16_sel::return#2 ] : zp[2]:107 , +Potential registers zp[2]:109 [ sin16s::x3_6#0 ] : zp[2]:109 , +Potential registers zp[2]:111 [ sin16s::usinx#0 ] : zp[2]:111 , +Potential registers zp[2]:113 [ mulu16_sel::return#10 ] : zp[2]:113 , +Potential registers zp[2]:115 [ sin16s::x4#0 ] : zp[2]:115 , +Potential registers zp[2]:117 [ mulu16_sel::return#11 ] : zp[2]:117 , +Potential registers zp[2]:119 [ sin16s::x5#0 ] : zp[2]:119 , +Potential registers zp[2]:121 [ sin16s::x5_128#0 ] : zp[2]:121 , +Potential registers zp[2]:123 [ sin16s::usinx#1 ] : zp[2]:123 , +Potential registers zp[2]:125 [ mul16u::b#0 ] : zp[2]:125 , +Potential registers zp[4]:127 [ mul16u::return#2 ] : zp[4]:127 , +Potential registers zp[4]:131 [ mulu16_sel::$0 ] : zp[4]:131 , +Potential registers zp[4]:135 [ mulu16_sel::$1 ] : zp[4]:135 , +Potential registers zp[2]:139 [ mulu16_sel::return#12 ] : zp[2]:139 , +Potential registers zp[1]:141 [ mul16u::$1 ] : zp[1]:141 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:142 [ divr16u::return#3 ] : zp[2]:142 , +Potential registers zp[2]:144 [ div32u16u::quotient_hi#0 ] : zp[2]:144 , +Potential registers zp[2]:146 [ divr16u::return#4 ] : zp[2]:146 , +Potential registers zp[2]:148 [ div32u16u::quotient_lo#0 ] : zp[2]:148 , +Potential registers zp[4]:150 [ div32u16u::return#0 ] : zp[4]:150 , +Potential registers zp[1]:154 [ divr16u::$1 ] : zp[1]:154 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:155 [ divr16u::$2 ] : zp[1]:155 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:156 [ rem16u#1 ] : zp[2]:156 , +Potential registers zp[2]:158 [ div16u::return#2 ] : zp[2]:158 , +Potential registers zp[2]:160 [ sin8s_gen::step#0 ] : zp[2]:160 , +Potential registers zp[1]:162 [ sin8s::return#0 ] : zp[1]:162 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:163 [ sin8s_gen::$2 ] : zp[1]:163 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:164 [ sin8s::$4 ] : zp[2]:164 , +Potential registers zp[1]:166 [ sin8s::x1#0 ] : zp[1]:166 , reg byte x , reg byte y , +Potential registers zp[1]:167 [ mulu8_sel::return#0 ] : zp[1]:167 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:168 [ sin8s::x2#0 ] : zp[1]:168 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:169 [ mulu8_sel::return#1 ] : zp[1]:169 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:170 [ sin8s::x3#0 ] : zp[1]:170 , reg byte x , reg byte y , +Potential registers zp[1]:171 [ mulu8_sel::return#2 ] : zp[1]:171 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:172 [ sin8s::x3_6#0 ] : zp[1]:172 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:173 [ sin8s::usinx#0 ] : zp[1]:173 , reg byte x , reg byte y , +Potential registers zp[1]:174 [ mulu8_sel::return#10 ] : zp[1]:174 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:175 [ sin8s::x4#0 ] : zp[1]:175 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:176 [ mulu8_sel::return#11 ] : zp[1]:176 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:177 [ sin8s::x5#0 ] : zp[1]:177 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:178 [ sin8s::x5_128#0 ] : zp[1]:178 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:179 [ mul8u::b#0 ] : zp[1]:179 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:180 [ mul8u::return#2 ] : zp[2]:180 , Potential registers zp[2]:182 [ mulu8_sel::$0 ] : zp[2]:182 , Potential registers zp[2]:184 [ mulu8_sel::$1 ] : zp[2]:184 , @@ -6085,155 +6048,155 @@ Potential registers zp[2]:188 [ divr16u::return#2 ] : zp[2]:188 , Potential registers zp[2]:190 [ div16u::return#0 ] : zp[2]:190 , REGISTER UPLIFT SCOPES -Uplift Scope [mul8u] 353.83: zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 245.57: zp[2]:67 [ mul8u::mb#2 mul8u::mb#1 ] 202: zp[1]:187 [ mul8u::$1 ] 170: zp[1]:64 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp[2]:180 [ mul8u::return#2 ] 2: zp[1]:69 [ mul8u::b#0 ] -Uplift Scope [mul16u] 353.83: zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 245.57: zp[4]:37 [ mul16u::mb#2 mul16u::mb#1 ] 202: zp[1]:142 [ mul16u::$1 ] 170: zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp[4]:128 [ mul16u::return#2 ] 2: zp[2]:41 [ mul16u::b#0 ] +Uplift Scope [mul8u] 353.83: zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 249.57: zp[2]:65 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 202: zp[1]:187 [ mul8u::$1 ] 170: zp[1]:62 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp[2]:180 [ mul8u::return#2 ] 2: zp[1]:179 [ mul8u::b#0 ] +Uplift Scope [mul16u] 353.83: zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:141 [ mul16u::$1 ] 170: zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp[4]:127 [ mul16u::return#2 ] 2: zp[2]:125 [ mul16u::b#0 ] Uplift Scope [print_str] 303: zp[2]:3 [ print_str::str#2 print_str::str#0 ] -Uplift Scope [divr16u] 106.92: zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.12: zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:155 [ divr16u::$1 ] 22: zp[1]:156 [ divr16u::$2 ] 18.19: zp[1]:49 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] 4: zp[2]:143 [ divr16u::return#3 ] 4: zp[2]:147 [ divr16u::return#4 ] 4: zp[2]:188 [ divr16u::return#2 ] -Uplift Scope [] 153.81: zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] 0.8: zp[2]:157 [ rem16u#1 ] -Uplift Scope [main] 22: zp[2]:71 [ main::$3 ] 22: zp[2]:73 [ main::$11 ] 22: zp[2]:75 [ main::$4 ] 22: zp[2]:77 [ main::sw#0 ] 22: zp[1]:80 [ main::sd#0 ] 19.25: zp[1]:2 [ main::i#2 main::i#1 ] 11: zp[1]:79 [ main::$6 ] 3.67: zp[1]:70 [ main::sb#0 ] -Uplift Scope [sin8s] 27.5: zp[2]:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp[1]:163 [ sin8s::return#0 ] 13: zp[1]:60 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp[1]:59 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp[2]:165 [ sin8s::$4 ] 4: zp[1]:169 [ sin8s::x2#0 ] 4: zp[1]:173 [ sin8s::x3_6#0 ] 4: zp[1]:176 [ sin8s::x4#0 ] 4: zp[1]:178 [ sin8s::x5#0 ] 4: zp[1]:179 [ sin8s::x5_128#0 ] 1: zp[1]:171 [ sin8s::x3#0 ] 0.64: zp[1]:167 [ sin8s::x1#0 ] 0.33: zp[1]:174 [ sin8s::usinx#0 ] 0.06: zp[1]:56 [ sin8s::isUpper#10 ] -Uplift Scope [sin16s] 27.5: zp[4]:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:92 [ sin16s::return#0 ] 13: zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:96 [ sin16s::$4 ] 4: zp[2]:104 [ sin16s::x2#0 ] 4: zp[2]:112 [ sin16s::x3_6#0 ] 4: zp[2]:118 [ sin16s::x4#0 ] 4: zp[2]:122 [ sin16s::x5#0 ] 4: zp[2]:124 [ sin16s::x5_128#0 ] 1: zp[2]:108 [ sin16s::x3#0 ] 1: zp[2]:126 [ sin16s::usinx#1 ] 0.64: zp[2]:100 [ sin16s::x1#0 ] 0.33: zp[2]:114 [ sin16s::usinx#0 ] 0.06: zp[1]:19 [ sin16s::isUpper#2 ] -Uplift Scope [sin16s_gen] 25.67: zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp[2]:94 [ sin16s_gen::$2 ] 15.12: zp[4]:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp[2]:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp[4]:88 [ sin16s_gen::step#0 ] -Uplift Scope [sin8s_gen] 25.67: zp[2]:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] 22: zp[1]:164 [ sin8s_gen::$2 ] 15.12: zp[2]:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] 12.05: zp[2]:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] 1.18: zp[2]:161 [ sin8s_gen::step#0 ] -Uplift Scope [mulu16_sel] 24: zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:102 [ mulu16_sel::return#0 ] 4: zp[2]:106 [ mulu16_sel::return#1 ] 4: zp[2]:110 [ mulu16_sel::return#2 ] 4: zp[2]:116 [ mulu16_sel::return#10 ] 4: zp[2]:120 [ mulu16_sel::return#11 ] 4: zp[4]:132 [ mulu16_sel::$0 ] 4: zp[4]:136 [ mulu16_sel::$1 ] 1.71: zp[2]:140 [ mulu16_sel::return#12 ] 0.33: zp[1]:30 [ mulu16_sel::select#5 ] -Uplift Scope [mulu8_sel] 24: zp[1]:61 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp[1]:62 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp[1]:168 [ mulu8_sel::return#0 ] 4: zp[1]:170 [ mulu8_sel::return#1 ] 4: zp[1]:172 [ mulu8_sel::return#2 ] 4: zp[1]:175 [ mulu8_sel::return#10 ] 4: zp[1]:177 [ mulu8_sel::return#11 ] 4: zp[2]:182 [ mulu8_sel::$0 ] 4: zp[2]:184 [ mulu8_sel::$1 ] 1.71: zp[1]:186 [ mulu8_sel::return#12 ] 0.33: zp[1]:63 [ mulu8_sel::select#5 ] +Uplift Scope [divr16u] 106.92: zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.12: zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:154 [ divr16u::$1 ] 22: zp[1]:155 [ divr16u::$2 ] 18.19: zp[1]:47 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:43 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] 4: zp[2]:142 [ divr16u::return#3 ] 4: zp[2]:146 [ divr16u::return#4 ] 4: zp[2]:188 [ divr16u::return#2 ] +Uplift Scope [] 153.81: zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] 0.8: zp[2]:156 [ rem16u#1 ] +Uplift Scope [main] 22: zp[2]:68 [ main::$3 ] 22: zp[2]:70 [ main::$11 ] 22: zp[2]:72 [ main::$4 ] 22: zp[2]:74 [ main::sw#0 ] 22: zp[1]:77 [ main::sd#0 ] 19.25: zp[1]:2 [ main::i#2 main::i#1 ] 11: zp[1]:76 [ main::$6 ] 3.67: zp[1]:67 [ main::sb#0 ] +Uplift Scope [sin8s] 27.5: zp[2]:55 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp[1]:162 [ sin8s::return#0 ] 13: zp[1]:58 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp[1]:57 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp[2]:164 [ sin8s::$4 ] 4: zp[1]:168 [ sin8s::x2#0 ] 4: zp[1]:172 [ sin8s::x3_6#0 ] 4: zp[1]:175 [ sin8s::x4#0 ] 4: zp[1]:177 [ sin8s::x5#0 ] 4: zp[1]:178 [ sin8s::x5_128#0 ] 1: zp[1]:170 [ sin8s::x3#0 ] 0.64: zp[1]:166 [ sin8s::x1#0 ] 0.33: zp[1]:173 [ sin8s::usinx#0 ] 0.06: zp[1]:54 [ sin8s::isUpper#10 ] +Uplift Scope [sin16s] 27.5: zp[4]:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:89 [ sin16s::return#0 ] 13: zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:93 [ sin16s::$4 ] 4: zp[2]:101 [ sin16s::x2#0 ] 4: zp[2]:109 [ sin16s::x3_6#0 ] 4: zp[2]:115 [ sin16s::x4#0 ] 4: zp[2]:119 [ sin16s::x5#0 ] 4: zp[2]:121 [ sin16s::x5_128#0 ] 1: zp[2]:105 [ sin16s::x3#0 ] 1: zp[2]:123 [ sin16s::usinx#1 ] 0.64: zp[2]:97 [ sin16s::x1#0 ] 0.33: zp[2]:111 [ sin16s::usinx#0 ] 0.06: zp[1]:19 [ sin16s::isUpper#2 ] +Uplift Scope [sin16s_gen] 25.67: zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 22: zp[2]:91 [ sin16s_gen::$2 ] 15.12: zp[4]:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 12.05: zp[2]:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp[4]:85 [ sin16s_gen::step#0 ] +Uplift Scope [sin8s_gen] 25.67: zp[2]:48 [ sin8s_gen::i#2 sin8s_gen::i#1 ] 22: zp[1]:163 [ sin8s_gen::$2 ] 15.12: zp[2]:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] 12.05: zp[2]:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] 1.18: zp[2]:160 [ sin8s_gen::step#0 ] +Uplift Scope [mulu16_sel] 24: zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:99 [ mulu16_sel::return#0 ] 4: zp[2]:103 [ mulu16_sel::return#1 ] 4: zp[2]:107 [ mulu16_sel::return#2 ] 4: zp[2]:113 [ mulu16_sel::return#10 ] 4: zp[2]:117 [ mulu16_sel::return#11 ] 4: zp[4]:131 [ mulu16_sel::$0 ] 4: zp[4]:135 [ mulu16_sel::$1 ] 1.71: zp[2]:139 [ mulu16_sel::return#12 ] 0.33: zp[1]:30 [ mulu16_sel::select#5 ] +Uplift Scope [mulu8_sel] 24: zp[1]:59 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp[1]:60 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp[1]:167 [ mulu8_sel::return#0 ] 4: zp[1]:169 [ mulu8_sel::return#1 ] 4: zp[1]:171 [ mulu8_sel::return#2 ] 4: zp[1]:174 [ mulu8_sel::return#10 ] 4: zp[1]:176 [ mulu8_sel::return#11 ] 4: zp[2]:182 [ mulu8_sel::$0 ] 4: zp[2]:184 [ mulu8_sel::$1 ] 1.71: zp[1]:186 [ mulu8_sel::return#12 ] 0.33: zp[1]:61 [ mulu8_sel::select#5 ] Uplift Scope [memset] 36.67: zp[2]:9 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_char] 14: zp[1]:6 [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplift Scope [print_sbyte] 10.83: zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplift Scope [div32u16u] 4: zp[4]:84 [ div32u16u::return#2 ] 4: zp[2]:149 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:151 [ div32u16u::return#0 ] 0.8: zp[2]:145 [ div32u16u::quotient_hi#0 ] -Uplift Scope [print_byte] 4: zp[1]:82 [ print_byte::$0 ] 4: zp[1]:83 [ print_byte::$2 ] 1.5: zp[1]:81 [ print_byte::b#0 ] -Uplift Scope [div16u] 4: zp[2]:159 [ div16u::return#2 ] 1.33: zp[2]:190 [ div16u::return#0 ] +Uplift Scope [div32u16u] 4: zp[4]:81 [ div32u16u::return#2 ] 4: zp[2]:148 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:150 [ div32u16u::return#0 ] 0.8: zp[2]:144 [ div32u16u::quotient_hi#0 ] +Uplift Scope [print_byte] 4: zp[1]:79 [ print_byte::$0 ] 4: zp[1]:80 [ print_byte::$2 ] 1.5: zp[1]:78 [ print_byte::b#0 ] +Uplift Scope [div16u] 4: zp[2]:158 [ div16u::return#2 ] 1.33: zp[2]:190 [ div16u::return#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] -Uplifting [mul8u] best 39033 combination zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:67 [ mul8u::mb#2 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:180 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] -Uplifting [mul16u] best 38433 combination zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:37 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:128 [ mul16u::return#2 ] zp[2]:41 [ mul16u::b#0 ] -Uplifting [print_str] best 38433 combination zp[2]:3 [ print_str::str#2 print_str::str#0 ] -Uplifting [divr16u] best 38223 combination zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp[2]:143 [ divr16u::return#3 ] zp[2]:147 [ divr16u::return#4 ] zp[2]:188 [ divr16u::return#2 ] -Uplifting [] best 38223 combination zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp[2]:157 [ rem16u#1 ] -Uplifting [main] best 37993 combination zp[2]:71 [ main::$3 ] zp[2]:73 [ main::$11 ] zp[2]:75 [ main::$4 ] zp[2]:77 [ main::sw#0 ] reg byte a [ main::sd#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$6 ] zp[1]:70 [ main::sb#0 ] -Uplifting [sin8s] best 37888 combination zp[2]:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp[2]:165 [ sin8s::$4 ] zp[1]:169 [ sin8s::x2#0 ] zp[1]:173 [ sin8s::x3_6#0 ] zp[1]:176 [ sin8s::x4#0 ] zp[1]:178 [ sin8s::x5#0 ] zp[1]:179 [ sin8s::x5_128#0 ] zp[1]:171 [ sin8s::x3#0 ] zp[1]:167 [ sin8s::x1#0 ] zp[1]:174 [ sin8s::usinx#0 ] zp[1]:56 [ sin8s::isUpper#10 ] +Uplifting [mul8u] best 36701 combination zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:65 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:180 [ mul8u::return#2 ] reg byte a [ mul8u::b#0 ] +Uplifting [mul16u] best 36101 combination zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:127 [ mul16u::return#2 ] zp[2]:125 [ mul16u::b#0 ] +Uplifting [print_str] best 36101 combination zp[2]:3 [ print_str::str#2 print_str::str#0 ] +Uplifting [divr16u] best 35891 combination zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:43 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] zp[2]:142 [ divr16u::return#3 ] zp[2]:146 [ divr16u::return#4 ] zp[2]:188 [ divr16u::return#2 ] +Uplifting [] best 35891 combination zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] zp[2]:156 [ rem16u#1 ] +Uplifting [main] best 35661 combination zp[2]:68 [ main::$3 ] zp[2]:70 [ main::$11 ] zp[2]:72 [ main::$4 ] zp[2]:74 [ main::sw#0 ] reg byte a [ main::sd#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$6 ] zp[1]:67 [ main::sb#0 ] +Uplifting [sin8s] best 35556 combination zp[2]:55 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp[2]:164 [ sin8s::$4 ] zp[1]:168 [ sin8s::x2#0 ] zp[1]:172 [ sin8s::x3_6#0 ] zp[1]:175 [ sin8s::x4#0 ] zp[1]:177 [ sin8s::x5#0 ] zp[1]:178 [ sin8s::x5_128#0 ] zp[1]:170 [ sin8s::x3#0 ] zp[1]:166 [ sin8s::x1#0 ] zp[1]:173 [ sin8s::usinx#0 ] zp[1]:54 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [sin16s] best 37879 combination zp[4]:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:92 [ sin16s::return#0 ] zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:96 [ sin16s::$4 ] zp[2]:104 [ sin16s::x2#0 ] zp[2]:112 [ sin16s::x3_6#0 ] zp[2]:118 [ sin16s::x4#0 ] zp[2]:122 [ sin16s::x5#0 ] zp[2]:124 [ sin16s::x5_128#0 ] zp[2]:108 [ sin16s::x3#0 ] zp[2]:126 [ sin16s::usinx#1 ] zp[2]:100 [ sin16s::x1#0 ] zp[2]:114 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] -Uplifting [sin16s_gen] best 37879 combination zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:94 [ sin16s_gen::$2 ] zp[4]:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:88 [ sin16s_gen::step#0 ] -Uplifting [sin8s_gen] best 37819 combination zp[2]:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] reg byte a [ sin8s_gen::$2 ] zp[2]:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp[2]:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp[2]:161 [ sin8s_gen::step#0 ] -Uplifting [mulu16_sel] best 37803 combination zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:102 [ mulu16_sel::return#0 ] zp[2]:106 [ mulu16_sel::return#1 ] zp[2]:110 [ mulu16_sel::return#2 ] zp[2]:116 [ mulu16_sel::return#10 ] zp[2]:120 [ mulu16_sel::return#11 ] zp[4]:132 [ mulu16_sel::$0 ] zp[4]:136 [ mulu16_sel::$1 ] zp[2]:140 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] -Uplifting [mulu8_sel] best 37757 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp[1]:172 [ mulu8_sel::return#2 ] zp[1]:175 [ mulu8_sel::return#10 ] zp[1]:177 [ mulu8_sel::return#11 ] zp[2]:182 [ mulu8_sel::$0 ] zp[2]:184 [ mulu8_sel::$1 ] zp[1]:186 [ mulu8_sel::return#12 ] zp[1]:63 [ mulu8_sel::select#5 ] +Uplifting [sin16s] best 35547 combination zp[4]:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:89 [ sin16s::return#0 ] zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:93 [ sin16s::$4 ] zp[2]:101 [ sin16s::x2#0 ] zp[2]:109 [ sin16s::x3_6#0 ] zp[2]:115 [ sin16s::x4#0 ] zp[2]:119 [ sin16s::x5#0 ] zp[2]:121 [ sin16s::x5_128#0 ] zp[2]:105 [ sin16s::x3#0 ] zp[2]:123 [ sin16s::usinx#1 ] zp[2]:97 [ sin16s::x1#0 ] zp[2]:111 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] +Uplifting [sin16s_gen] best 35547 combination zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:91 [ sin16s_gen::$2 ] zp[4]:13 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:85 [ sin16s_gen::step#0 ] +Uplifting [sin8s_gen] best 35487 combination zp[2]:48 [ sin8s_gen::i#2 sin8s_gen::i#1 ] reg byte a [ sin8s_gen::$2 ] zp[2]:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] zp[2]:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] zp[2]:160 [ sin8s_gen::step#0 ] +Uplifting [mulu16_sel] best 35471 combination zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:99 [ mulu16_sel::return#0 ] zp[2]:103 [ mulu16_sel::return#1 ] zp[2]:107 [ mulu16_sel::return#2 ] zp[2]:113 [ mulu16_sel::return#10 ] zp[2]:117 [ mulu16_sel::return#11 ] zp[4]:131 [ mulu16_sel::$0 ] zp[4]:135 [ mulu16_sel::$1 ] zp[2]:139 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] +Uplifting [mulu8_sel] best 35425 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp[1]:171 [ mulu8_sel::return#2 ] zp[1]:174 [ mulu8_sel::return#10 ] zp[1]:176 [ mulu8_sel::return#11 ] zp[2]:182 [ mulu8_sel::$0 ] zp[2]:184 [ mulu8_sel::$1 ] zp[1]:186 [ mulu8_sel::return#12 ] zp[1]:61 [ mulu8_sel::select#5 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [memset] best 37757 combination zp[2]:9 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_char] best 37742 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] -Uplifting [print_sbyte] best 37742 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [div32u16u] best 37742 combination zp[4]:84 [ div32u16u::return#2 ] zp[2]:149 [ div32u16u::quotient_lo#0 ] zp[4]:151 [ div32u16u::return#0 ] zp[2]:145 [ div32u16u::quotient_hi#0 ] -Uplifting [print_byte] best 37734 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp[1]:81 [ print_byte::b#0 ] -Uplifting [div16u] best 37734 combination zp[2]:159 [ div16u::return#2 ] zp[2]:190 [ div16u::return#0 ] -Uplifting [RADIX] best 37734 combination -Uplifting [print_cls] best 37734 combination +Uplifting [memset] best 35425 combination zp[2]:9 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_char] best 35410 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] +Uplifting [print_sbyte] best 35410 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [div32u16u] best 35410 combination zp[4]:81 [ div32u16u::return#2 ] zp[2]:148 [ div32u16u::quotient_lo#0 ] zp[4]:150 [ div32u16u::return#0 ] zp[2]:144 [ div32u16u::quotient_hi#0 ] +Uplifting [print_byte] best 35402 combination reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp[1]:78 [ print_byte::b#0 ] +Uplifting [div16u] best 35402 combination zp[2]:158 [ div16u::return#2 ] zp[2]:190 [ div16u::return#0 ] +Uplifting [RADIX] best 35402 combination +Uplifting [print_cls] best 35402 combination Attempting to uplift remaining variables inzp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_sbyte] best 37734 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Attempting to uplift remaining variables inzp[1]:169 [ sin8s::x2#0 ] -Uplifting [sin8s] best 37730 combination reg byte a [ sin8s::x2#0 ] -Attempting to uplift remaining variables inzp[1]:172 [ mulu8_sel::return#2 ] -Uplifting [mulu8_sel] best 37724 combination reg byte a [ mulu8_sel::return#2 ] -Attempting to uplift remaining variables inzp[1]:173 [ sin8s::x3_6#0 ] -Uplifting [sin8s] best 37720 combination reg byte a [ sin8s::x3_6#0 ] -Attempting to uplift remaining variables inzp[1]:175 [ mulu8_sel::return#10 ] -Uplifting [mulu8_sel] best 37714 combination reg byte a [ mulu8_sel::return#10 ] -Attempting to uplift remaining variables inzp[1]:176 [ sin8s::x4#0 ] -Uplifting [sin8s] best 37710 combination reg byte a [ sin8s::x4#0 ] -Attempting to uplift remaining variables inzp[1]:177 [ mulu8_sel::return#11 ] -Uplifting [mulu8_sel] best 37704 combination reg byte a [ mulu8_sel::return#11 ] -Attempting to uplift remaining variables inzp[1]:178 [ sin8s::x5#0 ] -Uplifting [sin8s] best 37698 combination reg byte a [ sin8s::x5#0 ] -Attempting to uplift remaining variables inzp[1]:179 [ sin8s::x5_128#0 ] -Uplifting [sin8s] best 37692 combination reg byte a [ sin8s::x5_128#0 ] -Attempting to uplift remaining variables inzp[1]:70 [ main::sb#0 ] -Uplifting [main] best 37692 combination zp[1]:70 [ main::sb#0 ] +Uplifting [print_sbyte] best 35402 combination zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Attempting to uplift remaining variables inzp[1]:168 [ sin8s::x2#0 ] +Uplifting [sin8s] best 35398 combination reg byte a [ sin8s::x2#0 ] +Attempting to uplift remaining variables inzp[1]:171 [ mulu8_sel::return#2 ] +Uplifting [mulu8_sel] best 35392 combination reg byte a [ mulu8_sel::return#2 ] +Attempting to uplift remaining variables inzp[1]:172 [ sin8s::x3_6#0 ] +Uplifting [sin8s] best 35388 combination reg byte a [ sin8s::x3_6#0 ] +Attempting to uplift remaining variables inzp[1]:174 [ mulu8_sel::return#10 ] +Uplifting [mulu8_sel] best 35382 combination reg byte a [ mulu8_sel::return#10 ] +Attempting to uplift remaining variables inzp[1]:175 [ sin8s::x4#0 ] +Uplifting [sin8s] best 35378 combination reg byte a [ sin8s::x4#0 ] +Attempting to uplift remaining variables inzp[1]:176 [ mulu8_sel::return#11 ] +Uplifting [mulu8_sel] best 35372 combination reg byte a [ mulu8_sel::return#11 ] +Attempting to uplift remaining variables inzp[1]:177 [ sin8s::x5#0 ] +Uplifting [sin8s] best 35366 combination reg byte a [ sin8s::x5#0 ] +Attempting to uplift remaining variables inzp[1]:178 [ sin8s::x5_128#0 ] +Uplifting [sin8s] best 35360 combination reg byte a [ sin8s::x5_128#0 ] +Attempting to uplift remaining variables inzp[1]:67 [ main::sb#0 ] +Uplifting [main] best 35360 combination zp[1]:67 [ main::sb#0 ] Attempting to uplift remaining variables inzp[1]:186 [ mulu8_sel::return#12 ] -Uplifting [mulu8_sel] best 37674 combination reg byte a [ mulu8_sel::return#12 ] -Attempting to uplift remaining variables inzp[1]:81 [ print_byte::b#0 ] -Uplifting [print_byte] best 37674 combination zp[1]:81 [ print_byte::b#0 ] -Attempting to uplift remaining variables inzp[1]:171 [ sin8s::x3#0 ] -Uplifting [sin8s] best 37674 combination zp[1]:171 [ sin8s::x3#0 ] -Attempting to uplift remaining variables inzp[1]:167 [ sin8s::x1#0 ] -Uplifting [sin8s] best 37674 combination zp[1]:167 [ sin8s::x1#0 ] -Attempting to uplift remaining variables inzp[1]:63 [ mulu8_sel::select#5 ] -Uplifting [mulu8_sel] best 37674 combination zp[1]:63 [ mulu8_sel::select#5 ] -Attempting to uplift remaining variables inzp[1]:174 [ sin8s::usinx#0 ] -Uplifting [sin8s] best 37674 combination zp[1]:174 [ sin8s::usinx#0 ] -Attempting to uplift remaining variables inzp[1]:56 [ sin8s::isUpper#10 ] -Uplifting [sin8s] best 37674 combination zp[1]:56 [ sin8s::isUpper#10 ] -Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:126 [ sin16s::usinx#1 ] ] - score: 2 -Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:108 [ sin16s::x3#0 ] ] - score: 2 -Coalescing zero page register [ zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:157 [ rem16u#1 ] ] - score: 2 -Coalescing zero page register [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] with [ zp[1]:81 [ print_byte::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:92 [ sin16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:104 [ sin16s::x2#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:118 [ sin16s::x4#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:41 [ mul16u::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:128 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:143 [ divr16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 ] ] with [ zp[2]:147 [ divr16u::return#4 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 ] ] with [ zp[2]:188 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] ] with [ zp[2]:165 [ sin8s::$4 ] ] - score: 1 -Coalescing zero page register [ zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:180 [ mul8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:71 [ main::$3 ] ] with [ zp[2]:73 [ main::$11 ] ] - score: 1 -Coalescing zero page register [ zp[2]:75 [ main::$4 ] ] with [ zp[2]:77 [ main::sw#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:84 [ div32u16u::return#2 ] ] with [ zp[4]:88 [ sin16s_gen::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:84 [ div32u16u::return#2 sin16s_gen::step#0 ] ] with [ zp[4]:151 [ div32u16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:102 [ mulu16_sel::return#0 ] ] with [ zp[2]:140 [ mulu16_sel::return#12 ] ] - score: 1 -Coalescing zero page register [ zp[2]:110 [ mulu16_sel::return#2 ] ] with [ zp[2]:112 [ sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:120 [ mulu16_sel::return#11 ] ] with [ zp[2]:122 [ sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:132 [ mulu16_sel::$0 ] ] with [ zp[4]:136 [ mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:159 [ div16u::return#2 ] ] with [ zp[2]:161 [ sin8s_gen::step#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:159 [ div16u::return#2 sin8s_gen::step#0 ] ] with [ zp[2]:190 [ div16u::return#0 ] ] - score: 1 +Uplifting [mulu8_sel] best 35342 combination reg byte a [ mulu8_sel::return#12 ] +Attempting to uplift remaining variables inzp[1]:78 [ print_byte::b#0 ] +Uplifting [print_byte] best 35342 combination zp[1]:78 [ print_byte::b#0 ] +Attempting to uplift remaining variables inzp[1]:170 [ sin8s::x3#0 ] +Uplifting [sin8s] best 35342 combination zp[1]:170 [ sin8s::x3#0 ] +Attempting to uplift remaining variables inzp[1]:166 [ sin8s::x1#0 ] +Uplifting [sin8s] best 35342 combination zp[1]:166 [ sin8s::x1#0 ] +Attempting to uplift remaining variables inzp[1]:61 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 35342 combination zp[1]:61 [ mulu8_sel::select#5 ] +Attempting to uplift remaining variables inzp[1]:173 [ sin8s::usinx#0 ] +Uplifting [sin8s] best 35342 combination zp[1]:173 [ sin8s::usinx#0 ] +Attempting to uplift remaining variables inzp[1]:54 [ sin8s::isUpper#10 ] +Uplifting [sin8s] best 35342 combination zp[1]:54 [ sin8s::isUpper#10 ] +Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:123 [ sin16s::usinx#1 ] ] - score: 2 +Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:105 [ sin16s::x3#0 ] ] - score: 2 +Coalescing zero page register [ zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:156 [ rem16u#1 ] ] - score: 2 +Coalescing zero page register [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] with [ zp[1]:78 [ print_byte::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:89 [ sin16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:101 [ sin16s::x2#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:115 [ sin16s::x4#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp[2]:125 [ mul16u::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:127 [ mul16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:142 [ divr16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 ] ] with [ zp[2]:146 [ divr16u::return#4 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 ] ] with [ zp[2]:188 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:55 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] ] with [ zp[2]:164 [ sin8s::$4 ] ] - score: 1 +Coalescing zero page register [ zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:180 [ mul8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:68 [ main::$3 ] ] with [ zp[2]:70 [ main::$11 ] ] - score: 1 +Coalescing zero page register [ zp[2]:72 [ main::$4 ] ] with [ zp[2]:74 [ main::sw#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:81 [ div32u16u::return#2 ] ] with [ zp[4]:85 [ sin16s_gen::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:81 [ div32u16u::return#2 sin16s_gen::step#0 ] ] with [ zp[4]:150 [ div32u16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:99 [ mulu16_sel::return#0 ] ] with [ zp[2]:139 [ mulu16_sel::return#12 ] ] - score: 1 +Coalescing zero page register [ zp[2]:107 [ mulu16_sel::return#2 ] ] with [ zp[2]:109 [ sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:117 [ mulu16_sel::return#11 ] ] with [ zp[2]:119 [ sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:131 [ mulu16_sel::$0 ] ] with [ zp[4]:135 [ mulu16_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:158 [ div16u::return#2 ] ] with [ zp[2]:160 [ sin8s_gen::step#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:158 [ div16u::return#2 sin8s_gen::step#0 ] ] with [ zp[2]:190 [ div16u::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:182 [ mulu8_sel::$0 ] ] with [ zp[2]:184 [ mulu8_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:94 [ sin16s_gen::$2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:114 [ sin16s::usinx#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:106 [ mulu16_sel::return#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:116 [ mulu16_sel::return#10 ] ] - score: 1 -Coalescing zero page register [ zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:132 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 ] ] with [ zp[2]:149 [ div32u16u::quotient_lo#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 ] ] with [ zp[2]:159 [ div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp[2]:182 [ mulu8_sel::$0 mulu8_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:71 [ main::$3 main::$11 ] ] with [ zp[2]:75 [ main::$4 main::sw#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:102 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:110 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:120 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:124 [ sin16s::x5_128#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:91 [ sin16s_gen::$2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:111 [ sin16s::usinx#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:103 [ mulu16_sel::return#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp[2]:113 [ mulu16_sel::return#10 ] ] - score: 1 +Coalescing zero page register [ zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:131 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 ] ] with [ zp[2]:148 [ div32u16u::quotient_lo#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 ] ] with [ zp[2]:158 [ div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp[2]:182 [ mulu8_sel::$0 mulu8_sel::$1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:68 [ main::$3 main::$11 ] ] with [ zp[2]:72 [ main::$4 main::sw#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:99 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:107 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:99 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:117 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:99 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp[2]:121 [ sin16s::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:9 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:3 [ print_str::str#2 print_str::str#0 ] ] Coalescing zero page register [ zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp[2]:7 [ print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] Coalescing zero page register [ zp[4]:33 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp[4]:20 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] -Coalescing zero page register [ zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] -Coalescing zero page register [ zp[2]:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] ] with [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] -Coalescing zero page register [ zp[2]:47 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] with [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] -Coalescing zero page register [ zp[2]:50 [ sin8s_gen::i#2 sin8s_gen::i#1 ] ] with [ zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] -Coalescing zero page register [ zp[2]:52 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] with [ zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] -Coalescing zero page register [ zp[1]:56 [ sin8s::isUpper#10 ] ] with [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] ] -Coalescing zero page register [ zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 ] ] with [ zp[2]:57 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] -Coalescing zero page register [ zp[1]:70 [ main::sb#0 ] ] with [ zp[1]:63 [ mulu8_sel::select#5 ] ] -Coalescing zero page register [ zp[2]:71 [ main::$3 main::$11 main::$4 main::sw#0 ] ] with [ zp[2]:54 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] -Coalescing zero page register [ zp[4]:96 [ sin16s::$4 ] ] with [ zp[4]:37 [ mul16u::mb#2 mul16u::mb#1 ] ] -Coalescing zero page register [ zp[2]:100 [ sin16s::x1#0 ] ] with [ zp[2]:67 [ mul8u::mb#2 mul8u::mb#1 ] ] -Coalescing zero page register [ zp[2]:145 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:102 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] -Coalescing zero page register [ zp[2]:43 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:9 [ memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] ] -Coalescing zero page register [ zp[2]:65 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] -Coalescing zero page register [ zp[2]:71 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] with [ zp[2]:45 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] -Coalescing zero page register [ zp[2]:145 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:52 [ sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:17 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] +Coalescing zero page register [ zp[2]:43 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 ] ] with [ zp[2]:24 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] +Coalescing zero page register [ zp[2]:45 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] with [ zp[2]:26 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] +Coalescing zero page register [ zp[2]:48 [ sin8s_gen::i#2 sin8s_gen::i#1 ] ] with [ zp[2]:28 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] +Coalescing zero page register [ zp[2]:50 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] with [ zp[2]:31 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] +Coalescing zero page register [ zp[1]:54 [ sin8s::isUpper#10 ] ] with [ zp[1]:5 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] ] +Coalescing zero page register [ zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 ] ] with [ zp[2]:55 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] +Coalescing zero page register [ zp[1]:67 [ main::sb#0 ] ] with [ zp[1]:61 [ mulu8_sel::select#5 ] ] +Coalescing zero page register [ zp[2]:68 [ main::$3 main::$11 main::$4 main::sw#0 ] ] with [ zp[2]:52 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] +Coalescing zero page register [ zp[4]:93 [ sin16s::$4 ] ] with [ zp[4]:37 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] +Coalescing zero page register [ zp[2]:97 [ sin16s::x1#0 ] ] with [ zp[2]:65 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ] +Coalescing zero page register [ zp[2]:144 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:99 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] +Coalescing zero page register [ zp[2]:41 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:9 [ memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] ] +Coalescing zero page register [ zp[2]:63 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 ] ] with [ zp[2]:11 [ sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] +Coalescing zero page register [ zp[2]:68 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] with [ zp[2]:43 [ divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] +Coalescing zero page register [ zp[2]:144 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:50 [ sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Allocated (was zp[4]:13) zp[4]:2 [ sin16s_gen::x#2 sin16s_gen::x#1 ] Allocated (was zp[4]:33) zp[4]:6 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] -Allocated (was zp[2]:43) zp[2]:10 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] -Allocated (was zp[2]:47) zp[2]:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] -Allocated (was zp[2]:50) zp[2]:14 [ sin8s_gen::i#2 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] -Allocated (was zp[1]:56) zp[1]:16 [ sin8s::isUpper#10 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] -Allocated (was zp[2]:65) zp[2]:17 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -Allocated (was zp[1]:70) zp[1]:19 [ main::sb#0 mulu8_sel::select#5 ] -Allocated (was zp[2]:71) zp[2]:20 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] -Allocated (was zp[4]:84) zp[4]:22 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -Allocated (was zp[4]:96) zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] -Allocated (was zp[2]:100) zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#1 ] -Allocated (was zp[2]:145) zp[2]:32 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] -Allocated (was zp[1]:167) zp[1]:34 [ sin8s::x1#0 ] -Allocated (was zp[1]:171) zp[1]:35 [ sin8s::x3#0 ] -Allocated (was zp[1]:174) zp[1]:36 [ sin8s::usinx#0 ] +Allocated (was zp[2]:41) zp[2]:10 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ] +Allocated (was zp[2]:45) zp[2]:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] +Allocated (was zp[2]:48) zp[2]:14 [ sin8s_gen::i#2 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] +Allocated (was zp[1]:54) zp[1]:16 [ sin8s::isUpper#10 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ] +Allocated (was zp[2]:63) zp[2]:17 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] +Allocated (was zp[1]:67) zp[1]:19 [ main::sb#0 mulu8_sel::select#5 ] +Allocated (was zp[2]:68) zp[2]:20 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] +Allocated (was zp[4]:81) zp[4]:22 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] +Allocated (was zp[4]:93) zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated (was zp[2]:97) zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated (was zp[2]:144) zp[2]:32 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] +Allocated (was zp[1]:166) zp[1]:34 [ sin8s::x1#0 ] +Allocated (was zp[1]:170) zp[1]:35 [ sin8s::x3#0 ] +Allocated (was zp[1]:173) zp[1]:36 [ sin8s::usinx#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -6641,14 +6604,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintabw sta.z sintab+1 - // [66] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [66] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x - lda #0 + lda #>0 sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [66] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [66] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7047,8 +7012,6 @@ mulu16_sel: { sta.z mul16u.a+1 // [119] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 // [120] call mul16u - // [126] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] - mul16u_from_mulu16_sel: jsr mul16u // [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b1 @@ -7081,14 +7044,12 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($20) a, word zp($e) b) mul16u: { - .label a = $20 .label mb = $1a + .label a = $20 .label res = 6 .label b = $e .label return = 6 - // [127] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - __b1_from_mul16u: - // [127] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -7096,12 +7057,17 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [127] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [127] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + __b1_from_mul16u: + // [127] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [127] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [127] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 @@ -7240,7 +7206,7 @@ divr16u: { __b1_from_divr16u: // [147] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [147] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -7363,12 +7329,12 @@ sin8s_gen: { sta.z sintab lda #>main.sintabb sta.z sintab+1 - // [168] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::x#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 sta.z x+1 - // [168] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::i#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7682,8 +7648,6 @@ mulu8_sel: { // [224] (byte) mul8u::b#0 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy tya // [225] call mul8u - // [231] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] - mul8u_from_mulu8_sel: jsr mul8u // [226] (word) mul8u::return#2 ← (word) mul8u::res#2 jmp __b1 @@ -7714,13 +7678,14 @@ mul8u: { .label mb = $1e .label res = $11 .label return = $11 - // [232] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - __b1_from_mul8u: - // [232] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + // [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa sta.z mb lda #0 sta.z mb+1 - // [232] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [232] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + __b1_from_mul8u: + // [232] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [232] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 @@ -7894,11 +7859,9 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 @@ -7908,7 +7871,6 @@ Removing instruction lda #>0 Replacing instruction ldx.z x1 with TAX Replacing instruction ldy.z x1 with TAY Replacing instruction ldx.z x3 with TAX -Removing instruction lda #<0 Removing instruction lda #>0 Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination @@ -8017,7 +7979,6 @@ Removing instruction __b10: Removing instruction mulu16_sel_from___b10: Removing instruction __b11: Removing instruction __b6: -Removing instruction mul16u_from_mulu16_sel: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_mul16u: @@ -8053,7 +8014,6 @@ Removing instruction mulu8_sel_from___b12: Removing instruction __b13: Removing instruction __b7: Removing instruction __b8: -Removing instruction mul8u_from_mulu8_sel: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_mul8u: @@ -8076,6 +8036,9 @@ Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Removing instruction __b12: Removing instruction __b4: @@ -8087,12 +8050,12 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const word) PI_HALF_u4f12 = (number) $1922 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const word) PI_u4f12 = (number) $3244 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const word) PI2_u4f12 = (word) $6488 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const word) PI_HALF_u4f12 = (word) $1922 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const word) PI_u4f12 = (word) $3244 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -8210,6 +8173,7 @@ FINAL SYMBOL TABLE (word) mul16u::b (word) mul16u::b#0 b zp[2]:14 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 mb zp[4]:26 4.0 (dword) mul16u::mb#1 mb zp[4]:26 202.0 (dword) mul16u::mb#2 mb zp[4]:26 43.57142857142858 (dword) mul16u::res @@ -8232,6 +8196,7 @@ FINAL SYMBOL TABLE (byte) mul8u::b (byte) mul8u::b#0 reg byte a 2.0 (word) mul8u::mb +(word) mul8u::mb#0 mb zp[2]:30 4.0 (word) mul8u::mb#1 mb zp[2]:30 202.0 (word) mul8u::mb#2 mb zp[2]:30 43.57142857142858 (word) mul8u::res @@ -8420,7 +8385,7 @@ FINAL SYMBOL TABLE (label) sin8s::@8 (label) sin8s::@9 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#10 isUpper zp[1]:16 0.05555555555555555 (signed byte) sin8s::return @@ -8491,7 +8456,6 @@ reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mul reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:17 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -reg byte a [ mul8u::b#0 ] zp[1]:19 [ main::sb#0 mulu8_sel::select#5 ] zp[2]:20 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] reg byte a [ main::$6 ] @@ -8499,8 +8463,8 @@ reg byte a [ main::sd#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp[4]:22 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] -zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#1 ] +zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:32 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] reg byte a [ divr16u::$1 ] @@ -8520,12 +8484,13 @@ reg byte a [ sin8s::x4#0 ] reg byte a [ mulu8_sel::return#11 ] reg byte a [ sin8s::x5#0 ] reg byte a [ sin8s::x5_128#0 ] +reg byte a [ mul8u::b#0 ] reg byte a [ mulu8_sel::return#12 ] reg byte a [ mul8u::$1 ] FINAL ASSEMBLER -Score: 32073 +Score: 29761 // File Comments // Upstart @@ -8902,13 +8867,16 @@ sin16s_gen: { sta.z sintab lda #>main.sintabw sta.z sintab+1 - // [66] phi (dword) sin16s_gen::x#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vbuc1 - lda #0 + // [66] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 + lda #<0 sta.z x sta.z x+1 + lda #<0>>$10 sta.z x+2 + lda #>0>>$10 sta.z x+3 - // [66] phi (word) sin16s_gen::i#2 = (byte) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vbuc1 + // [66] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // u[4.28] @@ -9301,9 +9269,7 @@ mulu16_sel: { sta.z mul16u.a+1 // [119] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 // [120] call mul16u - // [126] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u] jsr mul16u - // mul16u(v1, v2) // [121] (dword) mul16u::return#2 ← (dword) mul16u::res#2 // mulu16_sel::@1 // [122] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 @@ -9334,13 +9300,13 @@ mulu16_sel: { // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word // mul16u(word zp($20) a, word zp($e) b) mul16u: { - .label a = $20 .label mb = $1a + .label a = $20 .label res = 6 .label b = $e .label return = 6 - // [127] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [127] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2 + // mb = b + // [126] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 @@ -9348,10 +9314,14 @@ mul16u: { lda #0 sta.z mb+2 sta.z mb+3 - // [127] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + // [127] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [127] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [127] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 // [127] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 @@ -9486,7 +9456,7 @@ divr16u: { // [147] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [147] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [147] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [147] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 @@ -9603,11 +9573,11 @@ sin8s_gen: { sta.z sintab lda #>main.sintabb sta.z sintab+1 - // [168] phi (word) sin8s_gen::x#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::x#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x sta.z x+1 - // [168] phi (word) sin8s_gen::i#2 = (byte) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vbuc1 + // [168] phi (word) sin8s_gen::i#2 = (word) 0 [phi:sin8s_gen::@3->sin8s_gen::@1#2] -- vwuz1=vwuc1 sta.z i sta.z i+1 // u[4.12] @@ -9913,9 +9883,7 @@ mulu8_sel: { // [224] (byte) mul8u::b#0 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy tya // [225] call mul8u - // [231] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] jsr mul8u - // mul8u(v1, v2) // [226] (word) mul8u::return#2 ← (word) mul8u::res#2 // mulu8_sel::@1 // [227] (word~) mulu8_sel::$0 ← (word) mul8u::return#2 @@ -9944,12 +9912,14 @@ mul8u: { .label mb = $1e .label res = $11 .label return = $11 - // [232] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [232] phi (word) mul8u::mb#2 = (byte) mul8u::b#0 [phi:mul8u->mul8u::@1#0] -- vwuz1=vbuaa + // mb = b + // [231] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#0 -- vwuz1=_word_vbuaa sta.z mb lda #0 sta.z mb+1 - // [232] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [232] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [232] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [232] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 sta.z res sta.z res+1 // [232] phi (byte) mul8u::a#2 = (byte) mul8u::a#1 [phi:mul8u->mul8u::@1#2] -- register_copy diff --git a/src/test/ref/sinusgen8b.sym b/src/test/ref/sinusgen8b.sym index 855132adb..3e7bafc7b 100644 --- a/src/test/ref/sinusgen8b.sym +++ b/src/test/ref/sinusgen8b.sym @@ -1,12 +1,12 @@ (label) @1 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const dword) PI2_u4f28 = (number) $6487ed51 -(const word) PI_HALF_u4f12 = (number) $1922 -(const dword) PI_HALF_u4f28 = (number) $1921fb54 -(const word) PI_u4f12 = (number) $3244 -(const dword) PI_u4f28 = (number) $3243f6a9 +(const word) PI2_u4f12 = (word) $6488 +(const dword) PI2_u4f28 = (dword) $6487ed51 +(const word) PI_HALF_u4f12 = (word) $1922 +(const dword) PI_HALF_u4f28 = (dword) $1921fb54 +(const word) PI_u4f12 = (word) $3244 +(const dword) PI_u4f28 = (dword) $3243f6a9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -124,6 +124,7 @@ (word) mul16u::b (word) mul16u::b#0 b zp[2]:14 2.0 (dword) mul16u::mb +(dword) mul16u::mb#0 mb zp[4]:26 4.0 (dword) mul16u::mb#1 mb zp[4]:26 202.0 (dword) mul16u::mb#2 mb zp[4]:26 43.57142857142858 (dword) mul16u::res @@ -146,6 +147,7 @@ (byte) mul8u::b (byte) mul8u::b#0 reg byte a 2.0 (word) mul8u::mb +(word) mul8u::mb#0 mb zp[2]:30 4.0 (word) mul8u::mb#1 mb zp[2]:30 202.0 (word) mul8u::mb#2 mb zp[2]:30 43.57142857142858 (word) mul8u::res @@ -334,7 +336,7 @@ (label) sin8s::@8 (label) sin8s::@9 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#10 isUpper zp[1]:16 0.05555555555555555 (signed byte) sin8s::return @@ -405,7 +407,6 @@ reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mul reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] zp[2]:17 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] -reg byte a [ mul8u::b#0 ] zp[1]:19 [ main::sb#0 mulu8_sel::select#5 ] zp[2]:20 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] reg byte a [ main::$6 ] @@ -413,8 +414,8 @@ reg byte a [ main::sd#0 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] zp[4]:22 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ] -zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ] -zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#1 ] +zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:32 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] reg byte a [ divr16u::$1 ] @@ -434,5 +435,6 @@ reg byte a [ sin8s::x4#0 ] reg byte a [ mulu8_sel::return#11 ] reg byte a [ sin8s::x5#0 ] reg byte a [ sin8s::x5_128#0 ] +reg byte a [ mul8u::b#0 ] reg byte a [ mulu8_sel::return#12 ] reg byte a [ mul8u::$1 ] diff --git a/src/test/ref/sinusgenscale8.asm b/src/test/ref/sinusgenscale8.asm index e5c0864d7..a5277dd3f 100644 --- a/src/test/ref/sinusgenscale8.asm +++ b/src/test/ref/sinusgenscale8.asm @@ -335,10 +335,7 @@ mul8su: { .label m = 9 tya tax - lda #b - sta.z mul8u.mb+1 + lda #b jsr mul8u cpy #0 bpl __b1 @@ -355,7 +352,9 @@ mul8u: { .label mb = 6 .label res = 9 .label return = 9 - lda #<0 + sta.z mb + lda #0 + sta.z mb+1 sta.z res sta.z res+1 __b1: @@ -503,9 +502,6 @@ mulu8_sel: { .label __1 = 9 .label select = $13 tya - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 jsr mul8u ldy.z select beq !e+ diff --git a/src/test/ref/sinusgenscale8.cfg b/src/test/ref/sinusgenscale8.cfg index efbbc7ab6..271ecc0a3 100644 --- a/src/test/ref/sinusgenscale8.cfg +++ b/src/test/ref/sinusgenscale8.cfg @@ -73,8 +73,8 @@ sin8u_table::@13: scope:[sin8u_table] from sin8u_table::@12 to:sin8u_table::@1 sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@13 sin8u_table::@24 [34] (byte*) sin8u_table::sintab#2 ← phi( sin8u_table::@13/(const byte*) main::sintab sin8u_table::@24/(byte*) sin8u_table::sintab#1 ) - [34] (word) sin8u_table::x#10 ← phi( sin8u_table::@13/(byte) 0 sin8u_table::@24/(word) sin8u_table::x#1 ) - [34] (word) sin8u_table::i#10 ← phi( sin8u_table::@13/(byte) 0 sin8u_table::@24/(word) sin8u_table::i#1 ) + [34] (word) sin8u_table::x#10 ← phi( sin8u_table::@13/(word) 0 sin8u_table::@24/(word) sin8u_table::x#1 ) + [34] (word) sin8u_table::i#10 ← phi( sin8u_table::@13/(word) 0 sin8u_table::@24/(word) sin8u_table::i#1 ) [35] if((word) sin8u_table::i#10<(const word) main::tabsize) goto sin8u_table::@2 to:sin8u_table::@return sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@1 @@ -284,198 +284,199 @@ mul8su::@return: scope:[mul8su] from mul8su::@1 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mul8su mulu8_sel [128] (byte) mul8u::a#6 ← phi( mul8su/(byte) mul8u::a#1 mulu8_sel/(byte) mul8u::a#2 ) - [128] (word) mul8u::mb#0 ← phi( mul8su/(const byte) mul8su::b#0 mulu8_sel/(byte) mul8u::b#1 ) + [128] (byte) mul8u::b#2 ← phi( mul8su/(const byte) mul8su::b#0 mulu8_sel/(byte) mul8u::b#1 ) + [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [129] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [129] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) - [129] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) - [130] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 + [130] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [130] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) + [130] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) + [131] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return mul8u::@return: scope:[mul8u] from mul8u::@1 - [131] return + [132] return to:@return mul8u::@2: scope:[mul8u] from mul8u::@1 - [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 - [133] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 + [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 + [134] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 to:mul8u::@4 mul8u::@4: scope:[mul8u] from mul8u::@2 - [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 + [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 to:mul8u::@3 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 - [135] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) - [136] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 - [137] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 + [136] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) + [137] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 + [138] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 to:mul8u::@1 (signed byte()) sin8s((word) sin8s::x) sin8s: scope:[sin8s] from sin8u_table::@2 - [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 + [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 to:sin8s::@5 sin8s::@5: scope:[sin8s] from sin8s - [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 + [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 to:sin8s::@1 sin8s::@1: scope:[sin8s] from sin8s sin8s::@5 - [140] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte) 0 sin8s::@5/(byte) 1 ) - [140] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#2 sin8s::@5/(word) sin8s::x#0 ) - [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 + [141] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte) 0 sin8s::@5/(byte) 1 ) + [141] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#2 sin8s::@5/(word) sin8s::x#0 ) + [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 to:sin8s::@6 sin8s::@6: scope:[sin8s] from sin8s::@1 - [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 + [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 to:sin8s::@2 sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 - [143] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#1 ) - [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 - [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 - [146] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 - [147] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 - [148] call mulu8_sel - [149] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 + [144] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#1 ) + [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 + [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 + [147] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 + [148] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 + [149] call mulu8_sel + [150] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 to:sin8s::@9 sin8s::@9: scope:[sin8s] from sin8s::@2 - [150] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 - [151] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 - [152] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 - [153] call mulu8_sel - [154] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 + [151] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 + [152] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 + [153] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 + [154] call mulu8_sel + [155] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 to:sin8s::@10 sin8s::@10: scope:[sin8s] from sin8s::@9 - [155] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 - [156] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 - [157] call mulu8_sel - [158] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 + [156] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 + [157] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 + [158] call mulu8_sel + [159] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 to:sin8s::@11 sin8s::@11: scope:[sin8s] from sin8s::@10 - [159] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 - [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 - [161] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 - [162] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 - [163] call mulu8_sel - [164] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 + [160] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 + [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 + [162] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 + [163] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 + [164] call mulu8_sel + [165] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 to:sin8s::@12 sin8s::@12: scope:[sin8s] from sin8s::@11 - [165] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 - [166] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 - [167] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 - [168] call mulu8_sel - [169] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 + [166] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 + [167] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 + [168] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 + [169] call mulu8_sel + [170] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 to:sin8s::@13 sin8s::@13: scope:[sin8s] from sin8s::@12 - [170] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 - [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 - [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 - [173] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 + [171] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 + [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 + [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 + [174] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 to:sin8s::@7 sin8s::@7: scope:[sin8s] from sin8s::@13 - [174] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 + [175] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 to:sin8s::@3 sin8s::@3: scope:[sin8s] from sin8s::@13 sin8s::@7 - [175] (byte) sin8s::usinx#4 ← phi( sin8s::@13/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 ) - [176] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 + [176] (byte) sin8s::usinx#4 ← phi( sin8s::@13/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 ) + [177] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 to:sin8s::@8 sin8s::@8: scope:[sin8s] from sin8s::@3 - [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 + [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 to:sin8s::@4 sin8s::@4: scope:[sin8s] from sin8s::@14 sin8s::@8 - [178] (signed byte) sin8s::return#0 ← phi( sin8s::@14/(signed byte) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 ) + [179] (signed byte) sin8s::return#0 ← phi( sin8s::@14/(signed byte) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 ) to:sin8s::@return sin8s::@return: scope:[sin8s] from sin8s::@4 - [179] return + [180] return to:@return sin8s::@14: scope:[sin8s] from sin8s::@3 - [180] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 + [181] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 to:sin8s::@4 (byte()) mulu8_sel((byte) mulu8_sel::v1 , (byte) mulu8_sel::v2 , (byte) mulu8_sel::select) mulu8_sel: scope:[mulu8_sel] from sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@2 sin8s::@9 - [181] (byte) mulu8_sel::select#5 ← phi( sin8s::@9/(byte) 1 sin8s::@10/(byte) 1 sin8s::@11/(byte) 0 sin8s::@12/(byte) 0 sin8s::@2/(byte) 0 ) - [181] (byte) mulu8_sel::v2#5 ← phi( sin8s::@9/(byte) mulu8_sel::v2#1 sin8s::@10/(const byte) sin8s::DIV_6 sin8s::@11/(byte) mulu8_sel::v2#3 sin8s::@12/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 ) - [181] (byte) mulu8_sel::v1#5 ← phi( sin8s::@9/(byte) mulu8_sel::v1#1 sin8s::@10/(byte) mulu8_sel::v1#2 sin8s::@11/(byte) mulu8_sel::v1#3 sin8s::@12/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 ) - [182] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 - [183] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 - [184] call mul8u - [185] (word) mul8u::return#3 ← (word) mul8u::res#2 + [182] (byte) mulu8_sel::select#5 ← phi( sin8s::@9/(byte) 1 sin8s::@10/(byte) 1 sin8s::@11/(byte) 0 sin8s::@12/(byte) 0 sin8s::@2/(byte) 0 ) + [182] (byte) mulu8_sel::v2#5 ← phi( sin8s::@9/(byte) mulu8_sel::v2#1 sin8s::@10/(const byte) sin8s::DIV_6 sin8s::@11/(byte) mulu8_sel::v2#3 sin8s::@12/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 ) + [182] (byte) mulu8_sel::v1#5 ← phi( sin8s::@9/(byte) mulu8_sel::v1#1 sin8s::@10/(byte) mulu8_sel::v1#2 sin8s::@11/(byte) mulu8_sel::v1#3 sin8s::@12/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 ) + [183] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 + [184] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 + [185] call mul8u + [186] (word) mul8u::return#3 ← (word) mul8u::res#2 to:mulu8_sel::@1 mulu8_sel::@1: scope:[mulu8_sel] from mulu8_sel - [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 - [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 - [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 + [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 + [188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 + [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 to:mulu8_sel::@return mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@1 - [189] return + [190] return to:@return (word()) div16u((word) div16u::dividend , (word) div16u::divisor) div16u: scope:[div16u] from sin8u_table - [190] phi() - [191] call divr16u - [192] (word) divr16u::return#2 ← (word) divr16u::return#0 + [191] phi() + [192] call divr16u + [193] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div16u::@1 div16u::@1: scope:[div16u] from div16u - [193] (word) div16u::return#0 ← (word) divr16u::return#2 + [194] (word) div16u::return#0 ← (word) divr16u::return#2 to:div16u::@return div16u::@return: scope:[div16u] from div16u::@1 - [194] return + [195] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div16u - [195] phi() + [196] phi() to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [196] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [196] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [196] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12 divr16u::@3/(word) divr16u::dividend#0 ) - [196] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) - [197] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 - [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 - [199] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [200] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [197] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [197] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [197] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12 divr16u::@3/(word) divr16u::dividend#0 ) + [197] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) + [198] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 + [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 + [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [202] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [203] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 - [204] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 + [203] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 + [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [206] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize + [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [208] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [208] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) - [209] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [210] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [209] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [209] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) + [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 - [211] return + [212] return to:@return (void()) print_cls() print_cls: scope:[print_cls] from main - [212] phi() - [213] call memset + [213] phi() + [214] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [214] return + [215] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls - [215] phi() + [216] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [216] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [217] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [218] return + [219] return to:@return memset::@2: scope:[memset] from memset::@1 - [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index 6fb4d376d..3b28a8486 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -105,7 +105,7 @@ divr16u: scope:[divr16u] from div16u (word) divr16u::divisor#5 ← phi( div16u/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -200,8 +200,8 @@ div16u::@return: scope:[div16u] from div16u::@2 mul8u: scope:[mul8u] from mul8su mulu8_sel (byte) mul8u::a#6 ← phi( mul8su/(byte) mul8u::a#1 mulu8_sel/(byte) mul8u::a#2 ) (byte) mul8u::b#2 ← phi( mul8su/(byte) mul8u::b#0 mulu8_sel/(byte) mul8u::b#1 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#2 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -289,7 +289,7 @@ mul8su::@return: scope:[mul8su] from mul8su::@1 (signed byte()) sin8s((word) sin8s::x) sin8s: scope:[sin8s] from sin8u_table::@2 (word) sin8s::x#3 ← phi( sin8u_table::@2/(word) sin8s::x#2 ) - (byte) sin8s::isUpper#0 ← (number) 0 + (byte) sin8s::isUpper#0 ← (byte) 0 (bool~) sin8s::$0 ← (word) sin8s::x#3 >= (const word) PI_u4f12 (bool~) sin8s::$1 ← ! (bool~) sin8s::$0 if((bool~) sin8s::$1) goto sin8s::@1 @@ -932,8 +932,8 @@ sin8u_table::@18: scope:[sin8u_table] from sin8u_table::@17 (byte*) print_line_cursor#19 ← phi( sin8u_table::@17/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#8 ← (byte*) print_line_cursor#19 (byte*) print_char_cursor#36 ← (byte*) print_char_cursor#82 - (word) sin8u_table::x#0 ← (number) 0 - (word) sin8u_table::i#0 ← (number) 0 + (word) sin8u_table::x#0 ← (word) 0 + (word) sin8u_table::i#0 ← (word) 0 to:sin8u_table::@1 sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@18 sin8u_table::@29 (word) sin8u_table::step#14 ← phi( sin8u_table::@18/(word) sin8u_table::step#15 sin8u_table::@29/(word) sin8u_table::step#2 ) @@ -1172,9 +1172,9 @@ SYMBOL TABLE SSA (label) @60 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const word) PI_HALF_u4f12 = (number) $1922 -(const word) PI_u4f12 = (number) $3244 +(const word) PI2_u4f12 = (word) $6488 +(const word) PI_HALF_u4f12 = (word) $1922 +(const word) PI_u4f12 = (word) $3244 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1761,7 +1761,7 @@ SYMBOL TABLE SSA (label) sin8s::@7 (label) sin8s::@8 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#0 (byte) sin8s::isUpper#1 @@ -2082,7 +2082,6 @@ SYMBOL TABLE SSA (word) sin8u_table::x#8 (word) sin8u_table::x#9 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -2092,7 +2091,6 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#6 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (unumber)(number) 1 @@ -2100,7 +2098,6 @@ Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mu Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#5 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 Adding number conversion cast (snumber) 0 in (bool~) mul8su::$3 ← (signed byte) mul8su::a#2 < (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sin8s::isUpper#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin8s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (word~) sin8s::$4 ← (word) sin8s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu8_sel::select#0 ← (number) 0 @@ -2126,19 +2123,14 @@ Adding number conversion cast (unumber) 2 in (number~) sin8u_table::$3 ← (word Adding number conversion cast (unumber) sin8u_table::$3 in (number~) sin8u_table::$3 ← (word) sin8u_table::sum#0 / (unumber)(number) 2 Adding number conversion cast (unumber) 1 in (number~) sin8u_table::$4 ← (unumber~) sin8u_table::$3 + (number) 1 Adding number conversion cast (unumber) sin8u_table::$4 in (number~) sin8u_table::$4 ← (unumber~) sin8u_table::$3 + (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (word) sin8u_table::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) sin8u_table::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) sin8u_table::$20 ← (byte) sin8u_table::amplitude#2 + (number) 1 Adding number conversion cast (unumber) sin8u_table::$20 in (number~) sin8u_table::$20 ← (byte) sin8u_table::amplitude#2 + (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (byte~) mul8su::$0 ← (byte)(signed byte) mul8su::a#1 Inlining cast (byte~) mul8su::$1 ← (byte)(byte) mul8su::b#1 Inlining cast (signed word~) mul8su::$5 ← (signed word)(word) mul8su::m#2 Inlining cast (byte~) mul8su::$8 ← (byte)(byte) mul8su::b#2 -Inlining cast (byte) sin8s::isUpper#0 ← (unumber)(number) 0 Inlining cast (byte) sin8s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu8_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu8_sel::select#1 ← (unumber)(number) 1 @@ -2156,10 +2148,7 @@ Inlining cast (byte) sin8u_table::min#0 ← (unumber)(number) $a Inlining cast (byte) sin8u_table::max#0 ← (unumber)(number) $ff Inlining cast (word~) sin8u_table::$1 ← (word)(byte) sin8u_table::min#1 Inlining cast (byte~) sin8u_table::$5 ← (byte)(unumber~) sin8u_table::$4 -Inlining cast (word) sin8u_table::x#0 ← (unumber)(number) 0 -Inlining cast (word) sin8u_table::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2168,7 +2157,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -2176,7 +2164,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast (byte) mul8su::b#1 Simplifying constant integer cast 0 Simplifying constant integer cast (byte) mul8su::b#2 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 @@ -2200,11 +2187,8 @@ Simplifying constant integer cast $a Simplifying constant integer cast $ff Simplifying constant integer cast 2 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2213,13 +2197,11 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -2242,8 +2224,6 @@ Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 @@ -2278,7 +2258,6 @@ Alias (word) divr16u::rem#2 = (word~) divr16u::$10 Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#3 (word) divr16u::return#1 Alias (word) divr16u::return#2 = (word) divr16u::return#4 Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#3 (word) div16u::return#1 -Alias (word) mul8u::mb#0 = (byte) mul8u::b#2 Alias (byte) mul8u::a#3 = (byte) mul8u::a#4 (byte) mul8u::a#7 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#4 (word) mul8u::return#1 @@ -2580,9 +2559,9 @@ Simplifying constant integer cast $10 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [94] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 -Constant right-side identified [151] (byte) sin8u_table::amplitude#0 ← (const byte) sin8u_table::max#0 - (const byte) sin8u_table::min#0 -Constant right-side identified [152] (word) sin8u_table::sum#0 ← (const word) sin8u_table::$1 + (const byte) sin8u_table::max#0 +Constant right-side identified [95] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0 +Constant right-side identified [152] (byte) sin8u_table::amplitude#0 ← (const byte) sin8u_table::max#0 - (const byte) sin8u_table::min#0 +Constant right-side identified [153] (word) sin8u_table::sum#0 ← (const word) sin8u_table::$1 + (const byte) sin8u_table::max#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Constant (const byte) sin8u_table::amplitude#0 = sin8u_table::max#0-sin8u_table::min#0 @@ -2590,13 +2569,13 @@ Constant (const word) sin8u_table::sum#0 = sin8u_table::$1+sin8u_table::max#0 Successful SSA optimization Pass2ConstantIdentification Constant (const byte) print_byte::b#5 = sin8u_table::amplitude#0 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [150] (word~) sin8u_table::$3 ← (const word) sin8u_table::sum#0 / (byte) 2 -Constant right-side identified [175] (byte) mul8su::b#0 ← (const byte) sin8u_table::amplitude#0 + (byte) 1 +Constant right-side identified [151] (word~) sin8u_table::$3 ← (const word) sin8u_table::sum#0 / (byte) 2 +Constant right-side identified [176] (byte) mul8su::b#0 ← (const byte) sin8u_table::amplitude#0 + (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) sin8u_table::$3 = sin8u_table::sum#0/2 Constant (const byte) mul8su::b#0 = sin8u_table::amplitude#0+1 Successful SSA optimization Pass2ConstantIdentification -Constant right-side identified [150] (word~) sin8u_table::$4 ← (const word) sin8u_table::$3 + (byte) 1 +Constant right-side identified [151] (word~) sin8u_table::$4 ← (const word) sin8u_table::$3 + (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) sin8u_table::$4 = sin8u_table::$3+1 Successful SSA optimization Pass2ConstantIdentification @@ -2604,11 +2583,11 @@ Constant (const byte) sin8u_table::mid#0 = (byte)sin8u_table::$4 Successful SSA optimization Pass2ConstantIdentification Constant (const byte) print_byte::b#6 = sin8u_table::mid#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [36] (signed word) mul8su::return#0 ← (signed word)(word) mul8su::m#2 keeping mul8su::m#2 -Inlining Noop Cast [78] (signed byte) sin8s::sinx#0 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 -Inlining Noop Cast [82] (signed byte~) sin8s::$21 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 +Inlining Noop Cast [37] (signed word) mul8su::return#0 ← (signed word)(word) mul8su::m#2 keeping mul8su::m#2 +Inlining Noop Cast [79] (signed byte) sin8s::sinx#0 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 +Inlining Noop Cast [83] (signed byte~) sin8s::$21 ← (signed byte)(byte) sin8s::usinx#4 keeping sin8s::usinx#4 Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [173] (signed word) mul8su::return#2 ← (signed word)(word) mul8su::m#2 keeping mul8su::m#2 +Inlining Noop Cast [174] (signed word) mul8su::return#2 ← (signed word)(word) mul8su::m#2 keeping mul8su::m#2 Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2647,13 +2626,13 @@ Inlining constant with var siblings (const word) sin8u_table::i#0 Inlining constant with var siblings (const byte*) print_line_cursor#0 Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined divr16u::i#0 = (byte) 0 -Constant inlined sin8u_table::i#0 = (byte) 0 +Constant inlined sin8u_table::i#0 = (word) 0 Constant inlined sin8u_table::sintab#0 = (const byte*) main::sintab Constant inlined sin8s::isUpper#1 = (byte) 1 Constant inlined sin8s::isUpper#0 = (byte) 0 Constant inlined sin8u_table::$4 = (const word) sin8u_table::sum#0/(byte) 2+(byte) 1 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined div16u::divisor#0 = (const word) main::tabsize Constant inlined sin8u_table::$1 = (word)(const byte) sin8u_table::min#0 Constant inlined sin8u_table::$3 = (const word) sin8u_table::sum#0/(byte) 2 @@ -2675,7 +2654,7 @@ Constant inlined print_char::ch#3 = (byte) ' ' Constant inlined print_char::ch#2 = (byte) '-' Constant inlined mulu8_sel::v2#2 = (const byte) sin8s::DIV_6 Constant inlined print_str::str#9 = (const string) sin8u_table::str8 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined print_char::ch#1 = (byte) ' ' Constant inlined print_char::ch#0 = (byte) '-' Constant inlined print_str::str#4 = (const string) sin8u_table::str3 @@ -2683,7 +2662,7 @@ Constant inlined print_str::str#3 = (const string) sin8u_table::str2 Constant inlined print_str::str#2 = (const string) sin8u_table::str1 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined print_str::str#1 = (const string) sin8u_table::str -Constant inlined sin8u_table::x#0 = (byte) 0 +Constant inlined sin8u_table::x#0 = (word) 0 Constant inlined print_str::str#8 = (const string) sin8u_table::str7 Constant inlined print_str::str#7 = (const string) sin8u_table::str6 Constant inlined print_str::str#6 = (const string) sin8u_table::str5 @@ -2734,10 +2713,10 @@ Calls in [print_sword] to print_char:119 print_word:125 print_char:129 Calls in [print_word] to print_byte:136 print_byte:140 Calls in [print_sbyte] to print_char:145 print_byte:151 print_char:155 Calls in [mul8su] to mul8u:160 -Calls in [sin8s] to mulu8_sel:203 mulu8_sel:210 mulu8_sel:215 mulu8_sel:223 mulu8_sel:230 -Calls in [mulu8_sel] to mul8u:253 -Calls in [div16u] to divr16u:260 -Calls in [print_cls] to memset:293 +Calls in [sin8s] to mulu8_sel:204 mulu8_sel:211 mulu8_sel:216 mulu8_sel:224 mulu8_sel:231 +Calls in [mulu8_sel] to mul8u:254 +Calls in [div16u] to divr16u:261 +Calls in [print_cls] to memset:294 Created 40 initial phi equivalence classes Coalesced [18] print_word::w#7 ← print_word::w#1 @@ -2791,43 +2770,43 @@ Coalesced [157] print_sbyte::b#8 ← print_sbyte::b#0 Coalesced [159] mul8u::a#8 ← mul8u::a#1 Coalesced [167] mul8su::m#4 ← mul8su::m#1 Coalesced [170] mul8su::m#5 ← mul8su::m#0 -Coalesced [172] mul8u::a#10 ← mul8u::a#6 -Coalesced [173] mul8u::mb#7 ← mul8u::mb#0 -Coalesced [181] mul8u::res#9 ← mul8u::res#1 -Coalesced [185] mul8u::a#11 ← mul8u::a#0 -Coalesced [186] mul8u::res#7 ← mul8u::res#6 -Coalesced [187] mul8u::mb#8 ← mul8u::mb#1 -Coalesced (already) [188] mul8u::res#8 ← mul8u::res#2 -Coalesced [191] sin8s::x#9 ← sin8s::x#0 -Coalesced [195] sin8s::x#11 ← sin8s::x#1 -Coalesced [201] mulu8_sel::v1#10 ← mulu8_sel::v1#0 -Coalesced [202] mulu8_sel::v2#9 ← mulu8_sel::v2#0 -Coalesced [208] mulu8_sel::v1#6 ← mulu8_sel::v1#1 -Coalesced [209] mulu8_sel::v2#6 ← mulu8_sel::v2#1 -Coalesced [214] mulu8_sel::v1#7 ← mulu8_sel::v1#2 -Coalesced [221] mulu8_sel::v1#8 ← mulu8_sel::v1#3 -Coalesced [222] mulu8_sel::v2#7 ← mulu8_sel::v2#3 -Coalesced [228] mulu8_sel::v1#9 ← mulu8_sel::v1#4 -Coalesced [229] mulu8_sel::v2#8 ← mulu8_sel::v2#4 -Coalesced [237] sin8s::usinx#9 ← sin8s::usinx#2 -Coalesced [241] sin8s::return#6 ← sin8s::sinx#1 -Coalesced [245] sin8s::usinx#8 ← sin8s::usinx#1 -Coalesced [246] sin8s::x#10 ← sin8s::x#4 -Coalesced [247] sin8s::x#8 ← sin8s::x#2 -Coalesced [251] mul8u::mb#6 ← mul8u::b#1 -Coalesced [252] mul8u::a#9 ← mul8u::a#2 -Coalesced [271] divr16u::rem#12 ← divr16u::rem#1 -Coalesced [278] divr16u::rem#14 ← divr16u::rem#2 -Coalesced [279] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [285] divr16u::rem#10 ← divr16u::rem#9 -Coalesced [286] divr16u::dividend#8 ← divr16u::dividend#0 -Coalesced [287] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [288] divr16u::i#7 ← divr16u::i#1 -Coalesced [289] divr16u::rem#13 ← divr16u::rem#5 -Coalesced [290] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [291] divr16u::rem#11 ← divr16u::rem#0 -Coalesced [304] memset::dst#4 ← memset::dst#1 -Coalesced down to 27 phi equivalence classes +Coalesced [173] mul8u::a#10 ← mul8u::a#6 +Coalesced [174] mul8u::mb#6 ← mul8u::mb#0 +Coalesced [182] mul8u::res#9 ← mul8u::res#1 +Coalesced [186] mul8u::a#11 ← mul8u::a#0 +Coalesced [187] mul8u::res#7 ← mul8u::res#6 +Coalesced [188] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [189] mul8u::res#8 ← mul8u::res#2 +Coalesced [192] sin8s::x#9 ← sin8s::x#0 +Coalesced [196] sin8s::x#11 ← sin8s::x#1 +Coalesced [202] mulu8_sel::v1#10 ← mulu8_sel::v1#0 +Coalesced [203] mulu8_sel::v2#9 ← mulu8_sel::v2#0 +Coalesced [209] mulu8_sel::v1#6 ← mulu8_sel::v1#1 +Coalesced [210] mulu8_sel::v2#6 ← mulu8_sel::v2#1 +Coalesced [215] mulu8_sel::v1#7 ← mulu8_sel::v1#2 +Coalesced [222] mulu8_sel::v1#8 ← mulu8_sel::v1#3 +Coalesced [223] mulu8_sel::v2#7 ← mulu8_sel::v2#3 +Coalesced [229] mulu8_sel::v1#9 ← mulu8_sel::v1#4 +Coalesced [230] mulu8_sel::v2#8 ← mulu8_sel::v2#4 +Coalesced [238] sin8s::usinx#9 ← sin8s::usinx#2 +Coalesced [242] sin8s::return#6 ← sin8s::sinx#1 +Coalesced [246] sin8s::usinx#8 ← sin8s::usinx#1 +Coalesced [247] sin8s::x#10 ← sin8s::x#4 +Coalesced [248] sin8s::x#8 ← sin8s::x#2 +Coalesced [252] mul8u::b#3 ← mul8u::b#1 +Coalesced [253] mul8u::a#9 ← mul8u::a#2 +Coalesced [272] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [279] divr16u::rem#14 ← divr16u::rem#2 +Coalesced [280] divr16u::return#6 ← divr16u::quotient#2 +Coalesced [286] divr16u::rem#10 ← divr16u::rem#9 +Coalesced [287] divr16u::dividend#8 ← divr16u::dividend#0 +Coalesced [288] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [289] divr16u::i#7 ← divr16u::i#1 +Coalesced [290] divr16u::rem#13 ← divr16u::rem#5 +Coalesced [291] divr16u::return#5 ← divr16u::quotient#1 +Coalesced [292] divr16u::rem#11 ← divr16u::rem#0 +Coalesced [305] memset::dst#4 ← memset::dst#1 +Coalesced down to 28 phi equivalence classes Culled Empty Block (label) @33 Culled Empty Block (label) @60 Culled Empty Block (label) main::@2 @@ -2995,8 +2974,8 @@ sin8u_table::@13: scope:[sin8u_table] from sin8u_table::@12 to:sin8u_table::@1 sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@13 sin8u_table::@24 [34] (byte*) sin8u_table::sintab#2 ← phi( sin8u_table::@13/(const byte*) main::sintab sin8u_table::@24/(byte*) sin8u_table::sintab#1 ) - [34] (word) sin8u_table::x#10 ← phi( sin8u_table::@13/(byte) 0 sin8u_table::@24/(word) sin8u_table::x#1 ) - [34] (word) sin8u_table::i#10 ← phi( sin8u_table::@13/(byte) 0 sin8u_table::@24/(word) sin8u_table::i#1 ) + [34] (word) sin8u_table::x#10 ← phi( sin8u_table::@13/(word) 0 sin8u_table::@24/(word) sin8u_table::x#1 ) + [34] (word) sin8u_table::i#10 ← phi( sin8u_table::@13/(word) 0 sin8u_table::@24/(word) sin8u_table::i#1 ) [35] if((word) sin8u_table::i#10<(const word) main::tabsize) goto sin8u_table::@2 to:sin8u_table::@return sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@1 @@ -3206,200 +3185,201 @@ mul8su::@return: scope:[mul8su] from mul8su::@1 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mul8su mulu8_sel [128] (byte) mul8u::a#6 ← phi( mul8su/(byte) mul8u::a#1 mulu8_sel/(byte) mul8u::a#2 ) - [128] (word) mul8u::mb#0 ← phi( mul8su/(const byte) mul8su::b#0 mulu8_sel/(byte) mul8u::b#1 ) + [128] (byte) mul8u::b#2 ← phi( mul8su/(const byte) mul8su::b#0 mulu8_sel/(byte) mul8u::b#1 ) + [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [129] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [129] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) - [129] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) - [130] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 + [130] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [130] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) + [130] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) + [131] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return mul8u::@return: scope:[mul8u] from mul8u::@1 - [131] return + [132] return to:@return mul8u::@2: scope:[mul8u] from mul8u::@1 - [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 - [133] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 + [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 + [134] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 to:mul8u::@4 mul8u::@4: scope:[mul8u] from mul8u::@2 - [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 + [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 to:mul8u::@3 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 - [135] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) - [136] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 - [137] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 + [136] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) + [137] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 + [138] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 to:mul8u::@1 (signed byte()) sin8s((word) sin8s::x) sin8s: scope:[sin8s] from sin8u_table::@2 - [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 + [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 to:sin8s::@5 sin8s::@5: scope:[sin8s] from sin8s - [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 + [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 to:sin8s::@1 sin8s::@1: scope:[sin8s] from sin8s sin8s::@5 - [140] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte) 0 sin8s::@5/(byte) 1 ) - [140] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#2 sin8s::@5/(word) sin8s::x#0 ) - [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 + [141] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte) 0 sin8s::@5/(byte) 1 ) + [141] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#2 sin8s::@5/(word) sin8s::x#0 ) + [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 to:sin8s::@6 sin8s::@6: scope:[sin8s] from sin8s::@1 - [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 + [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 to:sin8s::@2 sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6 - [143] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#1 ) - [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 - [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 - [146] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 - [147] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 - [148] call mulu8_sel - [149] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 + [144] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#1 ) + [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 + [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 + [147] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 + [148] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 + [149] call mulu8_sel + [150] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 to:sin8s::@9 sin8s::@9: scope:[sin8s] from sin8s::@2 - [150] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 - [151] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 - [152] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 - [153] call mulu8_sel - [154] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 + [151] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 + [152] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 + [153] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 + [154] call mulu8_sel + [155] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 to:sin8s::@10 sin8s::@10: scope:[sin8s] from sin8s::@9 - [155] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 - [156] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 - [157] call mulu8_sel - [158] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 + [156] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 + [157] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 + [158] call mulu8_sel + [159] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 to:sin8s::@11 sin8s::@11: scope:[sin8s] from sin8s::@10 - [159] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 - [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 - [161] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 - [162] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 - [163] call mulu8_sel - [164] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 + [160] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 + [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 + [162] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 + [163] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 + [164] call mulu8_sel + [165] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 to:sin8s::@12 sin8s::@12: scope:[sin8s] from sin8s::@11 - [165] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 - [166] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 - [167] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 - [168] call mulu8_sel - [169] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 + [166] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 + [167] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 + [168] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 + [169] call mulu8_sel + [170] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 to:sin8s::@13 sin8s::@13: scope:[sin8s] from sin8s::@12 - [170] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 - [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 - [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 - [173] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 + [171] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 + [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 + [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 + [174] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 to:sin8s::@7 sin8s::@7: scope:[sin8s] from sin8s::@13 - [174] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 + [175] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 to:sin8s::@3 sin8s::@3: scope:[sin8s] from sin8s::@13 sin8s::@7 - [175] (byte) sin8s::usinx#4 ← phi( sin8s::@13/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 ) - [176] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 + [176] (byte) sin8s::usinx#4 ← phi( sin8s::@13/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 ) + [177] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 to:sin8s::@8 sin8s::@8: scope:[sin8s] from sin8s::@3 - [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 + [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 to:sin8s::@4 sin8s::@4: scope:[sin8s] from sin8s::@14 sin8s::@8 - [178] (signed byte) sin8s::return#0 ← phi( sin8s::@14/(signed byte) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 ) + [179] (signed byte) sin8s::return#0 ← phi( sin8s::@14/(signed byte) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 ) to:sin8s::@return sin8s::@return: scope:[sin8s] from sin8s::@4 - [179] return + [180] return to:@return sin8s::@14: scope:[sin8s] from sin8s::@3 - [180] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 + [181] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 to:sin8s::@4 (byte()) mulu8_sel((byte) mulu8_sel::v1 , (byte) mulu8_sel::v2 , (byte) mulu8_sel::select) mulu8_sel: scope:[mulu8_sel] from sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@2 sin8s::@9 - [181] (byte) mulu8_sel::select#5 ← phi( sin8s::@9/(byte) 1 sin8s::@10/(byte) 1 sin8s::@11/(byte) 0 sin8s::@12/(byte) 0 sin8s::@2/(byte) 0 ) - [181] (byte) mulu8_sel::v2#5 ← phi( sin8s::@9/(byte) mulu8_sel::v2#1 sin8s::@10/(const byte) sin8s::DIV_6 sin8s::@11/(byte) mulu8_sel::v2#3 sin8s::@12/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 ) - [181] (byte) mulu8_sel::v1#5 ← phi( sin8s::@9/(byte) mulu8_sel::v1#1 sin8s::@10/(byte) mulu8_sel::v1#2 sin8s::@11/(byte) mulu8_sel::v1#3 sin8s::@12/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 ) - [182] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 - [183] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 - [184] call mul8u - [185] (word) mul8u::return#3 ← (word) mul8u::res#2 + [182] (byte) mulu8_sel::select#5 ← phi( sin8s::@9/(byte) 1 sin8s::@10/(byte) 1 sin8s::@11/(byte) 0 sin8s::@12/(byte) 0 sin8s::@2/(byte) 0 ) + [182] (byte) mulu8_sel::v2#5 ← phi( sin8s::@9/(byte) mulu8_sel::v2#1 sin8s::@10/(const byte) sin8s::DIV_6 sin8s::@11/(byte) mulu8_sel::v2#3 sin8s::@12/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 ) + [182] (byte) mulu8_sel::v1#5 ← phi( sin8s::@9/(byte) mulu8_sel::v1#1 sin8s::@10/(byte) mulu8_sel::v1#2 sin8s::@11/(byte) mulu8_sel::v1#3 sin8s::@12/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 ) + [183] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 + [184] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 + [185] call mul8u + [186] (word) mul8u::return#3 ← (word) mul8u::res#2 to:mulu8_sel::@1 mulu8_sel::@1: scope:[mulu8_sel] from mulu8_sel - [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 - [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 - [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 + [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 + [188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 + [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 to:mulu8_sel::@return mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@1 - [189] return + [190] return to:@return (word()) div16u((word) div16u::dividend , (word) div16u::divisor) div16u: scope:[div16u] from sin8u_table - [190] phi() - [191] call divr16u - [192] (word) divr16u::return#2 ← (word) divr16u::return#0 + [191] phi() + [192] call divr16u + [193] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div16u::@1 div16u::@1: scope:[div16u] from div16u - [193] (word) div16u::return#0 ← (word) divr16u::return#2 + [194] (word) div16u::return#0 ← (word) divr16u::return#2 to:div16u::@return div16u::@return: scope:[div16u] from div16u::@1 - [194] return + [195] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div16u - [195] phi() + [196] phi() to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [196] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [196] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) - [196] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12 divr16u::@3/(word) divr16u::dividend#0 ) - [196] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) - [197] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 - [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 - [199] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 - [200] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 + [197] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) + [197] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) + [197] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12 divr16u::@3/(word) divr16u::dividend#0 ) + [197] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) + [198] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 + [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 + [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 + [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 + [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [202] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) - [203] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 - [204] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 - [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 + [203] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) + [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 + [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 + [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [206] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 - [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize + [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 + [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [208] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) - [208] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) - [209] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 - [210] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 + [209] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) + [209] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) + [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 + [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 - [211] return + [212] return to:@return (void()) print_cls() print_cls: scope:[print_cls] from main - [212] phi() - [213] call memset + [213] phi() + [214] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [214] return + [215] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls - [215] phi() + [216] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [216] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [217] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [218] return + [219] return to:@return memset::@2: scope:[memset] from memset::@1 - [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 @@ -3462,9 +3442,10 @@ VARIABLE REGISTER WEIGHTS (byte) mul8u::a#1 4.0 (byte) mul8u::a#2 2.0 (byte) mul8u::a#3 67.66666666666666 -(byte) mul8u::a#6 6.0 +(byte) mul8u::a#6 3.0 (byte) mul8u::b (byte) mul8u::b#1 4.0 +(byte) mul8u::b#2 2.0 (word) mul8u::mb (word) mul8u::mb#0 4.0 (word) mul8u::mb#1 202.0 @@ -3613,7 +3594,6 @@ VARIABLE REGISTER WEIGHTS (word) sin8u_table::x#1 11.0 (word) sin8u_table::x#10 1.4193548387096775 -Not consolidating phi with different size mul8u::mb#0 mul8u::b#1 Initial phi equivalence classes [ sin8u_table::i#10 sin8u_table::i#1 ] [ sin8u_table::x#10 sin8u_table::x#1 ] @@ -3627,7 +3607,7 @@ Initial phi equivalence classes [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] -[ mul8u::b#1 ] +[ mul8u::b#2 mul8u::b#1 ] [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] @@ -3692,7 +3672,7 @@ Complete equivalence classes [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] -[ mul8u::b#1 ] +[ mul8u::b#2 mul8u::b#1 ] [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] @@ -3756,7 +3736,7 @@ Allocated zp[2]:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] Allocated zp[2]:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] Allocated zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Allocated zp[2]:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] -Allocated zp[1]:23 [ mul8u::b#1 ] +Allocated zp[1]:23 [ mul8u::b#2 mul8u::b#1 ] Allocated zp[1]:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] Allocated zp[2]:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] Allocated zp[2]:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] @@ -3845,7 +3825,7 @@ __bend: main: { .label tabsize = $14 // [5] call print_cls - // [212] phi from main to print_cls [phi:main->print_cls] + // [213] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -3887,7 +3867,7 @@ sin8u_table: { .label x = 4 .label i = 2 // [10] call div16u - // [190] phi from sin8u_table to div16u [phi:sin8u_table->div16u] + // [191] phi from sin8u_table to div16u [phi:sin8u_table->div16u] div16u_from_sin8u_table: jsr div16u // [11] (word) div16u::return#2 ← (word) div16u::return#0 -- vwuz1=vwuz2 @@ -4064,12 +4044,12 @@ sin8u_table: { sta.z sintab lda #>main.sintab sta.z sintab+1 - // [34] phi (word) sin8u_table::x#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::x#10 = (word) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 sta.z x+1 - // [34] phi (word) sin8u_table::i#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::i#10 = (word) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -4621,11 +4601,9 @@ mul8su: { // [128] phi from mul8su to mul8u [phi:mul8su->mul8u] mul8u_from_mul8su: // [128] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8su->mul8u#0] -- register_copy - // [128] phi (word) mul8u::mb#0 = (const byte) mul8su::b#0 [phi:mul8su->mul8u#1] -- vwuz1=vbuc1 - lda #b - sta.z mul8u.mb+1 + // [128] phi (byte) mul8u::b#2 = (const byte) mul8su::b#0 [phi:mul8su->mul8u#1] -- vbuz1=vbuc1 + lda #b + sta.z mul8u.b jsr mul8u // [120] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -4681,41 +4659,46 @@ mul8u: { .label return = $3b .label b = $17 .label return_1 = $4f - // [129] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 -- vwuz1=_word_vbuz2 + lda.z b + sta.z mb + lda #0 + sta.z mb+1 + // [130] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [129] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [129] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [130] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [130] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 sta.z res+1 - // [129] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [130] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy jmp __b1 // mul8u::@1 __b1: - // [130] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 + // [131] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 lda.z a cmp #0 bne __b2 jmp __breturn // mul8u::@return __breturn: - // [131] return + // [132] return rts // mul8u::@2 __b2: - // [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [133] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 + // [134] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul8u::@4 __b4: - // [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda.z res clc adc.z mb @@ -4723,23 +4706,23 @@ mul8u: { lda.z res+1 adc.z mb+1 sta.z res+1 - // [135] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [136] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] __b3_from___b2: __b3_from___b4: - // [135] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [136] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy jmp __b3 // mul8u::@3 __b3: - // [136] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [137] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z a - // [137] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [138] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z mb rol.z mb+1 - // [129] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [130] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] __b1_from___b3: - // [129] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [129] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [129] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [130] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [130] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [130] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp __b1 } // sin8s @@ -4766,7 +4749,7 @@ sin8s: { .label return_1 = $32 // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = $1d - // [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 + // [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 bcc __b1_from_sin8s @@ -4778,7 +4761,7 @@ sin8s: { jmp __b5 // sin8s::@5 __b5: - // [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1 + // [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1 lda.z x sec sbc #PI_u4f12 sta.z x+1 - // [140] phi from sin8s::@5 to sin8s::@1 [phi:sin8s::@5->sin8s::@1] + // [141] phi from sin8s::@5 to sin8s::@1 [phi:sin8s::@5->sin8s::@1] __b1_from___b5: - // [140] phi (byte) sin8s::isUpper#10 = (byte) 1 [phi:sin8s::@5->sin8s::@1#0] -- vbuz1=vbuc1 + // [141] phi (byte) sin8s::isUpper#10 = (byte) 1 [phi:sin8s::@5->sin8s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [140] phi (word) sin8s::x#4 = (word) sin8s::x#0 [phi:sin8s::@5->sin8s::@1#1] -- register_copy + // [141] phi (word) sin8s::x#4 = (word) sin8s::x#0 [phi:sin8s::@5->sin8s::@1#1] -- register_copy jmp __b1 - // [140] phi from sin8s to sin8s::@1 [phi:sin8s->sin8s::@1] + // [141] phi from sin8s to sin8s::@1 [phi:sin8s->sin8s::@1] __b1_from_sin8s: - // [140] phi (byte) sin8s::isUpper#10 = (byte) 0 [phi:sin8s->sin8s::@1#0] -- vbuz1=vbuc1 + // [141] phi (byte) sin8s::isUpper#10 = (byte) 0 [phi:sin8s->sin8s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [140] phi (word) sin8s::x#4 = (word) sin8s::x#2 [phi:sin8s->sin8s::@1#1] -- register_copy + // [141] phi (word) sin8s::x#4 = (word) sin8s::x#2 [phi:sin8s->sin8s::@1#1] -- register_copy jmp __b1 // sin8s::@1 __b1: - // [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 -- vwuz1_lt_vwuc1_then_la1 + // [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_HALF_u4f12 bcc __b2_from___b1 @@ -4814,7 +4797,7 @@ sin8s: { jmp __b6 // sin8s::@6 __b6: - // [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 -- vwuz1=vwuc1_minus_vwuz1 + // [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 -- vwuz1=vwuc1_minus_vwuz1 sec lda #PI_u4f12 sbc.z x+1 sta.z x+1 - // [143] phi from sin8s::@1 sin8s::@6 to sin8s::@2 [phi:sin8s::@1/sin8s::@6->sin8s::@2] + // [144] phi from sin8s::@1 sin8s::@6 to sin8s::@2 [phi:sin8s::@1/sin8s::@6->sin8s::@2] __b2_from___b1: __b2_from___b6: - // [143] phi (word) sin8s::x#6 = (word) sin8s::x#4 [phi:sin8s::@1/sin8s::@6->sin8s::@2#0] -- register_copy + // [144] phi (word) sin8s::x#6 = (word) sin8s::x#4 [phi:sin8s::@1/sin8s::@6->sin8s::@2#0] -- register_copy jmp __b2 // sin8s::@2 __b2: - // [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z x asl sta.z __4 @@ -4840,189 +4823,189 @@ sin8s: { rol.z __4+1 asl.z __4 rol.z __4+1 - // [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 -- vbuz1=_hi_vwuz2 + // [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 -- vbuz1=_hi_vwuz2 lda.z __4+1 sta.z x1 - // [146] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 + // [147] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 lda.z x1 sta.z mulu8_sel.v1 - // [147] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 + // [148] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 lda.z x1 sta.z mulu8_sel.v2 - // [148] call mulu8_sel - // [181] phi from sin8s::@2 to mulu8_sel [phi:sin8s::@2->mulu8_sel] + // [149] call mulu8_sel + // [182] phi from sin8s::@2 to mulu8_sel [phi:sin8s::@2->mulu8_sel] mulu8_sel_from___b2: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@2->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@2->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#0 [phi:sin8s::@2->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#0 [phi:sin8s::@2->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#0 [phi:sin8s::@2->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#0 [phi:sin8s::@2->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [149] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 + // [150] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 lda.z mulu8_sel.return_5 sta.z mulu8_sel.return jmp __b9 // sin8s::@9 __b9: - // [150] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 -- vbuz1=vbuz2 + // [151] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 -- vbuz1=vbuz2 lda.z mulu8_sel.return sta.z x2 - // [151] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 -- vbuz1=vbuz2 + // [152] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 -- vbuz1=vbuz2 lda.z x2 sta.z mulu8_sel.v1 - // [152] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 + // [153] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 lda.z x1 sta.z mulu8_sel.v2 - // [153] call mulu8_sel - // [181] phi from sin8s::@9 to mulu8_sel [phi:sin8s::@9->mulu8_sel] + // [154] call mulu8_sel + // [182] phi from sin8s::@9 to mulu8_sel [phi:sin8s::@9->mulu8_sel] mulu8_sel_from___b9: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@9->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@9->mulu8_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#1 [phi:sin8s::@9->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#1 [phi:sin8s::@9->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#1 [phi:sin8s::@9->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#1 [phi:sin8s::@9->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [154] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 + // [155] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 lda.z mulu8_sel.return_5 sta.z mulu8_sel.return_1 jmp __b10 // sin8s::@10 __b10: - // [155] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 -- vbuz1=vbuz2 + // [156] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 -- vbuz1=vbuz2 lda.z mulu8_sel.return_1 sta.z x3 - // [156] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 -- vbuz1=vbuz2 + // [157] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 -- vbuz1=vbuz2 lda.z x3 sta.z mulu8_sel.v1 - // [157] call mulu8_sel - // [181] phi from sin8s::@10 to mulu8_sel [phi:sin8s::@10->mulu8_sel] + // [158] call mulu8_sel + // [182] phi from sin8s::@10 to mulu8_sel [phi:sin8s::@10->mulu8_sel] mulu8_sel_from___b10: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@10->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@10->mulu8_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (const byte) sin8s::DIV_6 [phi:sin8s::@10->mulu8_sel#1] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::v2#5 = (const byte) sin8s::DIV_6 [phi:sin8s::@10->mulu8_sel#1] -- vbuz1=vbuc1 lda #DIV_6 sta.z mulu8_sel.v2 - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#2 [phi:sin8s::@10->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#2 [phi:sin8s::@10->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [158] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 + // [159] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 lda.z mulu8_sel.return_5 sta.z mulu8_sel.return_2 jmp __b11 // sin8s::@11 __b11: - // [159] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 -- vbuz1=vbuz2 + // [160] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 -- vbuz1=vbuz2 lda.z mulu8_sel.return_2 sta.z x3_6 - // [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 -- vbuz1=vbuz2_minus_vbuz3 + // [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx - // [161] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 -- vbuz1=vbuz2 + // [162] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 -- vbuz1=vbuz2 lda.z x3 sta.z mulu8_sel.v1 - // [162] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 + // [163] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 lda.z x1 sta.z mulu8_sel.v2 - // [163] call mulu8_sel - // [181] phi from sin8s::@11 to mulu8_sel [phi:sin8s::@11->mulu8_sel] + // [164] call mulu8_sel + // [182] phi from sin8s::@11 to mulu8_sel [phi:sin8s::@11->mulu8_sel] mulu8_sel_from___b11: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@11->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@11->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#3 [phi:sin8s::@11->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#3 [phi:sin8s::@11->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#3 [phi:sin8s::@11->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#3 [phi:sin8s::@11->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [164] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 + // [165] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 lda.z mulu8_sel.return_5 sta.z mulu8_sel.return_3 jmp __b12 // sin8s::@12 __b12: - // [165] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 -- vbuz1=vbuz2 + // [166] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 -- vbuz1=vbuz2 lda.z mulu8_sel.return_3 sta.z x4 - // [166] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 -- vbuz1=vbuz2 + // [167] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 -- vbuz1=vbuz2 lda.z x4 sta.z mulu8_sel.v1 - // [167] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 + // [168] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 -- vbuz1=vbuz2 lda.z x1 sta.z mulu8_sel.v2 - // [168] call mulu8_sel - // [181] phi from sin8s::@12 to mulu8_sel [phi:sin8s::@12->mulu8_sel] + // [169] call mulu8_sel + // [182] phi from sin8s::@12 to mulu8_sel [phi:sin8s::@12->mulu8_sel] mulu8_sel_from___b12: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@12->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@12->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#4 [phi:sin8s::@12->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#4 [phi:sin8s::@12->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#4 [phi:sin8s::@12->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#4 [phi:sin8s::@12->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [169] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 + // [170] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 -- vbuz1=vbuz2 lda.z mulu8_sel.return_5 sta.z mulu8_sel.return_4 jmp __b13 // sin8s::@13 __b13: - // [170] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 -- vbuz1=vbuz2 + // [171] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 -- vbuz1=vbuz2 lda.z mulu8_sel.return_4 sta.z x5 - // [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 + // [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z x5 lsr lsr lsr lsr sta.z x5_128 - // [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 -- vbuz1=vbuz2_plus_vbuz3 + // [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 -- vbuz1=vbuz2_plus_vbuz3 lda.z usinx clc adc.z x5_128 sta.z usinx_1 - // [173] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 -- vbuz1_lt_vbuc1_then_la1 + // [174] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 -- vbuz1_lt_vbuc1_then_la1 lda.z usinx_1 cmp #$80 bcc __b3_from___b13 jmp __b7 // sin8s::@7 __b7: - // [174] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 -- vbuz1=_dec_vbuz1 + // [175] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 -- vbuz1=_dec_vbuz1 dec.z usinx_1 - // [175] phi from sin8s::@13 sin8s::@7 to sin8s::@3 [phi:sin8s::@13/sin8s::@7->sin8s::@3] + // [176] phi from sin8s::@13 sin8s::@7 to sin8s::@3 [phi:sin8s::@13/sin8s::@7->sin8s::@3] __b3_from___b13: __b3_from___b7: - // [175] phi (byte) sin8s::usinx#4 = (byte) sin8s::usinx#1 [phi:sin8s::@13/sin8s::@7->sin8s::@3#0] -- register_copy + // [176] phi (byte) sin8s::usinx#4 = (byte) sin8s::usinx#1 [phi:sin8s::@13/sin8s::@7->sin8s::@3#0] -- register_copy jmp __b3 // sin8s::@3 __b3: - // [176] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 -- vbuz1_eq_0_then_la1 + // [177] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b14 jmp __b8 // sin8s::@8 __b8: - // [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 -- vbsz1=_neg_vbsz2 + // [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 -- vbsz1=_neg_vbsz2 lda.z usinx_1 eor #$ff clc adc #1 sta.z sinx - // [178] phi from sin8s::@14 sin8s::@8 to sin8s::@4 [phi:sin8s::@14/sin8s::@8->sin8s::@4] + // [179] phi from sin8s::@14 sin8s::@8 to sin8s::@4 [phi:sin8s::@14/sin8s::@8->sin8s::@4] __b4_from___b14: __b4_from___b8: - // [178] phi (signed byte) sin8s::return#0 = (signed byte) sin8s::return#5 [phi:sin8s::@14/sin8s::@8->sin8s::@4#0] -- register_copy + // [179] phi (signed byte) sin8s::return#0 = (signed byte) sin8s::return#5 [phi:sin8s::@14/sin8s::@8->sin8s::@4#0] -- register_copy jmp __b4 // sin8s::@4 __b4: jmp __breturn // sin8s::@return __breturn: - // [179] return + // [180] return rts // sin8s::@14 __b14: - // [180] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 -- vbsz1=vbsz2 + // [181] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 -- vbsz1=vbsz2 lda.z usinx_1 sta.z return jmp __b4_from___b14 @@ -5043,23 +5026,19 @@ mulu8_sel: { .label return_4 = $4c .label select = $24 .label return_5 = $55 - // [182] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 -- vbuz1=vbuz2 + // [183] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 -- vbuz1=vbuz2 lda.z v1 sta.z mul8u.a - // [183] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 -- vbuz1=vbuz2 + // [184] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 -- vbuz1=vbuz2 lda.z v2 sta.z mul8u.b - // [184] call mul8u + // [185] call mul8u // [128] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] mul8u_from_mulu8_sel: // [128] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mulu8_sel->mul8u#0] -- register_copy - // [128] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mulu8_sel->mul8u#1] -- vwuz1=vbuz2 - lda.z mul8u.b - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [128] phi (byte) mul8u::b#2 = (byte) mul8u::b#1 [phi:mulu8_sel->mul8u#1] -- register_copy jsr mul8u - // [185] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 + // [186] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res sta.z mul8u.return_1 lda.z mul8u.res+1 @@ -5067,12 +5046,12 @@ mulu8_sel: { jmp __b1 // mulu8_sel::@1 __b1: - // [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 -- vwuz1=vwuz2 + // [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 -- vwuz1=vwuz2 lda.z mul8u.return_1 sta.z __0 lda.z mul8u.return_1+1 sta.z __0+1 - // [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 -- vwuz1=vwuz2_rol_vbuz3 + // [188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 -- vwuz1=vwuz2_rol_vbuz3 lda.z __0 sta.z __1 lda.z __0+1 @@ -5085,13 +5064,13 @@ mulu8_sel: { dey bne !- !e: - // [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 -- vbuz1=_hi_vwuz2 + // [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 -- vbuz1=_hi_vwuz2 lda.z __1+1 sta.z return_5 jmp __breturn // mulu8_sel::@return __breturn: - // [189] return + // [190] return rts } // div16u @@ -5102,11 +5081,11 @@ mulu8_sel: { div16u: { .label return = $58 .label return_1 = $2e - // [191] call divr16u - // [195] phi from div16u to divr16u [phi:div16u->divr16u] + // [192] call divr16u + // [196] phi from div16u to divr16u [phi:div16u->divr16u] divr16u_from_div16u: jsr divr16u - // [192] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 + // [193] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_1 lda.z divr16u.return+1 @@ -5114,7 +5093,7 @@ div16u: { jmp __b1 // div16u::@1 __b1: - // [193] (word) div16u::return#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 + // [194] (word) div16u::return#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return_1 sta.z return lda.z divr16u.return_1+1 @@ -5122,7 +5101,7 @@ div16u: { jmp __breturn // div16u::@return __breturn: - // [194] return + // [195] return rts } // divr16u @@ -5140,71 +5119,71 @@ divr16u: { .label i = $2b .label return = $29 .label return_1 = $56 - // [196] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [197] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [196] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + // [197] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [196] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [196] phi (word) divr16u::dividend#2 = (const word) PI2_u4f12 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#2 = (const word) PI2_u4f12 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 lda #PI2_u4f12 sta.z dividend+1 - // [196] phi (word) divr16u::rem#4 = (byte) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::rem#4 = (byte) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 lda #<0 sta.z rem lda #>0 sta.z rem+1 jmp __b1 - // [196] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [197] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [196] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [196] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [196] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [196] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [197] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [197] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [197] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [197] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [197] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [198] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 -- vbuz1=_hi_vwuz2 + // [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 -- vbuz1=_hi_vwuz2 lda.z dividend+1 sta.z __1 - // [199] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z __1 sta.z __2 - // [200] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 + // [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda.z __2 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [202] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [203] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [202] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [203] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [203] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [204] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>main.tabsize bcc __b3_from___b2 @@ -5216,12 +5195,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [206] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize -- vwuz1=vwuz1_minus_vwuc1 + // [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #main.tabsize sta.z rem+1 - // [208] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [209] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [208] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [208] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [209] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [209] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [209] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 + // [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [210] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 + // [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b3 jmp __breturn // divr16u::@return __breturn: - // [211] return + // [212] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [213] call memset - // [215] phi from print_cls to memset [phi:print_cls->memset] + // [214] call memset + // [216] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [214] return + // [215] return rts } // memset @@ -5270,9 +5249,9 @@ memset: { .label str = $400 .label end = str+num .label dst = $2c - // [216] phi from memset to memset::@1 [phi:memset->memset::@1] + // [217] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [216] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [217] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -5280,7 +5259,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -5290,22 +5269,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [218] return + // [219] return rts // memset::@2 __b2: - // [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [216] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [217] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [216] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [217] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -5348,36 +5327,38 @@ Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul Removing always clobbered register reg byte a as potential for zp[1]:52 [ mul8su::a#0 ] Statement [121] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a Statement [123] (byte~) mul8su::$7 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$7 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::m#0 mul8su::$7 ] ) always clobbers reg byte a -Statement [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:149::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] Removing always clobbered register reg byte a as potential for zp[1]:29 [ sin8s::isUpper#10 ] Removing always clobbered register reg byte a as potential for zp[1]:66 [ sin8s::x1#0 ] Removing always clobbered register reg byte a as potential for zp[1]:36 [ mulu8_sel::select#5 ] Removing always clobbered register reg byte a as potential for zp[1]:70 [ sin8s::x3#0 ] Removing always clobbered register reg byte a as potential for zp[1]:73 [ sin8s::usinx#0 ] -Statement [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a -Statement [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a -Statement [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Statement [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a -Statement [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Statement [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Statement [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [185] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a -Statement [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [192] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8u_table:7::div16u:10 [ divr16u::return#2 ] ) always clobbers reg byte a -Statement [193] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8u_table:7::div16u:10 [ div16u::return#0 ] ) always clobbers reg byte a -Statement [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:149::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:149::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a +Statement [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a +Statement [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a +Statement [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [186] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a +Statement [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [193] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8u_table:7::div16u:10 [ divr16u::return#2 ] ) always clobbers reg byte a +Statement [194] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8u_table:7::div16u:10 [ div16u::return#0 ] ) always clobbers reg byte a +Statement [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:43 [ divr16u::i#2 divr16u::i#1 ] -Statement [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:214 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:214 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y Statement [11] (word) div16u::return#2 ← (word) div16u::return#0 [ div16u::return#2 ] ( main:2::sin8u_table:7 [ div16u::return#2 ] ) always clobbers reg byte a Statement [12] (word) sin8u_table::step#0 ← (word) div16u::return#2 [ sin8u_table::step#0 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 ] ) always clobbers reg byte a Statement [14] (word) print_word::w#1 ← (word) sin8u_table::step#0 [ sin8u_table::step#0 print_word::w#1 print_char_cursor#2 ] ( main:2::sin8u_table:7 [ sin8u_table::step#0 print_word::w#1 print_char_cursor#2 ] ) always clobbers reg byte a @@ -5405,30 +5386,31 @@ Statement [117] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte:: Statement [120] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8su::a#0 mul8u::return#2 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::return#2 ] ) always clobbers reg byte a Statement [121] (word) mul8su::m#0 ← (word) mul8u::return#2 [ mul8su::a#0 mul8su::m#0 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8su::m#0 ] ) always clobbers reg byte a Statement [123] (byte~) mul8su::$7 ← > (word) mul8su::m#0 [ mul8su::m#0 mul8su::$7 ] ( main:2::sin8u_table:7::mul8su:42 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::m#0 mul8su::$7 ] ) always clobbers reg byte a -Statement [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:148::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168::mul8u:184 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Statement [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a -Statement [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a -Statement [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a -Statement [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a -Statement [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a -Statement [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a -Statement [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a -Statement [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a -Statement [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a -Statement [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a -Statement [185] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a -Statement [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a -Statement [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a -Statement [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:148 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:153 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:157 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:163 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:168 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a -Statement [192] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8u_table:7::div16u:10 [ divr16u::return#2 ] ) always clobbers reg byte a -Statement [193] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8u_table:7::div16u:10 [ div16u::return#0 ] ) always clobbers reg byte a -Statement [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:191 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:213 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:149::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#6 mul8u::mb#0 ] ) always clobbers reg byte a +Statement [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:149::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::sin8u_table:7::mul8su:42::mul8u:119 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 sin8u_table::sinx#0 print_line_cursor#1 mul8su::a#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:149::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169::mul8u:185 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 [ sin8s::x#2 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#2 ] ) always clobbers reg byte a +Statement [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 [ sin8s::x#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#0 ] ) always clobbers reg byte a +Statement [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 [ sin8s::x#4 sin8s::isUpper#10 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::x#4 sin8s::isUpper#10 ] ) always clobbers reg byte a +Statement [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 [ sin8s::isUpper#10 sin8s::x#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x#1 ] ) always clobbers reg byte a +Statement [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 [ sin8s::isUpper#10 sin8s::$4 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::$4 ] ) always clobbers reg byte a +Statement [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 [ sin8s::isUpper#10 sin8s::x1#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 ] ) always clobbers reg byte a +Statement [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 [ sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 sin8s::usinx#0 ] ) always clobbers reg byte a +Statement [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 [ sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 sin8s::x5_128#0 ] ) always clobbers reg byte a +Statement [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 [ sin8s::isUpper#10 sin8s::usinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#1 ] ) always clobbers reg byte a +Statement [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 [ sin8s::sinx#1 ] ( main:2::sin8u_table:7::sin8s:38 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::sinx#1 ] ) always clobbers reg byte a +Statement [186] (word) mul8u::return#3 ← (word) mul8u::res#2 [ mulu8_sel::select#5 mul8u::return#3 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mul8u::return#3 ] ) always clobbers reg byte a +Statement [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 [ mulu8_sel::select#5 mulu8_sel::$0 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::select#5 mulu8_sel::$0 ] ) always clobbers reg byte a +Statement [188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 [ mulu8_sel::$1 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::$1 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::$1 ] ) always clobbers reg byte a +Statement [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 [ mulu8_sel::return#12 ] ( main:2::sin8u_table:7::sin8s:38::mulu8_sel:149 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:154 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:158 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::x3#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:164 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::x1#0 sin8s::usinx#0 mulu8_sel::return#12 ] main:2::sin8u_table:7::sin8s:38::mulu8_sel:169 [ sin8u_table::step#0 sin8u_table::i#10 sin8u_table::x#10 sin8u_table::sintab#2 print_line_cursor#1 sin8s::isUpper#10 sin8s::usinx#0 mulu8_sel::return#12 ] ) always clobbers reg byte a +Statement [193] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 ] ( main:2::sin8u_table:7::div16u:10 [ divr16u::return#2 ] ) always clobbers reg byte a +Statement [194] (word) div16u::return#0 ← (word) divr16u::return#2 [ div16u::return#0 ] ( main:2::sin8u_table:7::div16u:10 [ div16u::return#0 ] ) always clobbers reg byte a +Statement [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:192 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:214 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:214 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y Potential registers zp[2]:2 [ sin8u_table::i#10 sin8u_table::i#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ sin8u_table::x#10 sin8u_table::x#1 ] : zp[2]:4 , Potential registers zp[2]:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] : zp[2]:6 , @@ -5441,7 +5423,7 @@ Potential registers zp[2]:16 [ print_sword::w#4 print_sword::w#0 print_sword::w# Potential registers zp[2]:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] : zp[2]:18 , Potential registers zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] : zp[1]:20 , reg byte a , reg byte x , Potential registers zp[2]:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] : zp[2]:21 , -Potential registers zp[1]:23 [ mul8u::b#1 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:23 [ mul8u::b#2 mul8u::b#1 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] : zp[1]:24 , reg byte x , reg byte y , Potential registers zp[2]:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:25 , Potential registers zp[2]:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:27 , @@ -5495,7 +5477,7 @@ Potential registers zp[1]:90 [ divr16u::$1 ] : zp[1]:90 , reg byte a , reg byte Potential registers zp[1]:91 [ divr16u::$2 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [mul8u] 346.86: zp[2]:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 249.57: zp[2]:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 202: zp[1]:63 [ mul8u::$1 ] 180.67: zp[1]:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 4: zp[1]:23 [ mul8u::b#1 ] 4: zp[2]:59 [ mul8u::return#2 ] 4: zp[2]:79 [ mul8u::return#3 ] +Uplift Scope [mul8u] 346.86: zp[2]:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 249.57: zp[2]:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 202: zp[1]:63 [ mul8u::$1 ] 177.67: zp[1]:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 6: zp[1]:23 [ mul8u::b#2 mul8u::b#1 ] 4: zp[2]:59 [ mul8u::return#2 ] 4: zp[2]:79 [ mul8u::return#3 ] Uplift Scope [] 225.78: zp[2]:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] 218.06: zp[2]:12 [ print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#118 print_char_cursor#1 ] Uplift Scope [print_str] 305.5: zp[2]:14 [ print_str::str#10 print_str::str#12 print_str::str#0 ] Uplift Scope [divr16u] 96.25: zp[2]:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp[2]:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:90 [ divr16u::$1 ] 22: zp[1]:91 [ divr16u::$2 ] 18.19: zp[1]:43 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp[2]:39 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp[2]:86 [ divr16u::return#2 ] @@ -5515,61 +5497,61 @@ Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [main] -Uplifting [mul8u] best 24172 combination zp[2]:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#1 ] zp[2]:59 [ mul8u::return#2 ] zp[2]:79 [ mul8u::return#3 ] -Uplifting [] best 24172 combination zp[2]:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] zp[2]:12 [ print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#118 print_char_cursor#1 ] -Uplifting [print_str] best 24172 combination zp[2]:14 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -Uplifting [divr16u] best 23962 combination zp[2]:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:39 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:86 [ divr16u::return#2 ] -Uplifting [sin8s] best 23857 combination zp[2]:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] reg byte a [ sin8s::return#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp[2]:64 [ sin8s::$4 ] zp[1]:68 [ sin8s::x2#0 ] zp[1]:72 [ sin8s::x3_6#0 ] zp[1]:75 [ sin8s::x4#0 ] zp[1]:77 [ sin8s::x5#0 ] zp[1]:78 [ sin8s::x5_128#0 ] zp[1]:70 [ sin8s::x3#0 ] zp[1]:66 [ sin8s::x1#0 ] zp[1]:73 [ sin8s::usinx#0 ] zp[1]:29 [ sin8s::isUpper#10 ] +Uplifting [mul8u] best 24164 combination zp[2]:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#2 mul8u::b#1 ] zp[2]:59 [ mul8u::return#2 ] zp[2]:79 [ mul8u::return#3 ] +Uplifting [] best 24164 combination zp[2]:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] zp[2]:12 [ print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#118 print_char_cursor#1 ] +Uplifting [print_str] best 24164 combination zp[2]:14 [ print_str::str#10 print_str::str#12 print_str::str#0 ] +Uplifting [divr16u] best 23954 combination zp[2]:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:39 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:86 [ divr16u::return#2 ] +Uplifting [sin8s] best 23849 combination zp[2]:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] reg byte a [ sin8s::return#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp[2]:64 [ sin8s::$4 ] zp[1]:68 [ sin8s::x2#0 ] zp[1]:72 [ sin8s::x3_6#0 ] zp[1]:75 [ sin8s::x4#0 ] zp[1]:77 [ sin8s::x5#0 ] zp[1]:78 [ sin8s::x5_128#0 ] zp[1]:70 [ sin8s::x3#0 ] zp[1]:66 [ sin8s::x1#0 ] zp[1]:73 [ sin8s::usinx#0 ] zp[1]:29 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [mulu8_sel] best 23811 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp[1]:71 [ mulu8_sel::return#2 ] zp[1]:74 [ mulu8_sel::return#10 ] zp[1]:76 [ mulu8_sel::return#11 ] zp[2]:81 [ mulu8_sel::$0 ] zp[2]:83 [ mulu8_sel::$1 ] zp[1]:85 [ mulu8_sel::return#12 ] zp[1]:36 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 23803 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp[1]:71 [ mulu8_sel::return#2 ] zp[1]:74 [ mulu8_sel::return#10 ] zp[1]:76 [ mulu8_sel::return#11 ] zp[2]:81 [ mulu8_sel::$0 ] zp[2]:83 [ mulu8_sel::$1 ] zp[1]:85 [ mulu8_sel::return#12 ] zp[1]:36 [ mulu8_sel::select#5 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [sin8u_table] best 23701 combination zp[2]:2 [ sin8u_table::i#10 sin8u_table::i#1 ] reg byte a [ sin8u_table::$22 ] zp[2]:4 [ sin8u_table::x#10 sin8u_table::x#1 ] zp[2]:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] zp[1]:51 [ sin8u_table::sinx#0 ] zp[2]:53 [ sin8u_table::sinx_sc#0 ] reg byte x [ sin8u_table::sinx_tr#0 ] zp[2]:48 [ sin8u_table::step#0 ] -Uplifting [print_byte] best 23693 combination zp[1]:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] -Uplifting [memset] best 23693 combination zp[2]:44 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_word] best 23693 combination zp[2]:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] -Uplifting [mul8su] best 23651 combination zp[2]:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] reg byte a [ mul8su::$7 ] reg byte a [ mul8su::$10 ] reg byte y [ mul8su::a#0 ] -Uplifting [print_char] best 23630 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplifting [print_sword] best 23630 combination zp[2]:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] -Uplifting [print_sbyte] best 23630 combination zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [div16u] best 23630 combination zp[2]:46 [ div16u::return#2 ] zp[2]:88 [ div16u::return#0 ] -Uplifting [RADIX] best 23630 combination -Uplifting [print_ln] best 23630 combination -Uplifting [print_cls] best 23630 combination -Uplifting [main] best 23630 combination +Uplifting [sin8u_table] best 23693 combination zp[2]:2 [ sin8u_table::i#10 sin8u_table::i#1 ] reg byte a [ sin8u_table::$22 ] zp[2]:4 [ sin8u_table::x#10 sin8u_table::x#1 ] zp[2]:6 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] zp[1]:51 [ sin8u_table::sinx#0 ] zp[2]:53 [ sin8u_table::sinx_sc#0 ] reg byte x [ sin8u_table::sinx_tr#0 ] zp[2]:48 [ sin8u_table::step#0 ] +Uplifting [print_byte] best 23685 combination zp[1]:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] +Uplifting [memset] best 23685 combination zp[2]:44 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_word] best 23685 combination zp[2]:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] +Uplifting [mul8su] best 23643 combination zp[2]:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] reg byte a [ mul8su::$7 ] reg byte a [ mul8su::$10 ] reg byte y [ mul8su::a#0 ] +Uplifting [print_char] best 23622 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplifting [print_sword] best 23622 combination zp[2]:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] +Uplifting [print_sbyte] best 23622 combination zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [div16u] best 23622 combination zp[2]:46 [ div16u::return#2 ] zp[2]:88 [ div16u::return#0 ] +Uplifting [RADIX] best 23622 combination +Uplifting [print_ln] best 23622 combination +Uplifting [print_cls] best 23622 combination +Uplifting [main] best 23622 combination Attempting to uplift remaining variables inzp[1]:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] -Uplifting [print_byte] best 23630 combination zp[1]:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] +Uplifting [print_byte] best 23622 combination zp[1]:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] Attempting to uplift remaining variables inzp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] -Uplifting [print_sbyte] best 23630 combination zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] +Uplifting [print_sbyte] best 23622 combination zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] Attempting to uplift remaining variables inzp[1]:68 [ sin8s::x2#0 ] -Uplifting [sin8s] best 23626 combination reg byte a [ sin8s::x2#0 ] +Uplifting [sin8s] best 23618 combination reg byte a [ sin8s::x2#0 ] Attempting to uplift remaining variables inzp[1]:71 [ mulu8_sel::return#2 ] -Uplifting [mulu8_sel] best 23620 combination reg byte a [ mulu8_sel::return#2 ] +Uplifting [mulu8_sel] best 23612 combination reg byte a [ mulu8_sel::return#2 ] Attempting to uplift remaining variables inzp[1]:72 [ sin8s::x3_6#0 ] -Uplifting [sin8s] best 23616 combination reg byte a [ sin8s::x3_6#0 ] +Uplifting [sin8s] best 23608 combination reg byte a [ sin8s::x3_6#0 ] Attempting to uplift remaining variables inzp[1]:74 [ mulu8_sel::return#10 ] -Uplifting [mulu8_sel] best 23610 combination reg byte a [ mulu8_sel::return#10 ] +Uplifting [mulu8_sel] best 23602 combination reg byte a [ mulu8_sel::return#10 ] Attempting to uplift remaining variables inzp[1]:75 [ sin8s::x4#0 ] -Uplifting [sin8s] best 23606 combination reg byte a [ sin8s::x4#0 ] +Uplifting [sin8s] best 23598 combination reg byte a [ sin8s::x4#0 ] Attempting to uplift remaining variables inzp[1]:76 [ mulu8_sel::return#11 ] -Uplifting [mulu8_sel] best 23600 combination reg byte a [ mulu8_sel::return#11 ] +Uplifting [mulu8_sel] best 23592 combination reg byte a [ mulu8_sel::return#11 ] Attempting to uplift remaining variables inzp[1]:77 [ sin8s::x5#0 ] -Uplifting [sin8s] best 23594 combination reg byte a [ sin8s::x5#0 ] +Uplifting [sin8s] best 23586 combination reg byte a [ sin8s::x5#0 ] Attempting to uplift remaining variables inzp[1]:78 [ sin8s::x5_128#0 ] -Uplifting [sin8s] best 23588 combination reg byte a [ sin8s::x5_128#0 ] +Uplifting [sin8s] best 23580 combination reg byte a [ sin8s::x5_128#0 ] Attempting to uplift remaining variables inzp[1]:51 [ sin8u_table::sinx#0 ] -Uplifting [sin8u_table] best 23588 combination zp[1]:51 [ sin8u_table::sinx#0 ] +Uplifting [sin8u_table] best 23580 combination zp[1]:51 [ sin8u_table::sinx#0 ] Attempting to uplift remaining variables inzp[1]:85 [ mulu8_sel::return#12 ] -Uplifting [mulu8_sel] best 23570 combination reg byte a [ mulu8_sel::return#12 ] +Uplifting [mulu8_sel] best 23562 combination reg byte a [ mulu8_sel::return#12 ] Attempting to uplift remaining variables inzp[1]:70 [ sin8s::x3#0 ] -Uplifting [sin8s] best 23570 combination zp[1]:70 [ sin8s::x3#0 ] +Uplifting [sin8s] best 23562 combination zp[1]:70 [ sin8s::x3#0 ] Attempting to uplift remaining variables inzp[1]:66 [ sin8s::x1#0 ] -Uplifting [sin8s] best 23570 combination zp[1]:66 [ sin8s::x1#0 ] +Uplifting [sin8s] best 23562 combination zp[1]:66 [ sin8s::x1#0 ] Attempting to uplift remaining variables inzp[1]:36 [ mulu8_sel::select#5 ] -Uplifting [mulu8_sel] best 23570 combination zp[1]:36 [ mulu8_sel::select#5 ] +Uplifting [mulu8_sel] best 23562 combination zp[1]:36 [ mulu8_sel::select#5 ] Attempting to uplift remaining variables inzp[1]:73 [ sin8s::usinx#0 ] -Uplifting [sin8s] best 23570 combination zp[1]:73 [ sin8s::usinx#0 ] +Uplifting [sin8s] best 23562 combination zp[1]:73 [ sin8s::usinx#0 ] Attempting to uplift remaining variables inzp[1]:29 [ sin8s::isUpper#10 ] -Uplifting [sin8s] best 23570 combination zp[1]:29 [ sin8s::isUpper#10 ] +Uplifting [sin8s] best 23562 combination zp[1]:29 [ sin8s::isUpper#10 ] Coalescing zero page register [ zp[1]:10 [ print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 ] ] with [ zp[1]:20 [ print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:16 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp[2]:18 [ print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 ] ] with [ zp[2]:53 [ sin8u_table::sinx_sc#0 ] ] - score: 1 @@ -5640,7 +5622,7 @@ __bend: main: { .label tabsize = $14 // [5] call print_cls - // [212] phi from main to print_cls [phi:main->print_cls] + // [213] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -5680,7 +5662,7 @@ sin8u_table: { .label x = $d .label i = $b // [10] call div16u - // [190] phi from sin8u_table to div16u [phi:sin8u_table->div16u] + // [191] phi from sin8u_table to div16u [phi:sin8u_table->div16u] div16u_from_sin8u_table: jsr div16u // [11] (word) div16u::return#2 ← (word) div16u::return#0 @@ -5849,12 +5831,12 @@ sin8u_table: { sta.z sintab lda #>main.sintab sta.z sintab+1 - // [34] phi (word) sin8u_table::x#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::x#10 = (word) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x lda #>0 sta.z x+1 - // [34] phi (word) sin8u_table::i#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::i#10 = (word) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -6374,11 +6356,8 @@ mul8su: { // [128] phi from mul8su to mul8u [phi:mul8su->mul8u] mul8u_from_mul8su: // [128] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8su->mul8u#0] -- register_copy - // [128] phi (word) mul8u::mb#0 = (const byte) mul8su::b#0 [phi:mul8su->mul8u#1] -- vwuz1=vbuc1 - lda #b - sta.z mul8u.mb+1 + // [128] phi (byte) mul8u::b#2 = (const byte) mul8su::b#0 [phi:mul8su->mul8u#1] -- vbuaa=vbuc1 + lda #b jsr mul8u // [120] (word) mul8u::return#2 ← (word) mul8u::res#2 jmp __b3 @@ -6418,38 +6397,42 @@ mul8u: { .label mb = 6 .label res = 9 .label return = 9 - // [129] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 -- vwuz1=_word_vbuaa + sta.z mb + lda #0 + sta.z mb+1 + // [130] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [129] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [129] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [130] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [130] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 sta.z res+1 - // [129] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [130] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy jmp __b1 // mul8u::@1 __b1: - // [130] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 + // [131] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 cpx #0 bne __b2 jmp __breturn // mul8u::@return __breturn: - // [131] return + // [132] return rts // mul8u::@2 __b2: - // [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 - // [133] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 + // [134] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul8u::@4 __b4: - // [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda.z res clc adc.z mb @@ -6457,25 +6440,25 @@ mul8u: { lda.z res+1 adc.z mb+1 sta.z res+1 - // [135] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [136] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] __b3_from___b2: __b3_from___b4: - // [135] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [136] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy jmp __b3 // mul8u::@3 __b3: - // [136] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [137] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [137] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [138] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z mb rol.z mb+1 - // [129] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [130] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] __b1_from___b3: - // [129] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [129] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [129] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [130] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [130] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [130] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp __b1 } // sin8s @@ -6493,7 +6476,7 @@ sin8s: { .label usinx = $16 // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = 8 - // [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 + // [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 bcc __b1_from_sin8s @@ -6505,7 +6488,7 @@ sin8s: { jmp __b5 // sin8s::@5 __b5: - // [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1 + // [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1 lda.z x sec sbc #PI_u4f12 sta.z x+1 - // [140] phi from sin8s::@5 to sin8s::@1 [phi:sin8s::@5->sin8s::@1] + // [141] phi from sin8s::@5 to sin8s::@1 [phi:sin8s::@5->sin8s::@1] __b1_from___b5: - // [140] phi (byte) sin8s::isUpper#10 = (byte) 1 [phi:sin8s::@5->sin8s::@1#0] -- vbuz1=vbuc1 + // [141] phi (byte) sin8s::isUpper#10 = (byte) 1 [phi:sin8s::@5->sin8s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [140] phi (word) sin8s::x#4 = (word) sin8s::x#0 [phi:sin8s::@5->sin8s::@1#1] -- register_copy + // [141] phi (word) sin8s::x#4 = (word) sin8s::x#0 [phi:sin8s::@5->sin8s::@1#1] -- register_copy jmp __b1 - // [140] phi from sin8s to sin8s::@1 [phi:sin8s->sin8s::@1] + // [141] phi from sin8s to sin8s::@1 [phi:sin8s->sin8s::@1] __b1_from_sin8s: - // [140] phi (byte) sin8s::isUpper#10 = (byte) 0 [phi:sin8s->sin8s::@1#0] -- vbuz1=vbuc1 + // [141] phi (byte) sin8s::isUpper#10 = (byte) 0 [phi:sin8s->sin8s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [140] phi (word) sin8s::x#4 = (word) sin8s::x#2 [phi:sin8s->sin8s::@1#1] -- register_copy + // [141] phi (word) sin8s::x#4 = (word) sin8s::x#2 [phi:sin8s->sin8s::@1#1] -- register_copy jmp __b1 // sin8s::@1 __b1: - // [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 -- vwuz1_lt_vwuc1_then_la1 + // [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_HALF_u4f12 bcc __b2_from___b1 @@ -6541,7 +6524,7 @@ sin8s: { jmp __b6 // sin8s::@6 __b6: - // [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 -- vwuz1=vwuc1_minus_vwuz1 + // [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 -- vwuz1=vwuc1_minus_vwuz1 sec lda #PI_u4f12 sbc.z x+1 sta.z x+1 - // [143] phi from sin8s::@1 sin8s::@6 to sin8s::@2 [phi:sin8s::@1/sin8s::@6->sin8s::@2] + // [144] phi from sin8s::@1 sin8s::@6 to sin8s::@2 [phi:sin8s::@1/sin8s::@6->sin8s::@2] __b2_from___b1: __b2_from___b6: - // [143] phi (word) sin8s::x#6 = (word) sin8s::x#4 [phi:sin8s::@1/sin8s::@6->sin8s::@2#0] -- register_copy + // [144] phi (word) sin8s::x#6 = (word) sin8s::x#4 [phi:sin8s::@1/sin8s::@6->sin8s::@2#0] -- register_copy jmp __b2 // sin8s::@2 __b2: - // [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __4 rol.z __4+1 asl.z __4 rol.z __4+1 asl.z __4 rol.z __4+1 - // [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 -- vbuz1=_hi_vwuz2 + // [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 -- vbuz1=_hi_vwuz2 lda.z __4+1 sta.z x1 - // [146] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 -- vbuxx=vbuz1 + // [147] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 -- vbuxx=vbuz1 ldx.z x1 - // [147] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [148] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [148] call mulu8_sel - // [181] phi from sin8s::@2 to mulu8_sel [phi:sin8s::@2->mulu8_sel] + // [149] call mulu8_sel + // [182] phi from sin8s::@2 to mulu8_sel [phi:sin8s::@2->mulu8_sel] mulu8_sel_from___b2: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@2->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@2->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#0 [phi:sin8s::@2->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#0 [phi:sin8s::@2->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#0 [phi:sin8s::@2->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#0 [phi:sin8s::@2->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [149] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 + // [150] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 jmp __b9 // sin8s::@9 __b9: - // [150] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 - // [151] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 -- vbuxx=vbuaa + // [151] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 + // [152] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 -- vbuxx=vbuaa tax - // [152] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [153] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [153] call mulu8_sel - // [181] phi from sin8s::@9 to mulu8_sel [phi:sin8s::@9->mulu8_sel] + // [154] call mulu8_sel + // [182] phi from sin8s::@9 to mulu8_sel [phi:sin8s::@9->mulu8_sel] mulu8_sel_from___b9: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@9->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@9->mulu8_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#1 [phi:sin8s::@9->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#1 [phi:sin8s::@9->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#1 [phi:sin8s::@9->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#1 [phi:sin8s::@9->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [154] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 + // [155] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 jmp __b10 // sin8s::@10 __b10: - // [155] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 -- vbuz1=vbuaa + // [156] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 -- vbuz1=vbuaa sta.z x3 - // [156] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 + // [157] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 ldx.z x3 - // [157] call mulu8_sel - // [181] phi from sin8s::@10 to mulu8_sel [phi:sin8s::@10->mulu8_sel] + // [158] call mulu8_sel + // [182] phi from sin8s::@10 to mulu8_sel [phi:sin8s::@10->mulu8_sel] mulu8_sel_from___b10: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@10->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@10->mulu8_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (const byte) sin8s::DIV_6 [phi:sin8s::@10->mulu8_sel#1] -- vbuyy=vbuc1 + // [182] phi (byte) mulu8_sel::v2#5 = (const byte) sin8s::DIV_6 [phi:sin8s::@10->mulu8_sel#1] -- vbuyy=vbuc1 ldy #DIV_6 - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#2 [phi:sin8s::@10->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#2 [phi:sin8s::@10->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [158] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 + // [159] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 jmp __b11 // sin8s::@11 __b11: - // [159] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 - // [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 -- vbuz1=vbuz2_minus_vbuaa + // [160] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 + // [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 -- vbuz1=vbuz2_minus_vbuaa eor #$ff sec adc.z x1 sta.z usinx - // [161] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 + // [162] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 ldx.z x3 - // [162] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [163] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [163] call mulu8_sel - // [181] phi from sin8s::@11 to mulu8_sel [phi:sin8s::@11->mulu8_sel] + // [164] call mulu8_sel + // [182] phi from sin8s::@11 to mulu8_sel [phi:sin8s::@11->mulu8_sel] mulu8_sel_from___b11: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@11->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@11->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#3 [phi:sin8s::@11->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#3 [phi:sin8s::@11->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#3 [phi:sin8s::@11->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#3 [phi:sin8s::@11->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [164] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 + // [165] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 jmp __b12 // sin8s::@12 __b12: - // [165] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 - // [166] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 -- vbuxx=vbuaa + // [166] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 + // [167] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 -- vbuxx=vbuaa tax - // [167] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [168] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [168] call mulu8_sel - // [181] phi from sin8s::@12 to mulu8_sel [phi:sin8s::@12->mulu8_sel] + // [169] call mulu8_sel + // [182] phi from sin8s::@12 to mulu8_sel [phi:sin8s::@12->mulu8_sel] mulu8_sel_from___b12: - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@12->mulu8_sel#0] -- vbuz1=vbuc1 + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@12->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#4 [phi:sin8s::@12->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#4 [phi:sin8s::@12->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#4 [phi:sin8s::@12->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#4 [phi:sin8s::@12->mulu8_sel#2] -- register_copy jsr mulu8_sel - // [169] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 + // [170] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 jmp __b13 // sin8s::@13 __b13: - // [170] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 - // [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 -- vbuaa=vbuaa_ror_4 + // [171] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 + // [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 -- vbuaa=vbuaa_ror_4 lsr lsr lsr lsr - // [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 -- vbuxx=vbuz1_plus_vbuaa + // [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 -- vbuxx=vbuz1_plus_vbuaa clc adc.z usinx tax - // [173] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 -- vbuxx_lt_vbuc1_then_la1 + // [174] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$80 bcc __b3_from___b13 jmp __b7 // sin8s::@7 __b7: - // [174] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 -- vbuxx=_dec_vbuxx + // [175] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 -- vbuxx=_dec_vbuxx dex - // [175] phi from sin8s::@13 sin8s::@7 to sin8s::@3 [phi:sin8s::@13/sin8s::@7->sin8s::@3] + // [176] phi from sin8s::@13 sin8s::@7 to sin8s::@3 [phi:sin8s::@13/sin8s::@7->sin8s::@3] __b3_from___b13: __b3_from___b7: - // [175] phi (byte) sin8s::usinx#4 = (byte) sin8s::usinx#1 [phi:sin8s::@13/sin8s::@7->sin8s::@3#0] -- register_copy + // [176] phi (byte) sin8s::usinx#4 = (byte) sin8s::usinx#1 [phi:sin8s::@13/sin8s::@7->sin8s::@3#0] -- register_copy jmp __b3 // sin8s::@3 __b3: - // [176] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 -- vbuz1_eq_0_then_la1 + // [177] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b14 jmp __b8 // sin8s::@8 __b8: - // [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 -- vbsaa=_neg_vbsxx + // [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 -- vbsaa=_neg_vbsxx txa eor #$ff clc adc #1 - // [178] phi from sin8s::@14 sin8s::@8 to sin8s::@4 [phi:sin8s::@14/sin8s::@8->sin8s::@4] + // [179] phi from sin8s::@14 sin8s::@8 to sin8s::@4 [phi:sin8s::@14/sin8s::@8->sin8s::@4] __b4_from___b14: __b4_from___b8: - // [178] phi (signed byte) sin8s::return#0 = (signed byte) sin8s::return#5 [phi:sin8s::@14/sin8s::@8->sin8s::@4#0] -- register_copy + // [179] phi (signed byte) sin8s::return#0 = (signed byte) sin8s::return#5 [phi:sin8s::@14/sin8s::@8->sin8s::@4#0] -- register_copy jmp __b4 // sin8s::@4 __b4: jmp __breturn // sin8s::@return __breturn: - // [179] return + // [180] return rts // sin8s::@14 __b14: - // [180] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 -- vbsaa=vbsxx + // [181] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 -- vbsaa=vbsxx txa jmp __b4_from___b14 } @@ -6723,24 +6706,21 @@ mulu8_sel: { .label __0 = 9 .label __1 = 9 .label select = $13 - // [182] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 - // [183] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy + // [183] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 + // [184] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy tya - // [184] call mul8u + // [185] call mul8u // [128] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] mul8u_from_mulu8_sel: // [128] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mulu8_sel->mul8u#0] -- register_copy - // [128] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mulu8_sel->mul8u#1] -- vwuz1=vbuaa - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [128] phi (byte) mul8u::b#2 = (byte) mul8u::b#1 [phi:mulu8_sel->mul8u#1] -- register_copy jsr mul8u - // [185] (word) mul8u::return#3 ← (word) mul8u::res#2 + // [186] (word) mul8u::return#3 ← (word) mul8u::res#2 jmp __b1 // mulu8_sel::@1 __b1: - // [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 - // [187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 -- vwuz1=vwuz1_rol_vbuz2 + // [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 + // [188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5 -- vwuz1=vwuz1_rol_vbuz2 ldy.z select beq !e+ !: @@ -6749,12 +6729,12 @@ mulu8_sel: { dey bne !- !e: - // [188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 -- vbuaa=_hi_vwuz1 + // [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 -- vbuaa=_hi_vwuz1 lda.z __1+1 jmp __breturn // mulu8_sel::@return __breturn: - // [189] return + // [190] return rts } // div16u @@ -6764,19 +6744,19 @@ mulu8_sel: { // Implemented using simple binary division div16u: { .label return = $f - // [191] call divr16u - // [195] phi from div16u to divr16u [phi:div16u->divr16u] + // [192] call divr16u + // [196] phi from div16u to divr16u [phi:div16u->divr16u] divr16u_from_div16u: jsr divr16u - // [192] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [193] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp __b1 // div16u::@1 __b1: - // [193] (word) div16u::return#0 ← (word) divr16u::return#2 + // [194] (word) div16u::return#0 ← (word) divr16u::return#2 jmp __breturn // div16u::@return __breturn: - // [194] return + // [195] return rts } // divr16u @@ -6790,66 +6770,66 @@ divr16u: { .label dividend = $d .label quotient = $f .label return = $f - // [196] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [197] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: - // [196] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [197] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 - // [196] phi (word) divr16u::dividend#2 = (const word) PI2_u4f12 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#2 = (const word) PI2_u4f12 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 lda #PI2_u4f12 sta.z dividend+1 - // [196] phi (word) divr16u::rem#4 = (byte) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::rem#4 = (byte) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 lda #<0 sta.z rem lda #>0 sta.z rem+1 jmp __b1 - // [196] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [197] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: - // [196] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [196] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [196] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [196] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [197] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [197] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [197] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [197] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: - // [197] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [198] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 - // [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 -- vbuaa=_hi_vwuz1 + // [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 -- vbuaa=_hi_vwuz1 lda.z dividend+1 - // [199] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 - // [200] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: - // [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [202] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [203] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: - // [202] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [203] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: - // [203] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 - // [204] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 - // [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>main.tabsize bcc __b3_from___b2 @@ -6861,12 +6841,12 @@ divr16u: { jmp __b5 // divr16u::@5 __b5: - // [206] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: - // [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize -- vwuz1=vwuz1_minus_vwuc1 + // [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #main.tabsize sta.z rem+1 - // [208] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [209] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: - // [208] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [208] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [209] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [209] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: - // [209] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [210] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1_from___b3 jmp __breturn // divr16u::@return __breturn: - // [211] return + // [212] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [213] call memset - // [215] phi from print_cls to memset [phi:print_cls->memset] + // [214] call memset + // [216] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [214] return + // [215] return rts } // memset @@ -6914,9 +6894,9 @@ memset: { .label str = $400 .label end = str+num .label dst = $11 - // [216] phi from memset to memset::@1 [phi:memset->memset::@1] + // [217] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [216] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [217] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -6924,7 +6904,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -6934,22 +6914,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [218] return + // [219] return rts // memset::@2 __b2: - // [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [216] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [217] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [216] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [217] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -7238,6 +7218,8 @@ Relabelling long label __b1_from_sin8s to b1 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Removing instruction __b4: Succesful ASM optimization Pass5UnusedLabelElimination @@ -7246,9 +7228,9 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const word) PI_HALF_u4f12 = (number) $1922 -(const word) PI_u4f12 = (number) $3244 +(const word) PI2_u4f12 = (word) $6488 +(const word) PI_HALF_u4f12 = (word) $1922 +(const word) PI_u4f12 = (word) $3244 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -7340,9 +7322,10 @@ FINAL SYMBOL TABLE (byte) mul8u::a#1 reg byte x 4.0 (byte) mul8u::a#2 reg byte x 2.0 (byte) mul8u::a#3 reg byte x 67.66666666666666 -(byte) mul8u::a#6 reg byte x 6.0 +(byte) mul8u::a#6 reg byte x 3.0 (byte) mul8u::b (byte) mul8u::b#1 reg byte a 4.0 +(byte) mul8u::b#2 reg byte a 2.0 (word) mul8u::mb (word) mul8u::mb#0 mb zp[2]:6 4.0 (word) mul8u::mb#1 mb zp[2]:6 202.0 @@ -7471,7 +7454,7 @@ FINAL SYMBOL TABLE (label) sin8s::@8 (label) sin8s::@9 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#10 isUpper zp[1]:8 0.05555555555555555 (signed byte) sin8s::return @@ -7573,7 +7556,7 @@ FINAL SYMBOL TABLE zp[2]:2 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] zp[2]:4 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 print_str::str#10 print_str::str#12 print_str::str#0 ] -reg byte a [ mul8u::b#1 ] +reg byte a [ mul8u::b#2 mul8u::b#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] zp[2]:6 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#118 print_char_cursor#1 ] zp[1]:8 [ sin8s::isUpper#10 print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] @@ -7616,7 +7599,7 @@ reg byte a [ divr16u::$2 ] FINAL ASSEMBLER -Score: 19664 +Score: 19456 // File Comments // Upstart @@ -7644,7 +7627,7 @@ main: { .label tabsize = $14 // print_cls() // [5] call print_cls - // [212] phi from main to print_cls [phi:main->print_cls] + // [213] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 @@ -7680,7 +7663,7 @@ sin8u_table: { .label i = $b // div16u(PI2_u4f12, tabsize) // [10] call div16u - // [190] phi from sin8u_table to div16u [phi:sin8u_table->div16u] + // [191] phi from sin8u_table to div16u [phi:sin8u_table->div16u] jsr div16u // div16u(PI2_u4f12, tabsize) // [11] (word) div16u::return#2 ← (word) div16u::return#0 @@ -7818,11 +7801,11 @@ sin8u_table: { sta.z sintab lda #>main.sintab sta.z sintab+1 - // [34] phi (word) sin8u_table::x#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::x#10 = (word) 0 [phi:sin8u_table::@13->sin8u_table::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z x sta.z x+1 - // [34] phi (word) sin8u_table::i#10 = (byte) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vbuc1 + // [34] phi (word) sin8u_table::i#10 = (word) 0 [phi:sin8u_table::@13->sin8u_table::@1#2] -- vwuz1=vwuc1 sta.z i sta.z i+1 // u[4.12] @@ -8299,11 +8282,8 @@ mul8su: { // [119] call mul8u // [128] phi from mul8su to mul8u [phi:mul8su->mul8u] // [128] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8su->mul8u#0] -- register_copy - // [128] phi (word) mul8u::mb#0 = (const byte) mul8su::b#0 [phi:mul8su->mul8u#1] -- vwuz1=vbuc1 - lda #b - sta.z mul8u.mb+1 + // [128] phi (byte) mul8u::b#2 = (const byte) mul8su::b#0 [phi:mul8su->mul8u#1] -- vbuaa=vbuc1 + lda #b jsr mul8u // mul8u((byte)a, (byte) b) // [120] (word) mul8u::return#2 ← (word) mul8u::res#2 @@ -8340,36 +8320,40 @@ mul8u: { .label mb = 6 .label res = 9 .label return = 9 - // [129] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [129] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [129] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 - lda #<0 + // mb = b + // [129] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 -- vwuz1=_word_vbuaa + sta.z mb + lda #0 + sta.z mb+1 + // [130] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [130] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [130] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 sta.z res sta.z res+1 - // [129] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [130] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy // mul8u::@1 __b1: // while(a!=0) - // [130] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 + // [131] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 cpx #0 bne __b2 // mul8u::@return // } - // [131] return + // [132] return rts // mul8u::@2 __b2: // a&1 - // [132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 // if( (a&1) != 0) - // [133] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 + // [134] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul8u::@4 // res = res + mb - // [134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda.z res clc adc.z mb @@ -8377,23 +8361,23 @@ mul8u: { lda.z res+1 adc.z mb+1 sta.z res+1 - // [135] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] - // [135] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [136] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [136] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy // mul8u::@3 __b3: // a = a>>1 - // [136] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [137] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax // mb = mb<<1 - // [137] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [138] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z mb rol.z mb+1 - // [129] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] - // [129] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [129] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [129] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [130] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [130] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [130] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [130] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp __b1 } // sin8s @@ -8412,7 +8396,7 @@ sin8s: { // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = 8 // if(x >= PI_u4f12 ) - // [138] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 + // [139] if((word) sin8s::x#2<(const word) PI_u4f12) goto sin8s::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 bcc b1 @@ -8423,7 +8407,7 @@ sin8s: { !: // sin8s::@5 // x = x - PI_u4f12 - // [139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1 + // [140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1 lda.z x sec sbc #PI_u4f12 sta.z x+1 - // [140] phi from sin8s::@5 to sin8s::@1 [phi:sin8s::@5->sin8s::@1] - // [140] phi (byte) sin8s::isUpper#10 = (byte) 1 [phi:sin8s::@5->sin8s::@1#0] -- vbuz1=vbuc1 + // [141] phi from sin8s::@5 to sin8s::@1 [phi:sin8s::@5->sin8s::@1] + // [141] phi (byte) sin8s::isUpper#10 = (byte) 1 [phi:sin8s::@5->sin8s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper - // [140] phi (word) sin8s::x#4 = (word) sin8s::x#0 [phi:sin8s::@5->sin8s::@1#1] -- register_copy + // [141] phi (word) sin8s::x#4 = (word) sin8s::x#0 [phi:sin8s::@5->sin8s::@1#1] -- register_copy jmp __b1 - // [140] phi from sin8s to sin8s::@1 [phi:sin8s->sin8s::@1] + // [141] phi from sin8s to sin8s::@1 [phi:sin8s->sin8s::@1] b1: - // [140] phi (byte) sin8s::isUpper#10 = (byte) 0 [phi:sin8s->sin8s::@1#0] -- vbuz1=vbuc1 + // [141] phi (byte) sin8s::isUpper#10 = (byte) 0 [phi:sin8s->sin8s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper - // [140] phi (word) sin8s::x#4 = (word) sin8s::x#2 [phi:sin8s->sin8s::@1#1] -- register_copy + // [141] phi (word) sin8s::x#4 = (word) sin8s::x#2 [phi:sin8s->sin8s::@1#1] -- register_copy // sin8s::@1 __b1: // if(x >= PI_HALF_u4f12 ) - // [141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 -- vwuz1_lt_vwuc1_then_la1 + // [142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12) goto sin8s::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_HALF_u4f12 bcc __b2 @@ -8457,7 +8441,7 @@ sin8s: { !: // sin8s::@6 // x = PI_u4f12 - x - // [142] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 -- vwuz1=vwuc1_minus_vwuz1 + // [143] (word) sin8s::x#1 ← (const word) PI_u4f12 - (word) sin8s::x#4 -- vwuz1=vwuc1_minus_vwuz1 sec lda #PI_u4f12 sbc.z x+1 sta.z x+1 - // [143] phi from sin8s::@1 sin8s::@6 to sin8s::@2 [phi:sin8s::@1/sin8s::@6->sin8s::@2] - // [143] phi (word) sin8s::x#6 = (word) sin8s::x#4 [phi:sin8s::@1/sin8s::@6->sin8s::@2#0] -- register_copy + // [144] phi from sin8s::@1 sin8s::@6 to sin8s::@2 [phi:sin8s::@1/sin8s::@6->sin8s::@2] + // [144] phi (word) sin8s::x#6 = (word) sin8s::x#4 [phi:sin8s::@1/sin8s::@6->sin8s::@2#0] -- register_copy // sin8s::@2 __b2: // x<<3 - // [144] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [145] (word~) sin8s::$4 ← (word) sin8s::x#6 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __4 rol.z __4+1 asl.z __4 @@ -8478,150 +8462,150 @@ sin8s: { asl.z __4 rol.z __4+1 // x1 = >x<<3 - // [145] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 -- vbuz1=_hi_vwuz2 + // [146] (byte) sin8s::x1#0 ← > (word~) sin8s::$4 -- vbuz1=_hi_vwuz2 lda.z __4+1 sta.z x1 // mulu8_sel(x1, x1, 0) - // [146] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 -- vbuxx=vbuz1 + // [147] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0 -- vbuxx=vbuz1 tax - // [147] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [148] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 tay - // [148] call mulu8_sel - // [181] phi from sin8s::@2 to mulu8_sel [phi:sin8s::@2->mulu8_sel] - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@2->mulu8_sel#0] -- vbuz1=vbuc1 + // [149] call mulu8_sel + // [182] phi from sin8s::@2 to mulu8_sel [phi:sin8s::@2->mulu8_sel] + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@2->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#0 [phi:sin8s::@2->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#0 [phi:sin8s::@2->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#0 [phi:sin8s::@2->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#0 [phi:sin8s::@2->mulu8_sel#2] -- register_copy jsr mulu8_sel // mulu8_sel(x1, x1, 0) - // [149] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 + // [150] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12 // sin8s::@9 // x2 = mulu8_sel(x1, x1, 0) - // [150] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 + // [151] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0 // mulu8_sel(x2, x1, 1) - // [151] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 -- vbuxx=vbuaa + // [152] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0 -- vbuxx=vbuaa tax - // [152] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [153] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [153] call mulu8_sel - // [181] phi from sin8s::@9 to mulu8_sel [phi:sin8s::@9->mulu8_sel] - // [181] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@9->mulu8_sel#0] -- vbuz1=vbuc1 + // [154] call mulu8_sel + // [182] phi from sin8s::@9 to mulu8_sel [phi:sin8s::@9->mulu8_sel] + // [182] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@9->mulu8_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#1 [phi:sin8s::@9->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#1 [phi:sin8s::@9->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#1 [phi:sin8s::@9->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#1 [phi:sin8s::@9->mulu8_sel#2] -- register_copy jsr mulu8_sel // mulu8_sel(x2, x1, 1) - // [154] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 + // [155] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12 // sin8s::@10 // x3 = mulu8_sel(x2, x1, 1) - // [155] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 -- vbuz1=vbuaa + // [156] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1 -- vbuz1=vbuaa sta.z x3 // mulu8_sel(x3, DIV_6, 1) - // [156] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 + // [157] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 tax - // [157] call mulu8_sel - // [181] phi from sin8s::@10 to mulu8_sel [phi:sin8s::@10->mulu8_sel] - // [181] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@10->mulu8_sel#0] -- vbuz1=vbuc1 + // [158] call mulu8_sel + // [182] phi from sin8s::@10 to mulu8_sel [phi:sin8s::@10->mulu8_sel] + // [182] phi (byte) mulu8_sel::select#5 = (byte) 1 [phi:sin8s::@10->mulu8_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (const byte) sin8s::DIV_6 [phi:sin8s::@10->mulu8_sel#1] -- vbuyy=vbuc1 + // [182] phi (byte) mulu8_sel::v2#5 = (const byte) sin8s::DIV_6 [phi:sin8s::@10->mulu8_sel#1] -- vbuyy=vbuc1 ldy #DIV_6 - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#2 [phi:sin8s::@10->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#2 [phi:sin8s::@10->mulu8_sel#2] -- register_copy jsr mulu8_sel // mulu8_sel(x3, DIV_6, 1) - // [158] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 + // [159] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12 // sin8s::@11 // x3_6 = mulu8_sel(x3, DIV_6, 1) - // [159] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 + // [160] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2 // usinx = x1 - x3_6 - // [160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 -- vbuz1=vbuz2_minus_vbuaa + // [161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0 -- vbuz1=vbuz2_minus_vbuaa eor #$ff sec adc.z x1 sta.z usinx // mulu8_sel(x3, x1, 0) - // [161] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 + // [162] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0 -- vbuxx=vbuz1 ldx.z x3 - // [162] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [163] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [163] call mulu8_sel - // [181] phi from sin8s::@11 to mulu8_sel [phi:sin8s::@11->mulu8_sel] - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@11->mulu8_sel#0] -- vbuz1=vbuc1 + // [164] call mulu8_sel + // [182] phi from sin8s::@11 to mulu8_sel [phi:sin8s::@11->mulu8_sel] + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@11->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#3 [phi:sin8s::@11->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#3 [phi:sin8s::@11->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#3 [phi:sin8s::@11->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#3 [phi:sin8s::@11->mulu8_sel#2] -- register_copy jsr mulu8_sel // mulu8_sel(x3, x1, 0) - // [164] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 + // [165] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12 // sin8s::@12 // x4 = mulu8_sel(x3, x1, 0) - // [165] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 + // [166] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10 // mulu8_sel(x4, x1, 0) - // [166] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 -- vbuxx=vbuaa + // [167] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0 -- vbuxx=vbuaa tax - // [167] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 + // [168] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0 -- vbuyy=vbuz1 ldy.z x1 - // [168] call mulu8_sel - // [181] phi from sin8s::@12 to mulu8_sel [phi:sin8s::@12->mulu8_sel] - // [181] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@12->mulu8_sel#0] -- vbuz1=vbuc1 + // [169] call mulu8_sel + // [182] phi from sin8s::@12 to mulu8_sel [phi:sin8s::@12->mulu8_sel] + // [182] phi (byte) mulu8_sel::select#5 = (byte) 0 [phi:sin8s::@12->mulu8_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu8_sel.select - // [181] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#4 [phi:sin8s::@12->mulu8_sel#1] -- register_copy - // [181] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#4 [phi:sin8s::@12->mulu8_sel#2] -- register_copy + // [182] phi (byte) mulu8_sel::v2#5 = (byte) mulu8_sel::v2#4 [phi:sin8s::@12->mulu8_sel#1] -- register_copy + // [182] phi (byte) mulu8_sel::v1#5 = (byte) mulu8_sel::v1#4 [phi:sin8s::@12->mulu8_sel#2] -- register_copy jsr mulu8_sel // mulu8_sel(x4, x1, 0) - // [169] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 + // [170] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12 // sin8s::@13 // x5 = mulu8_sel(x4, x1, 0) - // [170] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 + // [171] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11 // x5_128 = x5>>4 - // [171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 -- vbuaa=vbuaa_ror_4 + // [172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte) 4 -- vbuaa=vbuaa_ror_4 lsr lsr lsr lsr // usinx = usinx + x5_128 - // [172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 -- vbuxx=vbuz1_plus_vbuaa + // [173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0 -- vbuxx=vbuz1_plus_vbuaa clc adc.z usinx tax // if(usinx>=128) - // [173] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 -- vbuxx_lt_vbuc1_then_la1 + // [174] if((byte) sin8s::usinx#1<(byte) $80) goto sin8s::@3 -- vbuxx_lt_vbuc1_then_la1 cpx #$80 bcc __b3 // sin8s::@7 // usinx--; - // [174] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 -- vbuxx=_dec_vbuxx + // [175] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1 -- vbuxx=_dec_vbuxx dex - // [175] phi from sin8s::@13 sin8s::@7 to sin8s::@3 [phi:sin8s::@13/sin8s::@7->sin8s::@3] - // [175] phi (byte) sin8s::usinx#4 = (byte) sin8s::usinx#1 [phi:sin8s::@13/sin8s::@7->sin8s::@3#0] -- register_copy + // [176] phi from sin8s::@13 sin8s::@7 to sin8s::@3 [phi:sin8s::@13/sin8s::@7->sin8s::@3] + // [176] phi (byte) sin8s::usinx#4 = (byte) sin8s::usinx#1 [phi:sin8s::@13/sin8s::@7->sin8s::@3#0] -- register_copy // sin8s::@3 __b3: // if(isUpper!=0) - // [176] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 -- vbuz1_eq_0_then_la1 + // [177] if((byte) sin8s::isUpper#10==(byte) 0) goto sin8s::@14 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b14 // sin8s::@8 // sinx = -(signed byte)usinx - // [177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 -- vbsaa=_neg_vbsxx + // [178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4 -- vbsaa=_neg_vbsxx txa eor #$ff clc adc #1 - // [178] phi from sin8s::@14 sin8s::@8 to sin8s::@4 [phi:sin8s::@14/sin8s::@8->sin8s::@4] - // [178] phi (signed byte) sin8s::return#0 = (signed byte) sin8s::return#5 [phi:sin8s::@14/sin8s::@8->sin8s::@4#0] -- register_copy + // [179] phi from sin8s::@14 sin8s::@8 to sin8s::@4 [phi:sin8s::@14/sin8s::@8->sin8s::@4] + // [179] phi (signed byte) sin8s::return#0 = (signed byte) sin8s::return#5 [phi:sin8s::@14/sin8s::@8->sin8s::@4#0] -- register_copy // sin8s::@4 // sin8s::@return // } - // [179] return + // [180] return rts // sin8s::@14 __b14: - // [180] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 -- vbsaa=vbsxx + // [181] (signed byte) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4 -- vbsaa=vbsxx txa rts } @@ -8634,23 +8618,20 @@ mulu8_sel: { .label __1 = 9 .label select = $13 // mul8u(v1, v2) - // [182] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 - // [183] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy + // [183] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5 + // [184] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5 -- vbuaa=vbuyy tya - // [184] call mul8u + // [185] call mul8u // [128] phi from mulu8_sel to mul8u [phi:mulu8_sel->mul8u] // [128] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mulu8_sel->mul8u#0] -- register_copy - // [128] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mulu8_sel->mul8u#1] -- vwuz1=vbuaa - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [128] phi (byte) mul8u::b#2 = (byte) mul8u::b#1 [phi:mulu8_sel->mul8u#1] -- register_copy jsr mul8u // mul8u(v1, v2) - // [185] (word) mul8u::return#3 ← (word) mul8u::res#2 + // [186] (word) mul8u::return#3 ← (word) mul8u::res#2 // mulu8_sel::@1 - // [186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 + // [187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3 // mul8u(v1, v2)< (word~) mulu8_sel::$1 -- vbuaa=_hi_vwuz1 + // [189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1 -- vbuaa=_hi_vwuz1 lda.z __1+1 // mulu8_sel::@return // } - // [189] return + // [190] return rts } // div16u @@ -8675,16 +8656,16 @@ mulu8_sel: { div16u: { .label return = $f // divr16u(dividend, divisor, 0) - // [191] call divr16u - // [195] phi from div16u to divr16u [phi:div16u->divr16u] + // [192] call divr16u + // [196] phi from div16u to divr16u [phi:div16u->divr16u] jsr divr16u // divr16u(dividend, divisor, 0) - // [192] (word) divr16u::return#2 ← (word) divr16u::return#0 + // [193] (word) divr16u::return#2 ← (word) divr16u::return#0 // div16u::@1 - // [193] (word) div16u::return#0 ← (word) divr16u::return#2 + // [194] (word) div16u::return#0 ← (word) divr16u::return#2 // div16u::@return // } - // [194] return + // [195] return rts } // divr16u @@ -8698,63 +8679,63 @@ divr16u: { .label dividend = $d .label quotient = $f .label return = $f - // [196] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] - // [196] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + // [197] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + // [197] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [196] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 - // [196] phi (word) divr16u::dividend#2 = (const word) PI2_u4f12 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 + // [197] phi (word) divr16u::dividend#2 = (const word) PI2_u4f12 [phi:divr16u->divr16u::@1#2] -- vwuz1=vwuc1 lda #PI2_u4f12 sta.z dividend+1 - // [196] phi (word) divr16u::rem#4 = (byte) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 + // [197] phi (word) divr16u::rem#4 = (byte) 0 [phi:divr16u->divr16u::@1#3] -- vwuz1=vbuc1 txa sta.z rem sta.z rem+1 - // [196] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - // [196] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - // [196] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - // [196] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - // [196] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + // [197] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + // [197] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + // [197] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + // [197] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + // [197] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 __b1: // rem = rem << 1 - // [197] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [198] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // >dividend - // [198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 -- vbuaa=_hi_vwuz1 + // [199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // >dividend & $80 - // [199] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 + // [200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) - // [200] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 + // [201] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2 // divr16u::@4 // rem = rem | 1 - // [201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 + // [202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem - // [202] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - // [202] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + // [203] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + // [203] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 __b2: // dividend = dividend << 1 - // [203] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // quotient = quotient << 1 - // [204] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // if(rem>=divisor) - // [205] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 + // [206] if((word) divr16u::rem#5<(const word) main::tabsize) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>main.tabsize bcc __b3 @@ -8765,13 +8746,13 @@ divr16u: { !: // divr16u::@5 // quotient++; - // [206] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 + // [207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 inc.z quotient bne !+ inc.z quotient+1 !: // rem = rem - divisor - // [207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize -- vwuz1=vwuz1_minus_vwuc1 + // [208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize -- vwuz1=vwuz1_minus_vwuc1 lda.z rem sec sbc #main.tabsize sta.z rem+1 - // [208] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - // [208] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - // [208] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + // [209] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + // [209] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + // [209] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 __b3: // for( byte i : 0..15) - // [209] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx + // [210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx - // [210] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 + // [211] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1 // divr16u::@return // } - // [211] return + // [212] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [213] call memset - // [215] phi from print_cls to memset [phi:print_cls->memset] + // [214] call memset + // [216] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [214] return + // [215] return rts } // memset @@ -8815,8 +8796,8 @@ memset: { .label str = $400 .label end = str+num .label dst = $11 - // [216] phi from memset to memset::@1 [phi:memset->memset::@1] - // [216] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [217] phi from memset to memset::@1 [phi:memset->memset::@1] + // [217] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -8824,7 +8805,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [217] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [218] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -8833,23 +8814,23 @@ memset: { bne __b2 // memset::@return // } - // [218] return + // [219] return rts // memset::@2 __b2: // *dst = c - // [219] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [220] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [220] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [221] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [216] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [216] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [217] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [217] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data diff --git a/src/test/ref/sinusgenscale8.sym b/src/test/ref/sinusgenscale8.sym index cf1199967..0f6359f5a 100644 --- a/src/test/ref/sinusgenscale8.sym +++ b/src/test/ref/sinusgenscale8.sym @@ -1,9 +1,9 @@ (label) @1 (label) @begin (label) @end -(const word) PI2_u4f12 = (number) $6488 -(const word) PI_HALF_u4f12 = (number) $1922 -(const word) PI_u4f12 = (number) $3244 +(const word) PI2_u4f12 = (word) $6488 +(const word) PI_HALF_u4f12 = (word) $1922 +(const word) PI_u4f12 = (word) $3244 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -95,9 +95,10 @@ (byte) mul8u::a#1 reg byte x 4.0 (byte) mul8u::a#2 reg byte x 2.0 (byte) mul8u::a#3 reg byte x 67.66666666666666 -(byte) mul8u::a#6 reg byte x 6.0 +(byte) mul8u::a#6 reg byte x 3.0 (byte) mul8u::b (byte) mul8u::b#1 reg byte a 4.0 +(byte) mul8u::b#2 reg byte a 2.0 (word) mul8u::mb (word) mul8u::mb#0 mb zp[2]:6 4.0 (word) mul8u::mb#1 mb zp[2]:6 202.0 @@ -226,7 +227,7 @@ (label) sin8s::@8 (label) sin8s::@9 (label) sin8s::@return -(const byte) sin8s::DIV_6 = (number) $2b +(const byte) sin8s::DIV_6 = (byte) $2b (byte) sin8s::isUpper (byte) sin8s::isUpper#10 isUpper zp[1]:8 0.05555555555555555 (signed byte) sin8s::return @@ -328,7 +329,7 @@ zp[2]:2 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] zp[2]:4 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 print_word::w#3 print_word::w#0 print_word::w#2 print_word::w#1 print_str::str#10 print_str::str#12 print_str::str#0 ] -reg byte a [ mul8u::b#1 ] +reg byte a [ mul8u::b#2 mul8u::b#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] zp[2]:6 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_char_cursor#109 print_char_cursor#66 print_char_cursor#103 print_char_cursor#19 print_char_cursor#102 print_char_cursor#2 print_char_cursor#118 print_char_cursor#1 ] zp[1]:8 [ sin8s::isUpper#10 print_byte::b#8 print_byte::b#0 print_byte::b#1 print_byte::b#2 print_byte::b#7 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 ] diff --git a/src/test/ref/sizeof-arrays.log b/src/test/ref/sizeof-arrays.log index f856f2f22..bd6cd3d7b 100644 --- a/src/test/ref/sizeof-arrays.log +++ b/src/test/ref/sizeof-arrays.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte~) main::$0 ← sizeof (const byte*) main::ba (byte~) main::$1 ← (byte~) main::$0 / (const byte) SIZEOF_BYTE (byte~) main::$2 ← (byte) '0' + (byte~) main::$1 @@ -86,27 +86,17 @@ SYMBOL TABLE SSA (byte) main::idx#5 (byte) main::idx#6 (const byte*) main::sa[] = (string) "camelot" -(const byte*) main::sb[] = { (byte) 'a', (byte) 'b', (byte) 'c', (byte)(number) 0 } -(const byte) main::sz = (number) 7 +(const byte*) main::sb[] = { (byte) 'a', (byte) 'b', (byte) 'c', (byte) 0 } +(const byte) main::sz = (byte) 7 (const word*) main::wa[(number) 3] = { fill( 3, 0) } -(const word*) main::wb[] = { (word)(number) 1, (word)(number) 2, (word)(number) 3, (word)(number) 4 } +(const word*) main::wb[] = { (word) 1, (word) 2, (word) 3, (word) 4 } Adding number conversion cast (unumber) 2 in -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 2 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [1] (byte~) main::$0 ← sizeof (const byte*) main::ba Constant right-side identified [6] (byte~) main::$3 ← sizeof (const word*) main::wa @@ -450,7 +440,7 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@return (byte) main::idx -(const byte) main::sz = (number) 7 +(const byte) main::sz = (byte) 7 diff --git a/src/test/ref/sizeof-arrays.sym b/src/test/ref/sizeof-arrays.sym index 77acd0d2e..1ab4ee6bc 100644 --- a/src/test/ref/sizeof-arrays.sym +++ b/src/test/ref/sizeof-arrays.sym @@ -7,5 +7,5 @@ (void()) main() (label) main::@return (byte) main::idx -(const byte) main::sz = (number) 7 +(const byte) main::sz = (byte) 7 diff --git a/src/test/ref/sizeof-expr.cfg b/src/test/ref/sizeof-expr.cfg index 4a6bb03f1..dc37918a9 100644 --- a/src/test/ref/sizeof-expr.cfg +++ b/src/test/ref/sizeof-expr.cfg @@ -11,7 +11,7 @@ (void()) main() main: scope:[main] from @1 [4] (byte) main::b ← (byte) 0 - [5] (word) main::w ← (byte) 0 + [5] (word) main::w ← (word) 0 [6] *((const byte*) SCREEN) ← (byte) '0'+(const byte) SIZEOF_NUMBER [7] *((const byte*) SCREEN+(byte) 1) ← (byte) '0'+(const byte) SIZEOF_BYTE [8] *((const byte*) SCREEN+(byte) 2) ← (byte) '0'+(const byte) SIZEOF_BYTE diff --git a/src/test/ref/sizeof-expr.log b/src/test/ref/sizeof-expr.log index 8fa94ae80..9497d2050 100644 --- a/src/test/ref/sizeof-expr.log +++ b/src/test/ref/sizeof-expr.log @@ -14,9 +14,9 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 - (byte) main::b ← (number) 0 - (word) main::w ← (number) 0 + (byte) main::idx#0 ← (byte) 0 + (byte) main::b ← (byte) 0 + (word) main::w ← (word) 0 (byte~) main::$0 ← sizeof (number) 0 (byte~) main::$1 ← (byte) '0' + (byte~) main::$0 *((const byte*) SCREEN + (byte) main::idx#0) ← (byte~) main::$1 @@ -105,23 +105,8 @@ SYMBOL TABLE SSA (byte) main::idx#9 (word) main::w loadstore -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) main::w ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::b ← (unumber)(number) 0 -Inlining cast (word) main::w ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [3] (byte~) main::$0 ← sizeof (number) 0 Constant right-side identified [20] (byte~) main::$9 ← sizeof (number) $43ff Successful SSA optimization Pass2ConstantRValueConsolidation @@ -285,7 +270,7 @@ FINAL CONTROL FLOW GRAPH (void()) main() main: scope:[main] from @1 [4] (byte) main::b ← (byte) 0 - [5] (word) main::w ← (byte) 0 + [5] (word) main::w ← (word) 0 [6] *((const byte*) SCREEN) ← (byte) '0'+(const byte) SIZEOF_NUMBER [7] *((const byte*) SCREEN+(byte) 1) ← (byte) '0'+(const byte) SIZEOF_BYTE [8] *((const byte*) SCREEN+(byte) 2) ← (byte) '0'+(const byte) SIZEOF_BYTE @@ -351,7 +336,7 @@ main: { // Simple types lda #0 sta.z b - // [5] (word) main::w ← (byte) 0 -- vwuz1=vbuc1 + // [5] (word) main::w ← (word) 0 -- vwuz1=vwuc1 lda #<0 sta.z w lda #>0 @@ -390,7 +375,7 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::b ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [5] (word) main::w ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [5] (word) main::w ← (word) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN) ← (byte) '0'+(const byte) SIZEOF_NUMBER [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) SCREEN+(byte) 1) ← (byte) '0'+(const byte) SIZEOF_BYTE [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((const byte*) SCREEN+(byte) 2) ← (byte) '0'+(const byte) SIZEOF_BYTE [ ] ( main:2 [ ] ) always clobbers reg byte a @@ -446,7 +431,7 @@ main: { // Simple types lda #0 sta.z b - // [5] (word) main::w ← (byte) 0 -- vwuz1=vbuc1 + // [5] (word) main::w ← (word) 0 -- vwuz1=vwuc1 lda #<0 sta.z w lda #>0 @@ -558,7 +543,7 @@ main: { lda #0 sta.z b // w = 0 - // [5] (word) main::w ← (byte) 0 -- vwuz1=vbuc1 + // [5] (word) main::w ← (word) 0 -- vwuz1=vwuc1 sta.z w sta.z w+1 // SCREEN[idx++] = '0'+sizeof(0) diff --git a/src/test/ref/sizeof-struct.log b/src/test/ref/sizeof-struct.log index 86e27499b..4be59c0e9 100644 --- a/src/test/ref/sizeof-struct.log +++ b/src/test/ref/sizeof-struct.log @@ -27,7 +27,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 *((const byte*) SCREEN + (byte) main::idx#0) ← (byte) '0'+(const byte) SIZEOF_STRUCT_POINT (byte) main::idx#1 ← ++ (byte) main::idx#0 *((const byte*) SCREEN + (byte) main::idx#1) ← (byte) '0'+(const byte) SIZEOF_STRUCT_CIRCLE @@ -99,8 +99,8 @@ SYMBOL TABLE SSA (byte~) main::$8 (byte~) main::$9 (label) main::@return -(const byte) main::NUM_CIRCLES = (const byte) main::NUM_POINTS-(number) 1 -(const byte) main::NUM_POINTS = (number) 4 +(const byte) main::NUM_CIRCLES = (byte)(const byte) main::NUM_POINTS-(number) 1 +(const byte) main::NUM_POINTS = (byte) 4 (const struct Circle*) main::circles[(const byte) main::NUM_CIRCLES] = { fill( main::NUM_CIRCLES, 0) } (byte) main::idx (byte) main::idx#0 @@ -117,16 +117,11 @@ SYMBOL TABLE SSA (const struct Point*) main::points[(const byte) main::NUM_POINTS] = { fill( main::NUM_POINTS, 0) } Adding number conversion cast (unumber) 1 in -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [15] (byte~) main::$4 ← sizeof (const struct Point*) main::points Constant right-side identified [19] (byte~) main::$6 ← sizeof (const struct Point*) main::points @@ -145,6 +140,8 @@ Simplifying expression containing zero SCREEN in [1] *((const byte*) SCREEN + (c Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte) main::idx#10 and assignment [25] (byte) main::idx#10 ← ++ (byte) main::idx#9 Successful SSA optimization PassNEliminateUnusedVars +Simplifying constant integer cast (const byte) main::NUM_POINTS-(byte) 1 +Successful SSA optimization PassNCastSimplification Resolving array sizeof() sizeof (const struct Point*) main::points Resolving array sizeof() sizeof (const struct Point*) main::points Resolving array sizeof() sizeof (const struct Circle*) main::circles @@ -499,7 +496,7 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@return (const byte) main::NUM_CIRCLES = (const byte) main::NUM_POINTS-(byte) 1 -(const byte) main::NUM_POINTS = (number) 4 +(const byte) main::NUM_POINTS = (byte) 4 (byte) main::idx diff --git a/src/test/ref/sizeof-struct.sym b/src/test/ref/sizeof-struct.sym index 97ab4aff5..6b76b250c 100644 --- a/src/test/ref/sizeof-struct.sym +++ b/src/test/ref/sizeof-struct.sym @@ -11,6 +11,6 @@ (void()) main() (label) main::@return (const byte) main::NUM_CIRCLES = (const byte) main::NUM_POINTS-(byte) 1 -(const byte) main::NUM_POINTS = (number) 4 +(const byte) main::NUM_POINTS = (byte) 4 (byte) main::idx diff --git a/src/test/ref/sizeof-types.log b/src/test/ref/sizeof-types.log index 23e53cdbb..9c090ef93 100644 --- a/src/test/ref/sizeof-types.log +++ b/src/test/ref/sizeof-types.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 *((const byte*) SCREEN + (byte) main::idx#0) ← (byte) '0'+(const byte) SIZEOF_VOID (byte) main::idx#1 ← ++ (byte) main::idx#0 (byte) main::idx#2 ← ++ (byte) main::idx#1 @@ -108,15 +108,8 @@ SYMBOL TABLE SSA (byte) main::idx#8 (byte) main::idx#9 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Constant (const byte) main::idx#0 = 0 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero '0' in [1] *((const byte*) SCREEN + (const byte) main::idx#0) ← (byte) '0'+(const byte) SIZEOF_VOID diff --git a/src/test/ref/static-register-optimization-problem.cfg b/src/test/ref/static-register-optimization-problem.cfg index 06c137ff1..fc52456ba 100644 --- a/src/test/ref/static-register-optimization-problem.cfg +++ b/src/test/ref/static-register-optimization-problem.cfg @@ -13,8 +13,8 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 - [5] (signed word) main::lasti#2 ← phi( main/(signed byte) -1 main::@2/(signed word) main::lasti#1 ) - [5] (signed word) main::i#2 ← phi( main/(signed byte) 0 main::@2/(signed word) main::i#1 ) + [5] (signed word) main::lasti#2 ← phi( main/(signed word) -1 main::@2/(signed word) main::lasti#1 ) + [5] (signed word) main::i#2 ← phi( main/(signed word) 0 main::@2/(signed word) main::i#1 ) [6] if((signed word) main::i#2<(signed byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 diff --git a/src/test/ref/static-register-optimization-problem.log b/src/test/ref/static-register-optimization-problem.log index 55ac99cac..ae20cd2b0 100644 --- a/src/test/ref/static-register-optimization-problem.log +++ b/src/test/ref/static-register-optimization-problem.log @@ -10,8 +10,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (signed word) main::lasti#0 ← (number) -1 - (signed word) main::i#0 ← (number) 0 + (signed word) main::lasti#0 ← (signed word) -1 + (signed word) main::i#0 ← (signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (signed word) main::lasti#3 ← phi( main/(signed word) main::lasti#0 main::@2/(signed word) main::lasti#1 ) @@ -60,20 +60,11 @@ SYMBOL TABLE SSA (signed word) main::lasti#3 (const byte*) main::screen = (byte*)(number) $400 -Adding number conversion cast (snumber) -1 in (signed word) main::lasti#0 ← (number) -1 -Adding number conversion cast (snumber) 0 in (signed word) main::i#0 ← (number) 0 Adding number conversion cast (snumber) $a in (bool~) main::$0 ← (signed word) main::i#2 < (number) $a Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) main::lasti#0 ← (snumber)(number) -1 -Inlining cast (signed word) main::i#0 ← (snumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast -1 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification -Finalized signed number type (signed byte) -1 -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions Alias candidate removed (phi-usage) (signed word) main::i#2 = (signed word) main::i#3 (signed word) main::lasti#1 @@ -92,8 +83,8 @@ Successful SSA optimization Pass2DeInlineWordDerefIdx Alias candidate removed (phi-usage) (signed word) main::lasti#1 = (signed word) main::i#2 Inlining constant with var siblings (const signed word) main::lasti#0 Inlining constant with var siblings (const signed word) main::i#0 -Constant inlined main::i#0 = (signed byte) 0 -Constant inlined main::lasti#0 = (signed byte) -1 +Constant inlined main::i#0 = (signed word) 0 +Constant inlined main::lasti#0 = (signed word) -1 Successful SSA optimization Pass2ConstantInlining Alias candidate removed (phi-usage) (signed word) main::lasti#1 = (signed word) main::i#2 Alias candidate removed (phi-usage) (signed word) main::lasti#1 = (signed word) main::i#2 @@ -131,8 +122,8 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@2 - [5] (signed word) main::lasti#2 ← phi( main/(signed byte) -1 main::@2/(signed word) main::lasti#1 ) - [5] (signed word) main::i#2 ← phi( main/(signed byte) 0 main::@2/(signed word) main::i#1 ) + [5] (signed word) main::lasti#2 ← phi( main/(signed word) -1 main::@2/(signed word) main::lasti#1 ) + [5] (signed word) main::i#2 ← phi( main/(signed word) 0 main::@2/(signed word) main::i#1 ) [6] if((signed word) main::i#2<(signed byte) $a) goto main::@2 to:main::@return main::@return: scope:[main] from main::@1 @@ -208,12 +199,12 @@ main: { .label __2 = 7 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (signed word) main::lasti#2 = (signed byte) -1 [phi:main->main::@1#0] -- vwsz1=vbsc1 + // [5] phi (signed word) main::lasti#2 = (signed word) -1 [phi:main->main::@1#0] -- vwsz1=vwsc1 lda #<-1 sta.z lasti lda #>-1 sta.z lasti+1 - // [5] phi (signed word) main::i#2 = (signed byte) 0 [phi:main->main::@1#1] -- vwsz1=vbsc1 + // [5] phi (signed word) main::i#2 = (signed word) 0 [phi:main->main::@1#1] -- vwsz1=vwsc1 lda #<0 sta.z i lda #>0 @@ -329,12 +320,12 @@ main: { .label __2 = 6 // [5] phi from main to main::@1 [phi:main->main::@1] __b1_from_main: - // [5] phi (signed word) main::lasti#2 = (signed byte) -1 [phi:main->main::@1#0] -- vwsz1=vbsc1 + // [5] phi (signed word) main::lasti#2 = (signed word) -1 [phi:main->main::@1#0] -- vwsz1=vwsc1 lda #<-1 sta.z lasti lda #>-1 sta.z lasti+1 - // [5] phi (signed word) main::i#2 = (signed byte) 0 [phi:main->main::@1#1] -- vwsz1=vbsc1 + // [5] phi (signed word) main::i#2 = (signed word) 0 [phi:main->main::@1#1] -- vwsz1=vwsc1 lda #<0 sta.z i lda #>0 @@ -467,11 +458,11 @@ main: { .label i = 2 .label __2 = 6 // [5] phi from main to main::@1 [phi:main->main::@1] - // [5] phi (signed word) main::lasti#2 = (signed byte) -1 [phi:main->main::@1#0] -- vwsz1=vbsc1 + // [5] phi (signed word) main::lasti#2 = (signed word) -1 [phi:main->main::@1#0] -- vwsz1=vwsc1 lda #<-1 sta.z lasti sta.z lasti+1 - // [5] phi (signed word) main::i#2 = (signed byte) 0 [phi:main->main::@1#1] -- vwsz1=vbsc1 + // [5] phi (signed word) main::i#2 = (signed word) 0 [phi:main->main::@1#1] -- vwsz1=vwsc1 lda #<0 sta.z i sta.z i+1 diff --git a/src/test/ref/string-escapes-0.log b/src/test/ref/string-escapes-0.log index 3bf0a6419..f5084cf36 100644 --- a/src/test/ref/string-escapes-0.log +++ b/src/test/ref/string-escapes-0.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -52,17 +52,12 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (number) 0 != *((const byte*) MESSAGE + (byte) main::i#2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/string-escapes-2.log b/src/test/ref/string-escapes-2.log index 3449225d6..df9d3946e 100644 --- a/src/test/ref/string-escapes-2.log +++ b/src/test/ref/string-escapes-2.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@7 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@7/(byte) main::i#1 ) @@ -73,17 +73,12 @@ world\"pm (byte) main::i#4 (const byte*) memA = (byte*)(number) $ff -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (number) 0 != *((const byte*) MESSAGE + (byte) main::i#2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 255 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/string-pointer-problem.cfg b/src/test/ref/string-pointer-problem.cfg index bdc9195a9..cc012d9b9 100644 --- a/src/test/ref/string-pointer-problem.cfg +++ b/src/test/ref/string-pointer-problem.cfg @@ -22,7 +22,7 @@ set_process_name: scope:[set_process_name] from main [7] phi() to:set_process_name::@1 set_process_name::@1: scope:[set_process_name] from set_process_name set_process_name::@2 - [8] (signed word) set_process_name::j#2 ← phi( set_process_name/(signed byte) 0 set_process_name::@2/(signed word) set_process_name::j#1 ) + [8] (signed word) set_process_name::j#2 ← phi( set_process_name/(signed word) 0 set_process_name::@2/(signed word) set_process_name::j#1 ) [9] if((signed word) set_process_name::j#2<(signed byte) $11) goto set_process_name::@2 to:set_process_name::@return set_process_name::@return: scope:[set_process_name] from set_process_name::@1 diff --git a/src/test/ref/string-pointer-problem.log b/src/test/ref/string-pointer-problem.log index 3e97e37ee..abb3485d3 100644 --- a/src/test/ref/string-pointer-problem.log +++ b/src/test/ref/string-pointer-problem.log @@ -23,7 +23,7 @@ main::@return: scope:[main] from main::@1 (void()) set_process_name((byte*) set_process_name::name) set_process_name: scope:[set_process_name] from main (byte*) set_process_name::name#3 ← phi( main/(byte*) set_process_name::name#0 ) - (signed word) set_process_name::j#0 ← (number) 0 + (signed word) set_process_name::j#0 ← (signed word) 0 to:set_process_name::@1 set_process_name::@1: scope:[set_process_name] from set_process_name set_process_name::@2 (byte*) set_process_name::name#2 ← phi( set_process_name/(byte*) set_process_name::name#3 set_process_name::@2/(byte*) set_process_name::name#1 ) @@ -73,16 +73,11 @@ SYMBOL TABLE SSA (byte*) set_process_name::name#2 (byte*) set_process_name::name#3 -Adding number conversion cast (snumber) 0 in (signed word) set_process_name::j#0 ← (number) 0 Adding number conversion cast (snumber) $11 in (bool~) set_process_name::$0 ← (signed word) set_process_name::j#2 < (number) $11 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) set_process_name::j#0 ← (snumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $11 Successful SSA optimization PassNCastSimplification -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) $11 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) set_process_name::name#1 = (byte*) set_process_name::name#2 @@ -101,7 +96,7 @@ De-inlining pointer[w] to *(pointer+w) [9] *((const byte*) process_name + (sig Successful SSA optimization Pass2DeInlineWordDerefIdx Inlining constant with var siblings (const signed word) set_process_name::j#0 Constant inlined set_process_name::name#0 = (const string) main::name -Constant inlined set_process_name::j#0 = (signed byte) 0 +Constant inlined set_process_name::j#0 = (signed word) 0 Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 @@ -151,7 +146,7 @@ set_process_name: scope:[set_process_name] from main [7] phi() to:set_process_name::@1 set_process_name::@1: scope:[set_process_name] from set_process_name set_process_name::@2 - [8] (signed word) set_process_name::j#2 ← phi( set_process_name/(signed byte) 0 set_process_name::@2/(signed word) set_process_name::j#1 ) + [8] (signed word) set_process_name::j#2 ← phi( set_process_name/(signed word) 0 set_process_name::@2/(signed word) set_process_name::j#1 ) [9] if((signed word) set_process_name::j#2<(signed byte) $11) goto set_process_name::@2 to:set_process_name::@return set_process_name::@return: scope:[set_process_name] from set_process_name::@1 @@ -235,7 +230,7 @@ set_process_name: { .label __2 = 6 // [8] phi from set_process_name to set_process_name::@1 [phi:set_process_name->set_process_name::@1] __b1_from_set_process_name: - // [8] phi (signed word) set_process_name::j#2 = (signed byte) 0 [phi:set_process_name->set_process_name::@1#0] -- vwsz1=vbsc1 + // [8] phi (signed word) set_process_name::j#2 = (signed word) 0 [phi:set_process_name->set_process_name::@1#0] -- vwsz1=vwsc1 lda #<0 sta.z j lda #>0 @@ -358,7 +353,7 @@ set_process_name: { .label __2 = 6 // [8] phi from set_process_name to set_process_name::@1 [phi:set_process_name->set_process_name::@1] __b1_from_set_process_name: - // [8] phi (signed word) set_process_name::j#2 = (signed byte) 0 [phi:set_process_name->set_process_name::@1#0] -- vwsz1=vbsc1 + // [8] phi (signed word) set_process_name::j#2 = (signed word) 0 [phi:set_process_name->set_process_name::@1#0] -- vwsz1=vwsc1 lda #<0 sta.z j lda #>0 @@ -507,7 +502,7 @@ set_process_name: { .label __1 = 4 .label __2 = 6 // [8] phi from set_process_name to set_process_name::@1 [phi:set_process_name->set_process_name::@1] - // [8] phi (signed word) set_process_name::j#2 = (signed byte) 0 [phi:set_process_name->set_process_name::@1#0] -- vwsz1=vbsc1 + // [8] phi (signed word) set_process_name::j#2 = (signed word) 0 [phi:set_process_name->set_process_name::@1#0] -- vwsz1=vwsc1 lda #<0 sta.z j sta.z j+1 diff --git a/src/test/ref/struct-10.log b/src/test/ref/struct-10.log index ed24f9762..7135b81f9 100644 --- a/src/test/ref/struct-10.log +++ b/src/test/ref/struct-10.log @@ -35,7 +35,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const word*) RADIX_DECIMAL_VALUES[] = { (word)(number) $2710, (word)(number) $3e8, (word)(number) $64, (word)(number) $a } +(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a } (word*) RadixInfo::values (const byte) SIZEOF_WORD = (byte) 2 (void()) main() @@ -53,10 +53,6 @@ Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unum Adding number conversion cast (unumber) 1 in (number~) main::$2 ← (number) 1 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast $2710 -Simplifying constant integer cast $3e8 -Simplifying constant integer cast $64 -Simplifying constant integer cast $a Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast 1 Simplifying constant integer cast 0 diff --git a/src/test/ref/struct-11b.log b/src/test/ref/struct-11b.log index c96561ac7..0d4ba90eb 100644 --- a/src/test/ref/struct-11b.log +++ b/src/test/ref/struct-11b.log @@ -33,14 +33,14 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte) idx#3 ← (number) 0 + (byte) idx#3 ← (byte) 0 to:@2 (void()) print_person((dword) print_person::person_id , (byte*) print_person::person_initials) print_person: scope:[print_person] from main main::@1 (byte) idx#18 ← phi( main/(byte) idx#15 main::@1/(byte) idx#0 ) (byte*) print_person::person_initials#4 ← phi( main/(byte*) print_person::person_initials#0 main::@1/(byte*) print_person::person_initials#1 ) - (byte) print_person::i#0 ← (number) 0 + (byte) print_person::i#0 ← (byte) 0 to:print_person::@1 print_person::@1: scope:[print_person] from print_person print_person::@2 (byte) idx#16 ← phi( print_person/(byte) idx#18 print_person::@2/(byte) idx#4 ) @@ -133,21 +133,12 @@ SYMBOL TABLE SSA (byte*) print_person::person_initials#3 (byte*) print_person::person_initials#4 -Adding number conversion cast (unumber) 0 in (byte) idx#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) print_person::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_person::$0 ← (number) 0 != *((byte*) print_person::person_initials#2 + (byte) print_person::i#2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#3 ← (unumber)(number) 0 -Inlining cast (byte) print_person::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#0 = (byte) idx#8 Alias (byte) idx#1 = (byte) idx#9 (byte) idx#10 (byte) idx#2 diff --git a/src/test/ref/struct-16.log b/src/test/ref/struct-16.log index ac9a2bea4..130503b27 100644 --- a/src/test/ref/struct-16.log +++ b/src/test/ref/struct-16.log @@ -1,5 +1,5 @@ -Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) Adding versioned struct unwinding for (struct Point) main::point1 @@ -10,8 +10,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::point1 ← struct-unwound {*((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y)} *((const byte*) SCREEN + (number) 0) ← *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) *((const byte*) SCREEN + (number) 1) ← *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) @@ -44,8 +44,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/struct-18.log b/src/test/ref/struct-18.log index 6502dd7d5..86e344fe2 100644 --- a/src/test/ref/struct-18.log +++ b/src/test/ref/struct-18.log @@ -1,13 +1,13 @@ -Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← { x: (byte)(number) 2, y: (byte)(number) 3 } -Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← { x: (byte)(number) 4, y: (byte)(number) 5 } +Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← { x: (byte) 2, y: (byte) 3 } +Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← { x: (byte) 4, y: (byte) 5 } 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 *((byte*~) main::$0) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*~) main::$1) ← (byte)(number) 3 -Adding struct value member variable copy *((byte*~) main::$2) ← (byte)(number) 4 -Adding struct value member variable copy *((byte*~) main::$3) ← (byte)(number) 5 +Adding struct value member variable copy *((byte*~) main::$0) ← (byte) 2 +Adding struct value member variable copy *((byte*~) main::$1) ← (byte) 3 +Adding struct value member variable copy *((byte*~) main::$2) ← (byte) 4 +Adding struct value member variable copy *((byte*~) main::$3) ← (byte) 5 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 @@ -21,13 +21,13 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$0) ← (byte)(number) 2 + *((byte*~) main::$0) ← (byte) 2 (byte*~) main::$1 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$1) ← (byte)(number) 3 + *((byte*~) main::$1) ← (byte) 3 (byte*~) main::$2 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_X - *((byte*~) main::$2) ← (byte)(number) 4 + *((byte*~) main::$2) ← (byte) 4 (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y - *((byte*~) main::$3) ← (byte)(number) 5 + *((byte*~) main::$3) ← (byte) 5 (struct Vector) main::v ← struct-unwound {*((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P), *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)} (byte*~) main::$4 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$4) @@ -80,10 +80,6 @@ Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2 Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$7) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 diff --git a/src/test/ref/struct-19.log b/src/test/ref/struct-19.log index da03c1463..69fab3019 100644 --- a/src/test/ref/struct-19.log +++ b/src/test/ref/struct-19.log @@ -1,9 +1,9 @@ Adding struct value member variable default initializer *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← {} Adding struct value member variable default initializer *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← {} -Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 -Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 4 -Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 5 +Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 4 +Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 5 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.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) @@ -41,11 +41,11 @@ main: scope:[main] from @1 (byte*~) main::$3 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q + (const byte) OFFSET_STRUCT_POINT_Y *((byte*~) main::$3) ← (byte) 0 (struct Vector) main::v ← struct-unwound {*((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P), *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)} - *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::p1 ← struct-unwound {*((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y)} - *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 4 - *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 5 + *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 4 + *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 5 (struct Point) main::p2 ← struct-unwound {*((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y)} (byte*~) main::$4 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X *((byte*~) main::$4) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) @@ -112,10 +112,6 @@ Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2 Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$11) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 diff --git a/src/test/ref/struct-20.log b/src/test/ref/struct-20.log index 4ac1b2bff..46eb9a0de 100644 --- a/src/test/ref/struct-20.log +++ b/src/test/ref/struct-20.log @@ -1,7 +1,7 @@ -Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 -Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 4 -Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 5 +Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 4 +Adding struct value member variable copy *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 5 Adding struct value list initializer *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← (struct Point) main::p1 Adding struct value list initializer *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_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) @@ -26,11 +26,11 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::p1 ← struct-unwound {*((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_Y)} - *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 4 - *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 5 + *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 4 + *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 5 (struct Point) main::p2 ← struct-unwound {*((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::p2+(const byte) OFFSET_STRUCT_POINT_Y)} (byte*~) main::$0 ← (byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P + (const byte) OFFSET_STRUCT_POINT_X *((byte*~) main::$0) ← *((byte*)&(struct Point) main::p1+(const byte) OFFSET_STRUCT_POINT_X) @@ -94,10 +94,6 @@ Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (number) 2 Adding number conversion cast (unumber) 3 in *((const byte*) SCREEN + (number) 3) ← *((byte*~) main::$7) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 diff --git a/src/test/ref/struct-21.log b/src/test/ref/struct-21.log index 8388645c3..7752ca850 100644 --- a/src/test/ref/struct-21.log +++ b/src/test/ref/struct-21.log @@ -1,6 +1,6 @@ Setting inferred volatile on symbol affected by address-of (struct Point*) main::ptr ← &(struct Point) main::point1 -Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 Rewriting struct pointer member access *((struct Point*) main::ptr).x Rewriting struct pointer member access *((struct Point*) main::ptr).y Identified constant variable (struct Point*) main::ptr @@ -12,8 +12,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::point1 ← struct-unwound {*((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y)} (byte*~) main::$0 ← (byte*)(const struct Point*) main::ptr + (const byte) OFFSET_STRUCT_POINT_X *((const byte*) SCREEN + (number) 0) ← *((byte*~) main::$0) @@ -51,8 +51,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← *((byte*~) main::$1) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log index 92fd712df..4db68c3e5 100644 --- a/src/test/ref/struct-22.log +++ b/src/test/ref/struct-22.log @@ -2,10 +2,10 @@ 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 *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 -Adding struct value member variable copy *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 4 -Adding struct value member variable copy *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 5 +Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 4 +Adding struct value member variable copy *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 5 Converted procedure struct value parameter to member unwinding in call (void~) main::$0 ← call print *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) Converted procedure struct value parameter to member unwinding in call (void~) main::$1 ← call print *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x @@ -20,11 +20,11 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::point1 ← struct-unwound {*((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y)} - *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 4 - *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 5 + *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 4 + *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 5 (struct Point) main::point2 ← struct-unwound {*((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y)} (byte) print::p_x#0 ← *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) (byte) print::p_y#0 ← *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) @@ -90,10 +90,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (number) 0 Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (number) 1) ← (byte) print::p_y#2 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/struct-26.asm b/src/test/ref/struct-26.asm index 9acaf7d51..885853681 100644 --- a/src/test/ref/struct-26.asm +++ b/src/test/ref/struct-26.asm @@ -24,9 +24,9 @@ main: { sta.z point2 ldx #2 !: + lda point1+OFFSET_STRUCT_POINT_INITIALS-1,x + sta point2+OFFSET_STRUCT_POINT_INITIALS-1,x dex - lda point1+OFFSET_STRUCT_POINT_INITIALS,x - sta point2+OFFSET_STRUCT_POINT_INITIALS,x bne !- lda.z point2 sta SCREEN diff --git a/src/test/ref/struct-26.log b/src/test/ref/struct-26.log index 44826923b..284d3c0ea 100644 --- a/src/test/ref/struct-26.log +++ b/src/test/ref/struct-26.log @@ -219,9 +219,9 @@ main: { // [10] *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS) ← memcpy(*((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS), (number) 2) -- _deref_pbuc1=_deref_pbuc2_memcpy__vbuc3 ldx #2 !: + lda point1+OFFSET_STRUCT_POINT_INITIALS-1,x + sta point2+OFFSET_STRUCT_POINT_INITIALS-1,x dex - lda point1+OFFSET_STRUCT_POINT_INITIALS,x - sta point2+OFFSET_STRUCT_POINT_INITIALS,x bne !- // [11] *((const byte*) SCREEN) ← *((byte*)&(struct Point) main::point2) -- _deref_pbuc1=_deref_pbuc2 lda.z point2 @@ -316,9 +316,9 @@ main: { // [10] *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS) ← memcpy(*((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS), (number) 2) -- _deref_pbuc1=_deref_pbuc2_memcpy__vbuc3 ldx #2 !: + lda point1+OFFSET_STRUCT_POINT_INITIALS-1,x + sta point2+OFFSET_STRUCT_POINT_INITIALS-1,x dex - lda point1+OFFSET_STRUCT_POINT_INITIALS,x - sta point2+OFFSET_STRUCT_POINT_INITIALS,x bne !- // [11] *((const byte*) SCREEN) ← *((byte*)&(struct Point) main::point2) -- _deref_pbuc1=_deref_pbuc2 lda.z point2 @@ -426,9 +426,9 @@ main: { // [10] *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS) ← memcpy(*((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS), (number) 2) -- _deref_pbuc1=_deref_pbuc2_memcpy__vbuc3 ldx #2 !: + lda point1+OFFSET_STRUCT_POINT_INITIALS-1,x + sta point2+OFFSET_STRUCT_POINT_INITIALS-1,x dex - lda point1+OFFSET_STRUCT_POINT_INITIALS,x - sta point2+OFFSET_STRUCT_POINT_INITIALS,x bne !- // SCREEN[0] = point2.x // [11] *((const byte*) SCREEN) ← *((byte*)&(struct Point) main::point2) -- _deref_pbuc1=_deref_pbuc2 diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index 4d91cd8e3..b580ecfe2 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -49,7 +49,7 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte) idx#3 ← (number) 0 + (byte) idx#3 ← (byte) 0 to:@2 (void()) print((byte) print::p_x , (byte) print::p_y) @@ -130,23 +130,19 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 1 in (byte) main::p1_x#1 ← (number) 1 Adding number conversion cast (unumber) 4 in (byte) main::p1_y#1 ← (number) 4 Adding number conversion cast (unumber) 2 in (byte) main::p1_x#2 ← (number) 2 -Adding number conversion cast (unumber) 0 in (byte) idx#3 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) main::p1_x#1 ← (unumber)(number) 1 Inlining cast (byte) main::p1_y#1 ← (unumber)(number) 4 Inlining cast (byte) main::p1_x#2 ← (unumber)(number) 2 -Inlining cast (byte) idx#3 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 1 Simplifying constant integer cast 4 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::p1_y#1 = (byte) main::p1_y#2 Alias (byte) idx#0 = (byte) idx#8 diff --git a/src/test/ref/struct-4.log b/src/test/ref/struct-4.log index d185763c0..3acdfcd7d 100644 --- a/src/test/ref/struct-4.log +++ b/src/test/ref/struct-4.log @@ -2,7 +2,7 @@ Created struct value member variable (byte) main::p_x Created struct value member variable (byte) main::p_y Converted struct value to member variables (struct Point) main::p Adding struct value list initializer (byte) main::p_x ← (byte) main::x -Adding struct value list initializer (byte) main::p_y ← (byte)(number~) main::$0 +Adding struct value list initializer (byte) main::p_y ← (number~) main::$0 Replacing struct member reference (struct Point) main::p.x with member unwinding reference (byte) main::p_x Replacing struct member reference (struct Point) main::p.y with member unwinding reference (byte) main::p_y Identified constant variable (byte) main::x @@ -16,7 +16,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (number~) main::$0 ← (const byte) main::y + (number) 1 (byte) main::p_x#0 ← (const byte) main::x - (byte) main::p_y#0 ← (byte)(number~) main::$0 + (byte) main::p_y#0 ← (number~) main::$0 *((const byte*) main::SCREEN + (number) 0) ← (byte) main::p_x#0 *((const byte*) main::SCREEN + (number) 1) ← (byte) main::p_y#0 to:main::@return @@ -63,19 +63,16 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (const byte) main::y + (byte) 1 -Constant right-side identified [0] (byte~) main::$0 ← (const byte) main::y + (byte) 1 +Alias (byte) main::p_y#0 = (byte~) main::$0 +Successful SSA optimization Pass2AliasElimination +Constant right-side identified [0] (byte) main::p_y#0 ← (const byte) main::y + (byte) 1 Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) main::$0 = main::y+1 +Constant (const byte) main::p_y#0 = main::y+1 Constant (const byte) main::p_x#0 = main::x Successful SSA optimization Pass2ConstantIdentification -Constant (const byte) main::p_y#0 = (byte)main::$0 -Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero main::SCREEN in [3] *((const byte*) main::SCREEN + (byte) 0) ← (const byte) main::p_x#0 Successful SSA optimization PassNSimplifyExpressionWithZero -Simplifying constant integer cast (const byte) main::$0 -Successful SSA optimization PassNCastSimplification Constant inlined main::p_x#0 = (const byte) main::x -Constant inlined main::$0 = (const byte) main::y+(byte) 1 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(main::SCREEN+1) Successful SSA optimization Pass2ConstantAdditionElimination diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 3125f8af5..26deb56ff 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -15,8 +15,8 @@ Adding struct value member variable default initializer (byte) main::q_y ← (by Converted procedure call LValue to member unwinding { (byte~) main::$0_x, (byte~) main::$0_y } ← call point Adding struct value member variable copy (byte) main::q_x ← (byte~) main::$0_x Adding struct value member variable copy (byte) main::q_y ← (byte~) main::$0_y -Adding struct value member variable copy (byte) point::p_x ← (byte)(number) 2 -Adding struct value member variable copy (byte) point::p_y ← (byte)(number) 3 +Adding struct value member variable copy (byte) point::p_x ← (byte) 2 +Adding struct value member variable copy (byte) point::p_y ← (byte) 3 Adding struct value member variable copy (byte) point::return_x ← (byte) point::p_x Adding struct value member variable copy (byte) point::return_y ← (byte) point::p_y Adding struct value member variable copy (byte) point::return_x ← (byte) point::return_x @@ -102,8 +102,8 @@ SYMBOL TABLE SSA (byte) main::q_y#1 (struct Point()) point() (label) point::@return -(const byte) point::p_x = (byte)(number) 2 -(const byte) point::p_y = (byte)(number) 3 +(const byte) point::p_x = (byte) 2 +(const byte) point::p_y = (byte) 3 (struct Point) point::return (struct Point) point::return#0 (struct Point) point::return#1 @@ -124,8 +124,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (num Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (byte) main::q_y#1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/struct-6.log b/src/test/ref/struct-6.log index f7e9d646d..5407a13ec 100644 --- a/src/test/ref/struct-6.log +++ b/src/test/ref/struct-6.log @@ -7,10 +7,10 @@ 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)(number) $a -Adding struct value member variable copy (byte) main::p_y ← (byte)(number) $a +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 list initializer (struct Point) main::c_center ← (struct Point) main::p -Adding struct value list initializer (byte) main::c_radius ← (byte)(number) 5 +Adding struct value list initializer (byte) main::c_radius ← (byte) 5 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 @@ -60,18 +60,15 @@ SYMBOL TABLE SSA (byte) main::c_center_x#0 (byte) main::c_center_y (byte) main::c_center_y#0 -(const byte) main::c_radius = (byte)(number) 5 -(const byte) main::p_x = (byte)(number) $a -(const byte) main::p_y = (byte)(number) $a +(const byte) main::c_radius = (byte) 5 +(const byte) main::p_x = (byte) $a +(const byte) main::p_y = (byte) $a Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (byte) main::c_center_x#0 Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (byte) main::c_center_y#0 Adding number conversion cast (unumber) 2 in *((const byte*) main::SCREEN + (number) 2) ← (const byte) main::c_radius Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $a -Simplifying constant integer cast $a -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 diff --git a/src/test/ref/struct-7.log b/src/test/ref/struct-7.log index 0a9095109..2c5724acd 100644 --- a/src/test/ref/struct-7.log +++ b/src/test/ref/struct-7.log @@ -13,28 +13,28 @@ Converted struct value to member variables (struct Point) main::t_c1_center Created struct value member variable (byte) main::t_c2_center_x Created struct value member variable (byte) main::t_c2_center_y Converted struct value to member variables (struct Point) main::t_c2_center -Adding struct value member variable copy (struct Circle) main::t_c1 ← { center: { x: (byte)(number) 1, y: (byte)(number) 2 }, radius: (byte)(number) 3 } -Adding struct value member variable copy (struct Circle) main::t_c2 ← { center: { x: (byte)(number) 4, y: (byte)(number) 5 }, radius: (byte)(number) 6 } +Adding struct value member variable copy (struct Circle) main::t_c1 ← { center: { x: (byte) 1, y: (byte) 2 }, radius: (byte) 3 } +Adding struct value member variable copy (struct Circle) main::t_c2 ← { center: { x: (byte) 4, y: (byte) 5 }, radius: (byte) 6 } Replacing struct member reference (struct TwoCircles) main::t.c1 with member unwinding reference (struct Circle) main::t_c1 Replacing struct member reference (struct TwoCircles) main::t.c1 with member unwinding reference (struct Circle) main::t_c1 Replacing struct member reference (struct TwoCircles) main::t.c1 with member unwinding reference (struct Circle) main::t_c1 Replacing struct member reference (struct TwoCircles) main::t.c2 with member unwinding reference (struct Circle) main::t_c2 Replacing struct member reference (struct TwoCircles) main::t.c2 with member unwinding reference (struct Circle) main::t_c2 Replacing struct member reference (struct TwoCircles) main::t.c2 with member unwinding reference (struct Circle) main::t_c2 -Adding struct value member variable copy (struct Point) main::t_c1_center ← { x: (byte)(number) 1, y: (byte)(number) 2 } -Adding struct value member variable copy (byte) main::t_c1_radius ← (byte)(number) 3 -Adding struct value member variable copy (struct Point) main::t_c2_center ← { x: (byte)(number) 4, y: (byte)(number) 5 } -Adding struct value member variable copy (byte) main::t_c2_radius ← (byte)(number) 6 +Adding struct value member variable copy (struct Point) main::t_c1_center ← { x: (byte) 1, y: (byte) 2 } +Adding struct value member variable copy (byte) main::t_c1_radius ← (byte) 3 +Adding struct value member variable copy (struct Point) main::t_c2_center ← { x: (byte) 4, y: (byte) 5 } +Adding struct value member variable copy (byte) main::t_c2_radius ← (byte) 6 Replacing struct member reference (struct Circle) main::t_c1.center with member unwinding reference (struct Point) main::t_c1_center Replacing struct member reference (struct Circle) main::t_c1.center with member unwinding reference (struct Point) main::t_c1_center Replacing struct member reference (struct Circle) main::t_c1.radius with member unwinding reference (byte) main::t_c1_radius Replacing struct member reference (struct Circle) main::t_c2.center with member unwinding reference (struct Point) main::t_c2_center Replacing struct member reference (struct Circle) main::t_c2.center with member unwinding reference (struct Point) main::t_c2_center Replacing struct member reference (struct Circle) main::t_c2.radius with member unwinding reference (byte) main::t_c2_radius -Adding struct value member variable copy (byte) main::t_c1_center_x ← (byte)(number) 1 -Adding struct value member variable copy (byte) main::t_c1_center_y ← (byte)(number) 2 -Adding struct value member variable copy (byte) main::t_c2_center_x ← (byte)(number) 4 -Adding struct value member variable copy (byte) main::t_c2_center_y ← (byte)(number) 5 +Adding struct value member variable copy (byte) main::t_c1_center_x ← (byte) 1 +Adding struct value member variable copy (byte) main::t_c1_center_y ← (byte) 2 +Adding struct value member variable copy (byte) main::t_c2_center_x ← (byte) 4 +Adding struct value member variable copy (byte) main::t_c2_center_y ← (byte) 5 Replacing struct member reference (struct Point) main::t_c1_center.x with member unwinding reference (byte) main::t_c1_center_x Replacing struct member reference (struct Point) main::t_c1_center.y with member unwinding reference (byte) main::t_c1_center_y Replacing struct member reference (struct Point) main::t_c2_center.x with member unwinding reference (byte) main::t_c2_center_x @@ -83,12 +83,12 @@ SYMBOL TABLE SSA (void()) main() (label) main::@return (const byte*) main::SCREEN = (byte*)(number) $400 -(const byte) main::t_c1_center_x = (byte)(number) 1 -(const byte) main::t_c1_center_y = (byte)(number) 2 -(const byte) main::t_c1_radius = (byte)(number) 3 -(const byte) main::t_c2_center_x = (byte)(number) 4 -(const byte) main::t_c2_center_y = (byte)(number) 5 -(const byte) main::t_c2_radius = (byte)(number) 6 +(const byte) main::t_c1_center_x = (byte) 1 +(const byte) main::t_c1_center_y = (byte) 2 +(const byte) main::t_c1_radius = (byte) 3 +(const byte) main::t_c2_center_x = (byte) 4 +(const byte) main::t_c2_center_y = (byte) 5 +(const byte) main::t_c2_radius = (byte) 6 Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (const byte) main::t_c1_center_x Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (const byte) main::t_c1_center_y @@ -98,12 +98,6 @@ Adding number conversion cast (unumber) 4 in *((const byte*) main::SCREEN + (num Adding number conversion cast (unumber) 5 in *((const byte*) main::SCREEN + (number) 5) ← (const byte) main::t_c2_radius Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 -Simplifying constant integer cast 6 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 diff --git a/src/test/ref/struct-8.log b/src/test/ref/struct-8.log index 7ff786379..fa1414d1a 100644 --- a/src/test/ref/struct-8.log +++ b/src/test/ref/struct-8.log @@ -10,10 +10,10 @@ 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)(number) $a -Adding struct value member variable copy (byte) main::p_y ← (byte)(number) $a +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 list initializer (struct Point) main::c_center ← (struct Point) main::p -Adding struct value list initializer (byte) main::c_radius ← (byte)(number) 5 +Adding struct value list initializer (byte) main::c_radius ← (byte) 5 Replacing struct member reference (struct Circle) main::c.center with member unwinding reference (struct Point) main::c_center 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 @@ -66,9 +66,9 @@ SYMBOL TABLE SSA (byte) main::c_center_x#0 (byte) main::c_center_y (byte) main::c_center_y#0 -(const byte) main::c_radius = (byte)(number) 5 -(const byte) main::p_x = (byte)(number) $a -(const byte) main::p_y = (byte)(number) $a +(const byte) main::c_radius = (byte) 5 +(const byte) main::p_x = (byte) $a +(const byte) main::p_y = (byte) $a (byte) main::point_x (byte) main::point_x#0 (byte) main::point_y @@ -79,9 +79,6 @@ Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (num Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (const byte) main::c_radius Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $a -Simplifying constant integer cast $a -Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 diff --git a/src/test/ref/struct-9.log b/src/test/ref/struct-9.log index bdc35830a..8d9af09c4 100644 --- a/src/test/ref/struct-9.log +++ b/src/test/ref/struct-9.log @@ -7,8 +7,8 @@ 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)(number) $a -Adding struct value member variable copy (byte) main::p_y ← (byte)(number) $a +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 default initializer (struct Point) main::c_center ← {} Adding struct value member variable default initializer (byte) main::c_radius ← (byte) 0 Replacing struct member reference (struct Circle) main::c.center with member unwinding reference (struct Point) main::c_center @@ -72,8 +72,8 @@ SYMBOL TABLE SSA (byte) main::c_radius (byte) main::c_radius#0 (byte) main::c_radius#1 -(const byte) main::p_x = (byte)(number) $a -(const byte) main::p_y = (byte)(number) $a +(const byte) main::p_x = (byte) $a +(const byte) main::p_y = (byte) $a Adding number conversion cast (unumber) $c in (byte) main::c_radius#1 ← (number) $c Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (byte) main::c_center_x#1 @@ -83,8 +83,6 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) main::c_radius#1 ← (unumber)(number) $c Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $a -Simplifying constant integer cast $a Simplifying constant integer cast $c Simplifying constant integer cast 0 Simplifying constant integer cast 1 diff --git a/src/test/ref/struct-ptr-1.log b/src/test/ref/struct-ptr-1.log index 1c427033b..cb812aad4 100644 --- a/src/test/ref/struct-ptr-1.log +++ b/src/test/ref/struct-ptr-1.log @@ -51,11 +51,11 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte) OFFS_X = (number) 0 -(const byte) OFFS_Y = (number) 1 +(const byte) OFFS_X = (byte) 0 +(const byte) OFFS_Y = (byte) 1 (byte) Point::x (byte) Point::y -(const byte) SIZEOF_POINT = (number) 2 +(const byte) SIZEOF_POINT = (byte) 2 (void()) main() (byte~) main::$0 (byte*~) main::$1 @@ -515,7 +515,7 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) OFFS_Y = (number) 1 +(const byte) OFFS_Y = (byte) 1 (byte) Point::x (byte) Point::y (void()) main() diff --git a/src/test/ref/struct-ptr-1.sym b/src/test/ref/struct-ptr-1.sym index e36786d1d..117c28026 100644 --- a/src/test/ref/struct-ptr-1.sym +++ b/src/test/ref/struct-ptr-1.sym @@ -1,7 +1,7 @@ (label) @1 (label) @begin (label) @end -(const byte) OFFS_Y = (number) 1 +(const byte) OFFS_Y = (byte) 1 (byte) Point::x (byte) Point::y (void()) main() diff --git a/src/test/ref/struct-ptr-12-ref.log b/src/test/ref/struct-ptr-12-ref.log index d735265c3..8b0f5662a 100644 --- a/src/test/ref/struct-ptr-12-ref.log +++ b/src/test/ref/struct-ptr-12-ref.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (word) main::p#0 ← (byte)(number) 2*(word) $100+(byte)(number) 3 + (word) main::p#0 ← (byte) 2*(word) $100+(byte) 3 (byte~) main::$0 ← < *((const word*) main::q) *((const byte*) main::SCREEN + (number) 0) ← (byte~) main::$0 (byte~) main::$1 ← > *((const word*) main::q) @@ -41,8 +41,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (num Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (byte~) main::$1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/struct-ptr-12.log b/src/test/ref/struct-ptr-12.log index 8a0bf0b8a..51a324d5e 100644 --- a/src/test/ref/struct-ptr-12.log +++ b/src/test/ref/struct-ptr-12.log @@ -1,6 +1,6 @@ Setting inferred volatile on symbol affected by address-of (struct Point*) main::q ← &(struct Point) main::p -Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 Rewriting struct pointer member access *((struct Point*) main::q).x Rewriting struct pointer member access *((struct Point*) main::q).y Identified constant variable (struct Point*) main::q @@ -12,8 +12,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::p ← struct-unwound {*((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y)} (byte*~) main::$0 ← (byte*)(const struct Point*) main::q + (const byte) OFFSET_STRUCT_POINT_X *((const byte*) main::SCREEN + (number) 0) ← *((byte*~) main::$0) @@ -51,8 +51,6 @@ Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (num Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← *((byte*~) main::$1) Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index 2819aadfd..d586b0c1c 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -1,6 +1,6 @@ Setting inferred volatile on symbol affected by address-of (struct Point*) main::q ← &(struct Point) main::p -Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 -Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 +Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 +Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 Rewriting struct pointer member access *((struct Point*) main::q).x Rewriting struct pointer member access *((struct Point*) main::q).y Rewriting struct pointer member access *((struct Point*) set::ptr).x @@ -15,8 +15,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte)(number) 2 - *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte)(number) 3 + *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) 2 + *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3 (struct Point) main::p ← struct-unwound {*((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_X), *((byte*)&(struct Point) main::p+(const byte) OFFSET_STRUCT_POINT_Y)} (struct Point*) set::ptr#0 ← (const struct Point*) main::q call set @@ -83,8 +83,6 @@ Inlining cast *((byte*~) set::$0) ← (unumber)(number) 4 Inlining cast *((byte*~) set::$1) ← (unumber)(number) 5 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 4 diff --git a/src/test/ref/struct-ptr-15.log b/src/test/ref/struct-ptr-15.log index 4f734b089..10e7968dc 100644 --- a/src/test/ref/struct-ptr-15.log +++ b/src/test/ref/struct-ptr-15.log @@ -49,7 +49,7 @@ main: scope:[main] from @1 (number~) main::$6 ← (number) 1 * (const byte) SIZEOF_STRUCT_CIRCLE (byte*~) main::$12 ← (byte*)(const struct Circle*) circles + (const byte) OFFSET_STRUCT_CIRCLE_RADIUS *((byte*~) main::$12 + (number~) main::$6) ← (number) $f - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (struct Circle*) main::ptr#0 ← (const struct Circle*) circles (byte) main::i#0 ← (byte) 0 to:main::@1 @@ -158,7 +158,6 @@ Adding number conversion cast (unumber) 9 in *((byte*~) main::$18 + (unumber~) m Adding number conversion cast (unumber) 1 in (number~) main::$6 ← (number) 1 * (const byte) SIZEOF_STRUCT_CIRCLE Adding number conversion cast (unumber) main::$6 in (number~) main::$6 ← (unumber)(number) 1 * (const byte) SIZEOF_STRUCT_CIRCLE Adding number conversion cast (unumber) $f in *((byte*~) main::$12 + (unumber~) main::$6) ← (number) $f -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((byte*~) main::$15 + (unumber~) main::$1) ← (unumber)(number) 2 Inlining cast *((byte*~) main::$16 + (unumber~) main::$2) ← (unumber)(number) 3 @@ -166,7 +165,6 @@ Inlining cast *((byte*~) main::$9 + (unumber~) main::$3) ← (unumber)(number) 5 Inlining cast *((byte*~) main::$17 + (unumber~) main::$4) ← (unumber)(number) 8 Inlining cast *((byte*~) main::$18 + (unumber~) main::$5) ← (unumber)(number) 9 Inlining cast *((byte*~) main::$12 + (unumber~) main::$6) ← (unumber)(number) $f -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -181,7 +179,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 9 Simplifying constant integer cast 1 Simplifying constant integer cast $f -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -195,7 +192,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$1 ← (byte) 0 * (const byte) SIZEOF_STRUCT_CIRCLE Inferred type updated to byte in (unumber~) main::$2 ← (byte) 0 * (const byte) SIZEOF_STRUCT_CIRCLE diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index e49f1299e..e40eda3e6 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -18,7 +18,7 @@ Converted procedure call LValue to member unwinding { (byte~) main::$1_x, (byte~ Adding struct value member variable copy *((byte*~) main::$6 + (byte~) main::$3) ← (byte~) main::$1_x Adding struct value member variable copy *((byte*~) main::$7 + (byte~) main::$3) ← (byte~) main::$1_y Adding struct value list initializer (byte) get::p_x ← (byte) get::i -Adding struct value list initializer (byte) get::p_y ← (byte)(number) 7 +Adding struct value list initializer (byte) get::p_y ← (byte) 7 Adding struct value member variable copy (byte) get::return_x ← (byte) get::p_x Adding struct value member variable copy (byte) get::return_y ← (byte) get::p_y Adding struct value member variable copy (byte) get::return_x ← (byte) get::return_x @@ -126,7 +126,7 @@ SYMBOL TABLE SSA (byte) get::i#2 (byte) get::p_x (byte) get::p_x#0 -(const byte) get::p_y = (byte)(number) 7 +(const byte) get::p_y = (byte) 7 (struct Point) get::return (struct Point) get::return#0 (struct Point) get::return#1 @@ -174,7 +174,6 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) get::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (struct Point*) 1024 -Simplifying constant integer cast 7 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index fe0281f86..70318cb42 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -17,7 +17,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) idx#0 ← (number) 0 + (byte) idx#0 ← (byte) 0 to:@2 (void()) main() @@ -141,7 +141,6 @@ SYMBOL TABLE SSA (byte) print::p_y#0 (byte) print::p_y#1 -Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (number~) main::$2 ← (number) 0 * (const byte) SIZEOF_STRUCT_POINT Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (unumber)(number) 0 * (const byte) SIZEOF_STRUCT_POINT Adding number conversion cast (unumber) 1 in *((byte*~) main::$5 + (unumber~) main::$2) ← (number) 1 @@ -151,7 +150,6 @@ Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (unum Adding number conversion cast (unumber) 3 in *((byte*~) main::$7 + (unumber~) main::$3) ← (number) 3 Adding number conversion cast (unumber) 4 in *((byte*~) main::$8 + (unumber~) main::$3) ← (number) 4 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast *((byte*~) main::$5 + (unumber~) main::$2) ← (unumber)(number) 1 Inlining cast *((byte*~) main::$6 + (unumber~) main::$2) ← (unumber)(number) 2 Inlining cast *((byte*~) main::$7 + (unumber~) main::$3) ← (unumber)(number) 3 @@ -159,7 +157,6 @@ Inlining cast *((byte*~) main::$8 + (unumber~) main::$3) ← (unumber)(number) 4 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 @@ -167,7 +164,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast 4 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 899b7774d..a7b653327 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -6,8 +6,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 (byte) main::point_x ← (byte)(number) 1 -Adding struct value member variable copy (byte) main::point_y ← (byte)(number) 2 +Adding struct value member variable copy (byte) main::point_x ← (byte) 1 +Adding struct value member variable copy (byte) main::point_y ← (byte) 2 Converted procedure struct value parameter to member unwinding in call (void~) main::$0 ← call print (byte) main::point_x (byte) main::point_y Converted procedure struct value parameter to member unwinding in call (void~) main::$1 ← call print *((byte*~) main::$2) *((byte*~) main::$3) Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x @@ -18,14 +18,14 @@ Adding versioned struct unwinding for (struct Point) main::point#0 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) idx#0 ← (number) 0 + (byte) idx#0 ← (byte) 0 to:@2 (void()) main() main: scope:[main] from @2 (byte) idx#14 ← phi( @2/(byte) idx#15 ) - (byte) main::point_x#0 ← (byte)(number) 1 - (byte) main::point_y#0 ← (byte)(number) 2 + (byte) main::point_x#0 ← (byte) 1 + (byte) main::point_y#0 ← (byte) 2 (struct Point) main::point#0 ← struct-unwound {(byte) main::point_x#0, (byte) main::point_y#0} (byte) print::p_x#0 ← (byte) main::point_x#0 (byte) print::p_y#0 ← (byte) main::point_y#0 @@ -127,17 +127,8 @@ SYMBOL TABLE SSA (byte) print::p_y#1 (byte) print::p_y#2 -Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#1 = (byte) idx#8 Alias (byte) idx#10 = (byte) idx#2 (byte) idx#9 (byte) idx#3 Alias (byte) idx#12 = (byte) idx#5 (byte) idx#6 diff --git a/src/test/ref/struct-ptr-2.log b/src/test/ref/struct-ptr-2.log index 268d665dd..0d892dd3c 100644 --- a/src/test/ref/struct-ptr-2.log +++ b/src/test/ref/struct-ptr-2.log @@ -59,8 +59,8 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const byte) OFFS_X = (number) 0 -(const byte) OFFS_Y = (number) 1 +(const byte) OFFS_X = (byte) 0 +(const byte) OFFS_Y = (byte) 1 (byte) Point::x (byte) Point::y (const byte) SIZEOF_STRUCT_POINT = (byte) 2 @@ -607,7 +607,7 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) OFFS_Y = (number) 1 +(const byte) OFFS_Y = (byte) 1 (byte) Point::x (byte) Point::y (void()) main() diff --git a/src/test/ref/struct-ptr-2.sym b/src/test/ref/struct-ptr-2.sym index bf8854f8e..b688111a7 100644 --- a/src/test/ref/struct-ptr-2.sym +++ b/src/test/ref/struct-ptr-2.sym @@ -1,7 +1,7 @@ (label) @1 (label) @begin (label) @end -(const byte) OFFS_Y = (number) 1 +(const byte) OFFS_Y = (byte) 1 (byte) Point::x (byte) Point::y (void()) main() diff --git a/src/test/ref/struct-ptr-20.log b/src/test/ref/struct-ptr-20.log index cb3e91050..3cd9e6cf0 100644 --- a/src/test/ref/struct-ptr-20.log +++ b/src/test/ref/struct-ptr-20.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte~) main::$0 ← sizeof (const struct Setting*) settings (byte~) main::$1 ← (byte~) main::$0 / (const byte) SIZEOF_STRUCT_SETTING (byte) main::len#0 ← (byte~) main::$1 @@ -110,22 +110,14 @@ SYMBOL TABLE SSA (struct Setting*) main::setting#3 (struct Setting*) main::setting#4 (struct Setting*) main::setting#5 -(const struct Setting*) settings[] = { { off: (byte)(number) 0, id: (byte) 'a' }, { off: (byte)(number) 1, id: (byte) 'b' }, { off: (byte)(number) 0, id: (byte) 'c' } } +(const struct Setting*) settings[] = { { off: (byte) 0, id: (byte) 'a' }, { off: (byte) 1, id: (byte) 'b' }, { off: (byte) 0, id: (byte) 'c' } } -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$9 ← (number) 0 != *((byte*~) main::$7) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [13] (bool~) main::$4 ← (byte) 0 == *((byte*~) main::$7) from [12] (bool~) main::$9 ← (byte) 0 != *((byte*~) main::$7) Inversing boolean not [14] (bool~) main::$5 ← (byte) 0 != *((byte*~) main::$7) from [13] (bool~) main::$4 ← (byte) 0 == *((byte*~) main::$7) diff --git a/src/test/ref/struct-ptr-21.log b/src/test/ref/struct-ptr-21.log index 99f590642..68a175380 100644 --- a/src/test/ref/struct-ptr-21.log +++ b/src/test/ref/struct-ptr-21.log @@ -17,7 +17,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -68,31 +68,22 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 (const struct Setting*) main::setting = (const struct Setting*) settings+(number) 0*(const byte) SIZEOF_STRUCT_SETTING -(const word*) seq[] = { (word)(number) 1, (word)(number) 2, (word)(number) 3 } -(const struct Setting*) settings[] = { { len: (byte)(number) 3, buf: (const word*) seq+(number) 0*(const byte) SIZEOF_WORD } } +(const word*) seq[] = { (word) 1, (word) 2, (word) 3 } +(const struct Setting*) settings[] = { { len: (byte) 3, buf: (const word*) seq+(number) 0*(const byte) SIZEOF_WORD } } Adding number conversion cast (unumber) 0*SIZEOF_WORD in Adding number conversion cast (unumber) 0 in Adding number conversion cast (unumber) 0*SIZEOF_STRUCT_SETTING in Adding number conversion cast (unumber) 0 in -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 3 Simplifying constant integer cast (unumber)(number) 0*(const byte) SIZEOF_WORD Simplifying constant integer cast 0 Simplifying constant integer cast (unumber)(number) 0*(const byte) SIZEOF_STRUCT_SETTING Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index 858120c71..a06c2a43a 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -38,7 +38,7 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte) idx#3 ← (number) 0 + (byte) idx#3 ← (byte) 0 to:@2 (void()) print_person((struct Person*) print_person::person) @@ -119,7 +119,7 @@ SYMBOL TABLE SSA (struct Person*) main::person#0 (struct Person*) main::person#1 (struct Person*) main::person#2 -(const struct Person*) persons[] = { { id: (byte)(number) 1, initials: (string) "jgr" }, { id: (byte)(number) 8, initials: (string) "hbg" } } +(const struct Person*) persons[] = { { id: (byte) 1, initials: (string) "jgr" }, { id: (byte) 8, initials: (string) "hbg" } } (void()) print_person((struct Person*) print_person::person) (byte~) print_person::$0 (byte*~) print_person::$1 @@ -132,23 +132,16 @@ SYMBOL TABLE SSA (struct Person*) print_person::person#1 (struct Person*) print_person::person#2 -Adding number conversion cast (unumber) 0 in (byte) idx#3 ← (number) 0 Adding number conversion cast (unumber) 0 in *((const byte*) SCREEN + (byte) idx#5) ← *((byte*~) print_person::$2 + (number) 0) Adding number conversion cast (unumber) 1 in *((const byte*) SCREEN + (byte) idx#6) ← *((byte*~) print_person::$3 + (number) 1) Adding number conversion cast (unumber) 2 in *((const byte*) SCREEN + (byte) idx#7) ← *((byte*~) print_person::$4 + (number) 2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#3 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast 8 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index 563b74b11..e2d22d8b3 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -42,7 +42,7 @@ main::@return: scope:[main] from main::@3 return to:@return @1: scope:[] from @begin - (byte) idx#2 ← (number) 0 + (byte) idx#2 ← (byte) 0 to:@2 (void()) print((byte) print::p_x , (signed word) print::p_y) @@ -119,7 +119,7 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 (byte) main::i#3 -(const struct Point*) points[(number) 4] = { { x: (byte)(number) 1, y: (signed word)(number) $83f }, { x: (byte)(number) 3, y: (signed word)(number) $107e } } +(const struct Point*) points[(number) 4] = { { x: (byte) 1, y: (signed word) $83f }, { x: (byte) 3, y: (signed word) $107e } } (void()) print((byte) print::p_x , (signed word) print::p_y) (byte~) print::$0 (byte~) print::$1 @@ -132,19 +132,8 @@ SYMBOL TABLE SSA (signed word) print::p_y#0 (signed word) print::p_y#1 -Adding number conversion cast (unumber) 0 in (byte) idx#2 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#2 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 1 -Simplifying constant integer cast $83f -Simplifying constant integer cast 3 -Simplifying constant integer cast $107e Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) idx#0 = (byte) idx#9 (byte) idx#10 (byte) idx#1 Alias (byte) idx#12 = (byte) idx#6 (byte) idx#7 diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index 8c3e500e8..ecfb0fcff 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -37,7 +37,7 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte) idx#3 ← (number) 0 + (byte) idx#3 ← (byte) 0 to:@2 (void()) print_person((struct Person*) print_person::person) @@ -49,7 +49,7 @@ print_person: scope:[print_person] from main main::@1 (byte) idx#4 ← ++ (byte) idx#13 *((const byte*) SCREEN + (byte) idx#4) ← (byte) ' ' (byte) idx#5 ← ++ (byte) idx#4 - (byte) print_person::i#0 ← (number) 0 + (byte) print_person::i#0 ← (byte) 0 to:print_person::@1 print_person::@1: scope:[print_person] from print_person print_person::@2 (byte) idx#19 ← phi( print_person/(byte) idx#5 print_person::@2/(byte) idx#6 ) @@ -127,7 +127,7 @@ SYMBOL TABLE SSA (label) main::@1 (label) main::@2 (label) main::@return -(const struct Person*) persons[] = { { id: (byte)(number) 4, name: (string) "jesper" }, { id: (byte)(number) 7, name: (string) "henriette" } } +(const struct Person*) persons[] = { { id: (byte) 4, name: (string) "jesper" }, { id: (byte) 7, name: (string) "henriette" } } (void()) print_person((struct Person*) print_person::person) (byte*~) print_person::$0 (byte*~) print_person::$1 @@ -151,26 +151,15 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 1*SIZEOF_STRUCT_PERSON in (struct Person*) print_person::person#1 ← (const struct Person*) persons+(number) 1*(const byte) SIZEOF_STRUCT_PERSON Adding number conversion cast (unumber) 1 in (struct Person*) print_person::person#1 ← (const struct Person*) persons+(unumber)(number) 1*(const byte) SIZEOF_STRUCT_PERSON -Adding number conversion cast (unumber) 0 in (byte) idx#3 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) print_person::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_person::$3 ← (number) 0 != *((byte*~) print_person::$1 + (byte) print_person::i#2) Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#3 ← (unumber)(number) 0 -Inlining cast (byte) print_person::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast (unumber)(number) 1*(const byte) SIZEOF_STRUCT_PERSON Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#0 = (byte) idx#10 Alias (byte) idx#1 = (byte) idx#11 (byte) idx#12 (byte) idx#2 diff --git a/src/test/ref/struct-ptr-33.log b/src/test/ref/struct-ptr-33.log index ca6d45b3a..6b359849d 100644 --- a/src/test/ref/struct-ptr-33.log +++ b/src/test/ref/struct-ptr-33.log @@ -47,17 +47,13 @@ SYMBOL TABLE SSA (struct Person*) main::person (struct Person*) main::person#0 (struct Person*) main::person#1 -(const struct Person*) persons[(number) 2] = { { id: (byte)(number) 7, name: (string) "jesper", age: (word)(number) $141 }, { id: (byte)(number) 9, name: (string) "henry", age: (word)(number) $7b } } +(const struct Person*) persons[(number) 2] = { { id: (byte) 7, name: (string) "jesper", age: (word) $141 }, { id: (byte) 9, name: (string) "henry", age: (word) $7b } } Adding number conversion cast (unumber) 2 in *((const byte*) main::SCREEN + (number) 0) ← *((byte*~) main::$0 + (number) 2) Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← *((byte*~) main::$0 + (unumber)(number) 2) Adding number conversion cast (unumber) 2 in *((const byte*) main::SCREEN + (number) 1) ← *((byte*~) main::$1 + (number) 2) Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← *((byte*~) main::$1 + (unumber)(number) 2) Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast 7 -Simplifying constant integer cast $141 -Simplifying constant integer cast 9 -Simplifying constant integer cast $7b Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 2 Simplifying constant integer cast 0 diff --git a/src/test/ref/struct-ptr-4.log b/src/test/ref/struct-ptr-4.log index 4e417be15..e90315bbe 100644 --- a/src/test/ref/struct-ptr-4.log +++ b/src/test/ref/struct-ptr-4.log @@ -30,7 +30,7 @@ main::@1: scope:[main] from main main::@1 if((bool~) main::$1) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (struct Point*) main::points#2 ← (const struct Point*) POINTS (byte) main::i1#0 ← (byte) 0 to:main::@3 @@ -109,17 +109,12 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 5 in (number~) main::$0 ← (byte) main::i#2 + (number) 5 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 + (unumber)(number) 5 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (struct Point*) 4096 Simplifying constant integer cast 5 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 5 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::i#2 + (byte) 5 Simple Condition (bool~) main::$1 [11] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 diff --git a/src/test/ref/struct-ptr-5.log b/src/test/ref/struct-ptr-5.log index 581edc2cd..3e2a179b6 100644 --- a/src/test/ref/struct-ptr-5.log +++ b/src/test/ref/struct-ptr-5.log @@ -43,7 +43,7 @@ main: scope:[main] from @1 *((struct Entry**~) main::$11) ← ((struct Entry*)) (number) 0 (byte*~) main::$12 ← (byte*)(struct Entry*) main::entry1#0 + (const byte) OFFSET_STRUCT_ENTRY_VALUE *((byte*~) main::$12) ← (number) 3 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (struct Entry*) main::entry#0 ← (const struct Entry*) ENTRIES to:main::@1 main::@1: scope:[main] from main main::@2 @@ -143,13 +143,11 @@ Adding number conversion cast (unumber) main::$6 in (number~) main::$6 ← (unum Adding number conversion cast (unumber) 1 in *((byte*~) main::$8) ← (number) 1 Adding number conversion cast (unumber) 2 in *((byte*~) main::$10) ← (number) 2 Adding number conversion cast (unumber) 3 in *((byte*~) main::$12) ← (number) 3 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((byte*~) main::$8) ← (unumber)(number) 1 Inlining cast *((byte*~) main::$10) ← (unumber)(number) 2 Inlining cast *((struct Entry**~) main::$11) ← (struct Entry*)(number) 0 Inlining cast *((byte*~) main::$12) ← (unumber)(number) 3 -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (struct Entry*) 4096 @@ -159,14 +157,12 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant pointer cast (struct Entry*) 0 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$5 ← (byte) 1 * (const byte) SIZEOF_STRUCT_ENTRY Inferred type updated to byte in (unumber~) main::$6 ← (byte) 2 * (const byte) SIZEOF_STRUCT_ENTRY diff --git a/src/test/ref/struct-ptr-8.log b/src/test/ref/struct-ptr-8.log index 84c6f474a..e65ab6e25 100644 --- a/src/test/ref/struct-ptr-8.log +++ b/src/test/ref/struct-ptr-8.log @@ -31,7 +31,7 @@ main::@1: scope:[main] from main main::@1 if((bool~) main::$2) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 @@ -109,18 +109,13 @@ Adding number conversion cast (unumber) 2 in (number~) main::$0 ← (number) 2 + Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) 2 + (byte) main::i#2 Adding number conversion cast (unumber) 3 in (number~) main::$1 ← (number) 3 + (byte) main::i#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber)(number) 3 + (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) 2 + (byte) main::i#2 Inferred type updated to byte in (unumber~) main::$1 ← (byte) 3 + (byte) main::i#2 diff --git a/src/test/ref/switch-2.log b/src/test/ref/switch-2.log index 31247fdce..4f0736072 100644 --- a/src/test/ref/switch-2.log +++ b/src/test/ref/switch-2.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 if((const byte) main::v64==(number) 0) goto main::@3 to:main::@4 main::@3: scope:[main] from main @@ -45,22 +45,18 @@ SYMBOL TABLE SSA (byte) main::b#2 (const byte) main::v64 = (byte) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) 0 in if((const byte) main::v64==(number) 0) goto main::@3 Adding number conversion cast (unumber) 1 in (byte) main::b#1 ← (number) 1 Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (byte) main::b#2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Inlining cast (byte) main::b#1 ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index b079ec1e1..2f950e944 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -96,15 +96,8 @@ SYMBOL TABLE SSA (byte) sum::return#3 (byte) sum::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sum::return#0 = (byte) sum::return#3 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::b#2 = (byte) main::b#3 diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 0a0d41b82..55288c2b8 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @2 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 @@ -96,15 +96,8 @@ SYMBOL TABLE SSA (byte) sum::return#3 (byte) sum::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sum::return#0 = (byte) sum::return#3 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::b#2 = (byte) main::b#3 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index 815f41a43..cf4999bba 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -331,7 +331,7 @@ main::@15: scope:[main] from main (byte*) print_line_cursor#13 ← phi( main/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#19 ← (byte*) print_char_cursor#46 - (byte) main::s#0 ← (number) 0 + (byte) main::s#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@15 main::@7 @@ -708,19 +708,19 @@ SYMBOL TABLE SSA (label) @44 (label) @begin (label) @end -(const byte) EQ = (number) 4 -(const byte) FF = (number) $57 -(const byte) GE = (number) 3 -(const byte) GT = (number) 2 -(const byte) LE = (number) 1 -(const byte) LT = (number) 0 -(const byte) NE = (number) 5 +(const byte) EQ = (byte) 4 +(const byte) FF = (byte) $57 +(const byte) GE = (byte) 3 +(const byte) GT = (byte) 2 +(const byte) LE = (byte) 1 +(const byte) LT = (byte) 0 +(const byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte) SIZEOF_SIGNED_WORD = (byte) 2 -(const byte) TT = (number) $51 +(const byte) TT = (byte) $51 (void()) compare((signed word) compare::w1 , (signed word) compare::w2 , (byte) compare::op) (bool~) compare::$0 (bool~) compare::$1 @@ -1213,7 +1213,7 @@ SYMBOL TABLE SSA (word) print_word::w#0 (word) print_word::w#1 (word) print_word::w#2 -(const signed word*) swords[] = { (signed word)(number) -$6fed, (signed word)(number) $12, (signed word)(number) $7fed } +(const signed word*) swords[] = { (signed word) -$6fed, (signed word) $12, (signed word) $7fed } Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) @@ -1223,7 +1223,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (bool~) main::$2 ← (byte) main::s#1 == (number) 3 Adding number conversion cast (unumber) 0 in (byte) main::s#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions @@ -1231,12 +1230,8 @@ Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#5 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) main::s#0 ← (unumber)(number) 0 Inlining cast (byte) main::s#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast -$6fed -Simplifying constant integer cast $12 -Simplifying constant integer cast $7fed Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -1245,7 +1240,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification @@ -1256,7 +1250,6 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions @@ -4239,18 +4232,18 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) EQ = (number) 4 -(const byte) FF = (number) $57 -(const byte) GE = (number) 3 -(const byte) GT = (number) 2 -(const byte) LE = (number) 1 -(const byte) LT = (number) 0 -(const byte) NE = (number) 5 +(const byte) EQ = (byte) 4 +(const byte) FF = (byte) $57 +(const byte) GE = (byte) 3 +(const byte) GT = (byte) 2 +(const byte) LE = (byte) 1 +(const byte) LT = (byte) 0 +(const byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) TT = (number) $51 +(const byte) TT = (byte) $51 (void()) compare((signed word) compare::w1 , (signed word) compare::w2 , (byte) compare::op) (label) compare::@1 (label) compare::@10 diff --git a/src/test/ref/test-comparisons-sword.sym b/src/test/ref/test-comparisons-sword.sym index 2e5b42252..5a8a8ac7a 100644 --- a/src/test/ref/test-comparisons-sword.sym +++ b/src/test/ref/test-comparisons-sword.sym @@ -1,18 +1,18 @@ (label) @1 (label) @begin (label) @end -(const byte) EQ = (number) 4 -(const byte) FF = (number) $57 -(const byte) GE = (number) 3 -(const byte) GT = (number) 2 -(const byte) LE = (number) 1 -(const byte) LT = (number) 0 -(const byte) NE = (number) 5 +(const byte) EQ = (byte) 4 +(const byte) FF = (byte) $57 +(const byte) GE = (byte) 3 +(const byte) GT = (byte) 2 +(const byte) LE = (byte) 1 +(const byte) LT = (byte) 0 +(const byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) TT = (number) $51 +(const byte) TT = (byte) $51 (void()) compare((signed word) compare::w1 , (signed word) compare::w2 , (byte) compare::op) (label) compare::@1 (label) compare::@10 diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index e55bb54b2..519834056 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -282,7 +282,7 @@ main::@15: scope:[main] from main (byte*) print_line_cursor#13 ← phi( main/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#39 - (byte) main::s#0 ← (number) 0 + (byte) main::s#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@15 main::@7 @@ -665,13 +665,13 @@ SYMBOL TABLE SSA (label) @44 (label) @begin (label) @end -(const byte) FF = (number) $57 +(const byte) FF = (byte) $57 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const byte) SIZEOF_WORD = (byte) 2 -(const byte) TT = (number) $51 +(const byte) TT = (byte) $51 (void()) compare((word) compare::w1 , (word) compare::w2 , (byte) compare::op) (bool~) compare::$0 (bool~) compare::$1 @@ -1134,7 +1134,7 @@ SYMBOL TABLE SSA (word) print_word::w#1 (word) print_word::w#2 (word) print_word::w#3 -(const word*) words[] = { (word)(number) $12, (word)(number) $3f34, (word)(number) $cfed } +(const word*) words[] = { (word) $12, (word) $3f34, (word) $cfed } Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) @@ -1143,7 +1143,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (bool~) main::$2 ← (byte) main::s#1 == (number) 3 Adding number conversion cast (unumber) 0 in (byte) main::s#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) compare::$0 ← (byte) compare::op#1 == (number) 0 @@ -1156,12 +1155,8 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) main::s#0 ← (unumber)(number) 0 Inlining cast (byte) main::s#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $12 -Simplifying constant integer cast $3f34 -Simplifying constant integer cast $cfed Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -1169,7 +1164,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1185,7 +1179,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -3988,12 +3981,12 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) FF = (number) $57 +(const byte) FF = (byte) $57 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) TT = (number) $51 +(const byte) TT = (byte) $51 (void()) compare((word) compare::w1 , (word) compare::w2 , (byte) compare::op) (label) compare::@1 (label) compare::@10 diff --git a/src/test/ref/test-comparisons-word.sym b/src/test/ref/test-comparisons-word.sym index a7de53ae8..ce9f034df 100644 --- a/src/test/ref/test-comparisons-word.sym +++ b/src/test/ref/test-comparisons-word.sym @@ -1,12 +1,12 @@ (label) @1 (label) @begin (label) @end -(const byte) FF = (number) $57 +(const byte) FF = (byte) $57 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) TT = (number) $51 +(const byte) TT = (byte) $51 (void()) compare((word) compare::w1 , (word) compare::w2 , (byte) compare::op) (label) compare::@1 (label) compare::@10 diff --git a/src/test/ref/test-comparisons.log b/src/test/ref/test-comparisons.log index 679240a40..1a4470217 100644 --- a/src/test/ref/test-comparisons.log +++ b/src/test/ref/test-comparisons.log @@ -235,7 +235,7 @@ main::@45: scope:[main] from main (byte*) print_line_cursor#17 ← phi( main/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#17 (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#57 - (byte) main::a#0 ← (number) 7 + (byte) main::a#0 ← (byte) 7 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@45 main::@70 @@ -1286,7 +1286,7 @@ SYMBOL TABLE SSA (byte) main::b#7 (byte) main::b#8 (byte) main::b#9 -(const byte*) main::cs[(number) 5] = { (byte)(number) 7, (byte)(number) $c7, (byte)(number) $37, (byte)(number) $97, (byte)(number) $67 } +(const byte*) main::cs[(number) 5] = { (byte) 7, (byte) $c7, (byte) $37, (byte) $97, (byte) $67 } (byte) main::i (byte) main::i#0 (byte) main::i#1 @@ -1875,7 +1875,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 7 in (byte) main::a#0 ← (number) 7 Adding number conversion cast (unumber) $ce in (number~) main::$1 ← (number) $ce - (byte) main::a#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber)(number) $ce - (byte) main::a#2 Adding number conversion cast (unumber) $37 in (bool~) main::$5 ← (byte) main::a#4 < (number) $37 @@ -1894,18 +1893,12 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) main::a#0 ← (unumber)(number) 7 Inlining cast (byte) printu::b#1 ← (unumber)(number) $37 Inlining cast (byte) printu::b#5 ← (unumber)(number) $37 Inlining cast (byte) printu::b#9 ← (unumber)(number) $37 Inlining cast (byte) printu::b#13 ← (unumber)(number) $37 Inlining cast (byte) printu::b#17 ← (unumber)(number) $37 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 7 -Simplifying constant integer cast $c7 -Simplifying constant integer cast $37 -Simplifying constant integer cast $97 -Simplifying constant integer cast $67 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -1913,7 +1906,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 -Simplifying constant integer cast 7 Simplifying constant integer cast $ce Simplifying constant integer cast $37 Simplifying constant integer cast $37 @@ -1933,7 +1925,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $ce Finalized unsigned number type (byte) $37 Finalized unsigned number type (byte) $37 diff --git a/src/test/ref/test-division.cfg b/src/test/ref/test-division.cfg index df7de4365..9638aab8f 100644 --- a/src/test/ref/test-division.cfg +++ b/src/test/ref/test-division.cfg @@ -261,7 +261,7 @@ divr16u: scope:[divr16u] from div16u divr16s::@4 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [117] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [117] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [117] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [117] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [117] (word) divr16u::rem#5 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#11 ) [118] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 diff --git a/src/test/ref/test-division.log b/src/test/ref/test-division.log index 6dca5664e..c0c6460a1 100644 --- a/src/test/ref/test-division.log +++ b/src/test/ref/test-division.log @@ -381,7 +381,7 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 (byte*) print_screen#8 ← phi( @13/(byte*) print_screen#0 ) (byte*) print_char_cursor#160 ← phi( @13/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#61 ← phi( @13/(byte*) print_line_cursor#0 ) - (byte) rem8u#0 ← (number) 0 + (byte) rem8u#0 ← (byte) 0 to:@39 (byte()) div8u((byte) div8u::dividend , (byte) div8u::divisor) @@ -415,7 +415,7 @@ divr8u: scope:[divr8u] from div8u (byte) divr8u::divisor#5 ← phi( div8u/(byte) divr8u::divisor#0 ) (byte) divr8u::dividend#4 ← phi( div8u/(byte) divr8u::dividend#0 ) (byte) divr8u::rem#9 ← phi( div8u/(byte) divr8u::rem#0 ) - (byte) divr8u::quotient#0 ← (number) 0 + (byte) divr8u::quotient#0 ← (byte) 0 (byte) divr8u::i#0 ← (byte) 0 to:divr8u::@1 divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 @@ -492,7 +492,7 @@ divr8u::@return: scope:[divr8u] from divr8u::@6 (byte) rem8u#55 ← phi( @37/(byte) rem8u#0 ) (byte*) print_char_cursor#159 ← phi( @37/(byte*) print_char_cursor#160 ) (byte*) print_line_cursor#56 ← phi( @37/(byte*) print_line_cursor#61 ) - (word) rem16u#0 ← (number) 0 + (word) rem16u#0 ← (word) 0 to:@42 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) @@ -500,7 +500,7 @@ divr16u: scope:[divr16u] from div16u divr16s::@4 (word) divr16u::divisor#6 ← phi( div16u/(word) divr16u::divisor#0 divr16s::@4/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div16u/(word) divr16u::dividend#1 divr16s::@4/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div16u/(word) divr16u::rem#3 divr16s::@4/(word) divr16u::rem#4 ) - (word) divr16u::quotient#0 ← (number) 0 + (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 @@ -605,7 +605,7 @@ div16u::@return: scope:[div16u] from div16u::@2 (byte) rem8u#52 ← phi( @39/(byte) rem8u#55 ) (byte*) print_char_cursor#154 ← phi( @39/(byte*) print_char_cursor#159 ) (byte*) print_line_cursor#51 ← phi( @39/(byte*) print_line_cursor#56 ) - (signed byte) rem8s#0 ← (number) 0 + (signed byte) rem8s#0 ← (signed byte) 0 to:@43 (signed byte()) div8s((signed byte) div8s::dividend , (signed byte) div8s::divisor) @@ -613,8 +613,8 @@ div8s: scope:[div8s] from test_8s::@1 (byte) rem8u#60 ← phi( test_8s::@1/(byte) rem8u#39 ) (signed byte) div8s::divisor#6 ← phi( test_8s::@1/(signed byte) div8s::divisor#0 ) (signed byte) div8s::dividend#1 ← phi( test_8s::@1/(signed byte) div8s::dividend#0 ) - (byte) div8s::neg#0 ← (number) 0 - (byte) div8s::dividendu#0 ← (number) 0 + (byte) div8s::neg#0 ← (byte) 0 + (byte) div8s::dividendu#0 ← (byte) 0 (bool~) div8s::$0 ← (signed byte) div8s::dividend#1 < (number) 0 if((bool~) div8s::$0) goto div8s::@1 to:div8s::@7 @@ -640,7 +640,7 @@ div8s::@2: scope:[div8s] from div8s::@1 div8s::@7 (byte) div8s::dividendu#6 ← phi( div8s::@1/(byte) div8s::dividendu#1 div8s::@7/(byte) div8s::dividendu#2 ) (byte) div8s::neg#5 ← phi( div8s::@1/(byte) div8s::neg#1 div8s::@7/(byte) div8s::neg#7 ) (signed byte) div8s::divisor#1 ← phi( div8s::@1/(signed byte) div8s::divisor#4 div8s::@7/(signed byte) div8s::divisor#5 ) - (byte) div8s::divisoru#0 ← (number) 0 + (byte) div8s::divisoru#0 ← (byte) 0 (bool~) div8s::$1 ← (signed byte) div8s::divisor#1 < (number) 0 if((bool~) div8s::$1) goto div8s::@3 to:div8s::@9 @@ -717,7 +717,7 @@ div8s::@return: scope:[div8s] from div8s::@11 div8s::@5 (byte) rem8u#50 ← phi( @42/(byte) rem8u#52 ) (byte*) print_char_cursor#153 ← phi( @42/(byte*) print_char_cursor#154 ) (byte*) print_line_cursor#50 ← phi( @42/(byte*) print_line_cursor#51 ) - (signed word) rem16s#0 ← (number) 0 + (signed word) rem16s#0 ← (signed word) 0 to:@50 (signed word()) divr16s((signed word) divr16s::dividend , (signed word) divr16s::divisor , (signed word) divr16s::rem) @@ -726,9 +726,9 @@ divr16s: scope:[divr16s] from div16s (signed word) divr16s::divisor#6 ← phi( div16s/(signed word) divr16s::divisor#0 ) (signed word) divr16s::rem#1 ← phi( div16s/(signed word) divr16s::rem#0 ) (signed word) divr16s::dividend#1 ← phi( div16s/(signed word) divr16s::dividend#0 ) - (byte) divr16s::neg#0 ← (number) 0 - (word) divr16s::dividendu#0 ← (number) 0 - (word) divr16s::remu#0 ← (number) 0 + (byte) divr16s::neg#0 ← (byte) 0 + (word) divr16s::dividendu#0 ← (word) 0 + (word) divr16s::remu#0 ← (word) 0 (bool~) divr16s::$0 ← (signed word) divr16s::dividend#1 < (number) 0 (bool~) divr16s::$1 ← (signed word) divr16s::rem#1 < (number) 0 (bool~) divr16s::$2 ← (bool~) divr16s::$0 || (bool~) divr16s::$1 @@ -764,7 +764,7 @@ divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7 (word) divr16s::dividendu#6 ← phi( divr16s::@1/(word) divr16s::dividendu#1 divr16s::@7/(word) divr16s::dividendu#2 ) (byte) divr16s::neg#5 ← phi( divr16s::@1/(byte) divr16s::neg#1 divr16s::@7/(byte) divr16s::neg#7 ) (signed word) divr16s::divisor#1 ← phi( divr16s::@1/(signed word) divr16s::divisor#4 divr16s::@7/(signed word) divr16s::divisor#5 ) - (word) divr16s::divisoru#0 ← (number) 0 + (word) divr16s::divisoru#0 ← (word) 0 (bool~) divr16s::$3 ← (signed word) divr16s::divisor#1 < (number) 0 if((bool~) divr16s::$3) goto divr16s::@3 to:divr16s::@9 @@ -2541,13 +2541,13 @@ SYMBOL TABLE SSA (signed word) test_16s::dividend (signed word) test_16s::dividend#0 (signed word) test_16s::dividend#1 -(const signed word*) test_16s::dividends[] = { (signed word)(number) $7fff, (signed word)(number) $7fff, (signed word)(number) -$7fff, (signed word)(number) -$7fff, (signed word)(number) $7fff, (signed word)(number) -$7fff } +(const signed word*) test_16s::dividends[] = { (signed word) $7fff, (signed word) $7fff, (signed word) -$7fff, (signed word) -$7fff, (signed word) $7fff, (signed word) -$7fff } (signed word) test_16s::divisor (signed word) test_16s::divisor#0 (signed word) test_16s::divisor#1 (signed word) test_16s::divisor#2 (signed word) test_16s::divisor#3 -(const signed word*) test_16s::divisors[] = { (signed word)(number) 5, (signed word)(number) -7, (signed word)(number) $b, (signed word)(number) -$d, (signed word)(number) -$11, (signed word)(number) $13 } +(const signed word*) test_16s::divisors[] = { (signed word) 5, (signed word) -7, (signed word) $b, (signed word) -$d, (signed word) -$11, (signed word) $13 } (byte) test_16s::i (byte) test_16s::i#0 (byte) test_16s::i#1 @@ -2589,13 +2589,13 @@ SYMBOL TABLE SSA (word) test_16u::dividend (word) test_16u::dividend#0 (word) test_16u::dividend#1 -(const word*) test_16u::dividends[] = { (word)(number) $ffff, (word)(number) $ffff, (word)(number) $ffff, (word)(number) $ffff, (word)(number) $ffff, (word)(number) $ffff } +(const word*) test_16u::dividends[] = { (word) $ffff, (word) $ffff, (word) $ffff, (word) $ffff, (word) $ffff, (word) $ffff } (word) test_16u::divisor (word) test_16u::divisor#0 (word) test_16u::divisor#1 (word) test_16u::divisor#2 (word) test_16u::divisor#3 -(const word*) test_16u::divisors[] = { (word)(number) 5, (word)(number) 7, (word)(number) $b, (word)(number) $d, (word)(number) $11, (word)(number) $13 } +(const word*) test_16u::divisors[] = { (word) 5, (word) 7, (word) $b, (word) $d, (word) $11, (word) $13 } (byte) test_16u::i (byte) test_16u::i#0 (byte) test_16u::i#1 @@ -2635,13 +2635,13 @@ SYMBOL TABLE SSA (signed byte) test_8s::dividend (signed byte) test_8s::dividend#0 (signed byte) test_8s::dividend#1 -(const signed byte*) test_8s::dividends[] = { (signed byte)(number) $7f, (signed byte)(number) -$7f, (signed byte)(number) -$7f, (signed byte)(number) $7f, (signed byte)(number) $7f, (signed byte)(number) $7f } +(const signed byte*) test_8s::dividends[] = { (signed byte) $7f, (signed byte) -$7f, (signed byte) -$7f, (signed byte) $7f, (signed byte) $7f, (signed byte) $7f } (signed byte) test_8s::divisor (signed byte) test_8s::divisor#0 (signed byte) test_8s::divisor#1 (signed byte) test_8s::divisor#2 (signed byte) test_8s::divisor#3 -(const signed byte*) test_8s::divisors[] = { (signed byte)(number) 5, (signed byte)(number) 7, (signed byte)(number) -$b, (signed byte)(number) -$d, (signed byte)(number) $11, (signed byte)(number) $13 } +(const signed byte*) test_8s::divisors[] = { (signed byte) 5, (signed byte) 7, (signed byte) -$b, (signed byte) -$d, (signed byte) $11, (signed byte) $13 } (byte) test_8s::i (byte) test_8s::i#0 (byte) test_8s::i#1 @@ -2681,13 +2681,13 @@ SYMBOL TABLE SSA (byte) test_8u::dividend (byte) test_8u::dividend#0 (byte) test_8u::dividend#1 -(const byte*) test_8u::dividends[] = { (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff } +(const byte*) test_8u::dividends[] = { (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff, (byte) $ff } (byte) test_8u::divisor (byte) test_8u::divisor#0 (byte) test_8u::divisor#1 (byte) test_8u::divisor#2 (byte) test_8u::divisor#3 -(const byte*) test_8u::divisors[] = { (byte)(number) 5, (byte)(number) 7, (byte)(number) $b, (byte)(number) $d, (byte)(number) $11, (byte)(number) $13 } +(const byte*) test_8u::divisors[] = { (byte) 5, (byte) 7, (byte) $b, (byte) $d, (byte) $11, (byte) $13 } (byte) test_8u::i (byte) test_8u::i#0 (byte) test_8u::i#1 @@ -2720,9 +2720,7 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#8 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#8 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) rem8u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) divr8u::rem#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr8u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte~) divr8u::$0 ← (byte) divr8u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr8u::$1 ← (byte) divr8u::dividend#2 & (number) $80 Adding number conversion cast (unumber) divr8u::$1 in (number~) divr8u::$1 ← (byte) divr8u::dividend#2 & (unumber)(number) $80 @@ -2731,8 +2729,6 @@ Adding number conversion cast (unumber) 1 in (byte~) divr8u::$5 ← (byte) divr8 Adding number conversion cast (unumber) 1 in (byte~) divr8u::$6 ← (byte) divr8u::quotient#3 << (number) 1 Adding number conversion cast (unumber) 1 in (number~) divr8u::$4 ← (byte) divr8u::rem#6 | (number) 1 Adding number conversion cast (unumber) divr8u::$4 in (number~) divr8u::$4 ← (byte) divr8u::rem#6 | (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -2742,24 +2738,15 @@ Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 -Adding number conversion cast (snumber) 0 in (signed byte) rem8s#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) div8s::neg#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) div8s::dividendu#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) div8s::$0 ← (signed byte) div8s::dividend#1 < (number) 0 Adding number conversion cast (unumber) 1 in (byte) div8s::neg#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) div8s::divisoru#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) div8s::$1 ← (signed byte) div8s::divisor#1 < (number) 0 Adding number conversion cast (unumber) 1 in (number~) div8s::$10 ← (byte) div8s::neg#3 ^ (number) 1 Adding number conversion cast (unumber) div8s::$10 in (number~) div8s::$10 ← (byte) div8s::neg#3 ^ (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) div8s::$3 ← (byte) div8s::neg#4 == (number) 0 -Adding number conversion cast (snumber) 0 in (signed word) rem16s#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16s::neg#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16s::dividendu#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) divr16s::remu#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) divr16s::$0 ← (signed word) divr16s::dividend#1 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) divr16s::$1 ← (signed word) divr16s::rem#1 < (number) 0 Adding number conversion cast (unumber) 1 in (byte) divr16s::neg#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (word) divr16s::divisoru#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) divr16s::$3 ← (signed word) divr16s::divisor#1 < (number) 0 Adding number conversion cast (unumber) 1 in (number~) divr16s::$15 ← (byte) divr16s::neg#3 ^ (number) 1 Adding number conversion cast (unumber) divr16s::$15 in (number~) divr16s::$15 ← (byte) divr16s::neg#3 ^ (unumber)(number) 1 @@ -2771,35 +2758,22 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#7 Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#7 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (byte) rem8u#0 ← (unumber)(number) 0 Inlining cast (byte) divr8u::rem#0 ← (unumber)(number) 0 -Inlining cast (byte) divr8u::quotient#0 ← (unumber)(number) 0 -Inlining cast (word) rem16u#0 ← (unumber)(number) 0 -Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 -Inlining cast (signed byte) rem8s#0 ← (snumber)(number) 0 -Inlining cast (byte) div8s::neg#0 ← (unumber)(number) 0 -Inlining cast (byte) div8s::dividendu#0 ← (unumber)(number) 0 Inlining cast (byte~) div8s::$6 ← (byte)(signed byte~) div8s::$5 Inlining cast (byte) div8s::neg#1 ← (unumber)(number) 1 Inlining cast (byte~) div8s::$4 ← (byte)(signed byte) div8s::dividend#3 -Inlining cast (byte) div8s::divisoru#0 ← (unumber)(number) 0 Inlining cast (byte~) div8s::$9 ← (byte)(signed byte~) div8s::$8 Inlining cast (byte~) div8s::$7 ← (byte)(signed byte) div8s::divisor#3 Inlining cast (signed byte~) div8s::$15 ← (signed byte)(byte) rem8u#19 Inlining cast (signed byte~) div8s::$16 ← (signed byte)(byte) div8s::resultu#1 Inlining cast (signed byte~) div8s::$11 ← (signed byte)(byte) rem8u#20 Inlining cast (signed byte~) div8s::$13 ← (signed byte)(byte) div8s::resultu#2 -Inlining cast (signed word) rem16s#0 ← (snumber)(number) 0 -Inlining cast (byte) divr16s::neg#0 ← (unumber)(number) 0 -Inlining cast (word) divr16s::dividendu#0 ← (unumber)(number) 0 -Inlining cast (word) divr16s::remu#0 ← (unumber)(number) 0 Inlining cast (word~) divr16s::$9 ← (word)(signed word~) divr16s::$8 Inlining cast (word~) divr16s::$11 ← (word)(signed word~) divr16s::$10 Inlining cast (byte) divr16s::neg#1 ← (unumber)(number) 1 Inlining cast (word~) divr16s::$6 ← (word)(signed word) divr16s::dividend#3 Inlining cast (word~) divr16s::$7 ← (word)(signed word) divr16s::rem#3 -Inlining cast (word) divr16s::divisoru#0 ← (unumber)(number) 0 Inlining cast (word~) divr16s::$14 ← (word)(signed word~) divr16s::$13 Inlining cast (word~) divr16s::$12 ← (word)(signed word) divr16s::divisor#3 Inlining cast (signed word~) divr16s::$20 ← (signed word)(word) rem16u#21 @@ -2808,54 +2782,6 @@ Inlining cast (signed word~) divr16s::$16 ← (signed word)(word) rem16u#22 Inlining cast (signed word~) divr16s::$18 ← (signed word)(word) divr16s::resultu#2 Inlining cast (signed word) divr16s::rem#0 ← (snumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast $ff -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast $b -Simplifying constant integer cast $d -Simplifying constant integer cast $11 -Simplifying constant integer cast $13 -Simplifying constant integer cast $ffff -Simplifying constant integer cast $ffff -Simplifying constant integer cast $ffff -Simplifying constant integer cast $ffff -Simplifying constant integer cast $ffff -Simplifying constant integer cast $ffff -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast $b -Simplifying constant integer cast $d -Simplifying constant integer cast $11 -Simplifying constant integer cast $13 -Simplifying constant integer cast $7f -Simplifying constant integer cast -$7f -Simplifying constant integer cast -$7f -Simplifying constant integer cast $7f -Simplifying constant integer cast $7f -Simplifying constant integer cast $7f -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 -Simplifying constant integer cast -$b -Simplifying constant integer cast -$d -Simplifying constant integer cast $11 -Simplifying constant integer cast $13 -Simplifying constant integer cast $7fff -Simplifying constant integer cast $7fff -Simplifying constant integer cast -$7fff -Simplifying constant integer cast -$7fff -Simplifying constant integer cast $7fff -Simplifying constant integer cast -$7fff -Simplifying constant integer cast 5 -Simplifying constant integer cast -7 -Simplifying constant integer cast $b -Simplifying constant integer cast -$d -Simplifying constant integer cast -$11 -Simplifying constant integer cast $13 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -2866,8 +2792,12 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast $80 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2877,30 +2807,13 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast $80 -Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2914,16 +2827,12 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2932,22 +2841,13 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 @@ -3582,7 +3482,7 @@ Constant inlined divr16s::neg#0 = (byte) 0 Constant inlined test_16u::i#0 = (byte) 0 Constant inlined test_8u::str2 = (const string) str2 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined divr16u::quotient#0 = (byte) 0 +Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined test_8u::str1 = (const string) str1 Constant inlined test_8u::i#0 = (byte) 0 Constant inlined test_8s::str = (const string) str @@ -4189,7 +4089,7 @@ divr16u: scope:[divr16u] from div16u divr16s::@4 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [117] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) - [117] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) + [117] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [117] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [117] (word) divr16u::rem#5 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#11 ) [118] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 @@ -5858,7 +5758,7 @@ divr16u: { // [117] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [117] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [117] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -8143,7 +8043,7 @@ divr16u: { __b1_from_divr16u: // [117] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [117] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [117] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 @@ -10557,7 +10457,7 @@ divr16u: { // [117] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] // [117] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - // [117] phi (word) divr16u::quotient#3 = (byte) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + // [117] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 diff --git a/src/test/ref/test-interrupt-volatile-write.log b/src/test/ref/test-interrupt-volatile-write.log index d61db72a7..e8838f81d 100644 --- a/src/test/ref/test-interrupt-volatile-write.log +++ b/src/test/ref/test-interrupt-volatile-write.log @@ -10,7 +10,7 @@ Culled Empty Block (label) irq::@4 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) col ← (number) 0 + (byte) col ← (byte) 0 to:@2 (void()) main() @@ -76,24 +76,20 @@ interrupt(KERNEL_MIN)(void()) irq() (label) main::@7 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) col ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) main::$0 ← (byte) col > (number) $a Adding number conversion cast (unumber) 0 in (byte) col ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) irq::$0 ← (byte) col != (number) 0 Adding number conversion cast (unumber) 2 in (byte) col ← (byte) col + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) col ← (unumber)(number) 0 -Inlining cast (byte) col ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53280 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/test-interrupt-volatile.log b/src/test/ref/test-interrupt-volatile.log index f0b02a30f..dbb613b30 100644 --- a/src/test/ref/test-interrupt-volatile.log +++ b/src/test/ref/test-interrupt-volatile.log @@ -7,7 +7,7 @@ Culled Empty Block (label) @1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) col ← (number) 0 + (byte) col ← (byte) 0 to:@2 (void()) main() @@ -54,16 +54,9 @@ interrupt(KERNEL_MIN)(void()) irq() (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) col ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) col ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53280 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions if() condition always true - replacing block destination [2] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return diff --git a/src/test/ref/test-kasm-pc.log b/src/test/ref/test-kasm-pc.log index 7b0224df7..d3d1847cb 100644 --- a/src/test/ref/test-kasm-pc.log +++ b/src/test/ref/test-kasm-pc.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -51,16 +51,9 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination Constant (const byte) main::i#0 = 0 diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index 33ec7b113..22d277e95 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -117,13 +117,13 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) BGCOL = (byte*)(number) $d021 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) CIA1_PORT_A = (byte*)(number) $dc00 (const byte*) CIA1_PORT_A_DDR = (byte*)(number) $dc02 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 (const byte*) CIA1_PORT_B_DDR = (byte*)(number) $dc03 -(const byte) GREEN = (number) 5 -(const byte) KEY_SPACE = (number) $3c +(const byte) GREEN = (byte) 5 +(const byte) KEY_SPACE = (byte) $3c (const byte*) RASTER = (byte*)(number) $d012 (void()) keyboard_init() (label) keyboard_init::@return @@ -148,7 +148,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#4 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -163,7 +163,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() (bool~) main::$1 (byte~) main::$2 @@ -194,22 +194,6 @@ Simplifying constant pointer cast (byte*) 56320 Simplifying constant pointer cast (byte*) 56321 Simplifying constant pointer cast (byte*) 56322 Simplifying constant pointer cast (byte*) 56323 -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 7 @@ -774,13 +758,13 @@ FINAL SYMBOL TABLE (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_A_DDR = (byte*) 56322 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const byte) GREEN = (number) 5 -(const byte) KEY_SPACE = (number) $3c +(const byte) GREEN = (byte) 5 +(const byte) KEY_SPACE = (byte) $3c (const byte*) RASTER = (byte*) 53266 (void()) keyboard_init() (label) keyboard_init::@return diff --git a/src/test/ref/test-keyboard-space.sym b/src/test/ref/test-keyboard-space.sym index f658894ab..d39d83cf3 100644 --- a/src/test/ref/test-keyboard-space.sym +++ b/src/test/ref/test-keyboard-space.sym @@ -2,13 +2,13 @@ (label) @begin (label) @end (const byte*) BGCOL = (byte*) 53281 -(const byte) BLUE = (number) 6 +(const byte) BLUE = (byte) 6 (const byte*) CIA1_PORT_A = (byte*) 56320 (const byte*) CIA1_PORT_A_DDR = (byte*) 56322 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const byte) GREEN = (number) 5 -(const byte) KEY_SPACE = (number) $3c +(const byte) GREEN = (byte) 5 +(const byte) KEY_SPACE = (byte) $3c (const byte*) RASTER = (byte*) 53266 (void()) keyboard_init() (label) keyboard_init::@return diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index ad7d48fe5..6c5ebb668 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -180,7 +180,7 @@ main::@19: scope:[main] from main::@18 (byte*) main::screen#6 ← phi( main::@18/(byte*) main::screen#1 ) (byte*~) main::$10 ← (byte*) main::screen#6 + (number) $28 (byte*) main::screen#2 ← (byte*~) main::$10 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 (byte) main::ch#0 ← (byte) 0 to:main::@20 main::@20: scope:[main] from main::@19 main::@21 @@ -263,58 +263,58 @@ SYMBOL TABLE SSA (const byte*) CIA1_PORT_A_DDR = (byte*)(number) $dc02 (const byte*) CIA1_PORT_B = (byte*)(number) $dc01 (const byte*) CIA1_PORT_B_DDR = (byte*)(number) $dc03 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_5 = (number) $10 -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_9 = (number) $20 -(const byte) KEY_A = (number) $a -(const byte) KEY_ARROW_LEFT = (number) $39 -(const byte) KEY_ARROW_UP = (number) $36 -(const byte) KEY_ASTERISK = (number) $31 -(const byte) KEY_AT = (number) $2e -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_COLON = (number) $2d -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_D = (number) $12 -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_E = (number) $e -(const byte) KEY_EQUALS = (number) $35 -(const byte) KEY_F = (number) $15 -(const byte) KEY_G = (number) $1a -(const byte) KEY_H = (number) $1d -(const byte) KEY_I = (number) $21 -(const byte) KEY_J = (number) $22 -(const byte) KEY_K = (number) $25 -(const byte) KEY_L = (number) $2a -(const byte) KEY_M = (number) $24 -(const byte) KEY_MINUS = (number) $2b -(const byte) KEY_N = (number) $27 -(const byte) KEY_O = (number) $26 -(const byte) KEY_P = (number) $29 -(const byte) KEY_PLUS = (number) $28 -(const byte) KEY_POUND = (number) $30 -(const byte) KEY_Q = (number) $3e -(const byte) KEY_R = (number) $11 -(const byte) KEY_S = (number) $d -(const byte) KEY_SEMICOLON = (number) $32 -(const byte) KEY_SLASH = (number) $37 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_T = (number) $16 -(const byte) KEY_U = (number) $1e -(const byte) KEY_V = (number) $1f -(const byte) KEY_W = (number) 9 -(const byte) KEY_X = (number) $17 -(const byte) KEY_Y = (number) $19 -(const byte) KEY_Z = (number) $c +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_5 = (byte) $10 +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_9 = (byte) $20 +(const byte) KEY_A = (byte) $a +(const byte) KEY_ARROW_LEFT = (byte) $39 +(const byte) KEY_ARROW_UP = (byte) $36 +(const byte) KEY_ASTERISK = (byte) $31 +(const byte) KEY_AT = (byte) $2e +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_COLON = (byte) $2d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_D = (byte) $12 +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_E = (byte) $e +(const byte) KEY_EQUALS = (byte) $35 +(const byte) KEY_F = (byte) $15 +(const byte) KEY_G = (byte) $1a +(const byte) KEY_H = (byte) $1d +(const byte) KEY_I = (byte) $21 +(const byte) KEY_J = (byte) $22 +(const byte) KEY_K = (byte) $25 +(const byte) KEY_L = (byte) $2a +(const byte) KEY_M = (byte) $24 +(const byte) KEY_MINUS = (byte) $2b +(const byte) KEY_N = (byte) $27 +(const byte) KEY_O = (byte) $26 +(const byte) KEY_P = (byte) $29 +(const byte) KEY_PLUS = (byte) $28 +(const byte) KEY_POUND = (byte) $30 +(const byte) KEY_Q = (byte) $3e +(const byte) KEY_R = (byte) $11 +(const byte) KEY_S = (byte) $d +(const byte) KEY_SEMICOLON = (byte) $32 +(const byte) KEY_SLASH = (byte) $37 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_T = (byte) $16 +(const byte) KEY_U = (byte) $1e +(const byte) KEY_V = (byte) $1f +(const byte) KEY_W = (byte) 9 +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Y = (byte) $19 +(const byte) KEY_Z = (byte) $c (const byte*) RASTER = (byte*)(number) $d012 -(const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte)(number) $3f, (const byte) KEY_POUND, (byte)(number) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (byte)(number) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte)(number) $3f, (const byte) KEY_EQUALS, (byte)(number) $3f, (byte)(number) $3f } +(const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte) $3f, (const byte) KEY_POUND, (byte) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte) $3f, (const byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) (label) keyboard_get_keycode::@return (byte) keyboard_get_keycode::ch @@ -349,7 +349,7 @@ SYMBOL TABLE SSA (byte) keyboard_key_pressed::return#4 (byte) keyboard_key_pressed::rowidx (byte) keyboard_key_pressed::rowidx#0 -(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 4, (byte)(number) 8, (byte)(number) $10, (byte)(number) $20, (byte)(number) $40, (byte)(number) $80 } +(const byte*) keyboard_matrix_col_bitmask[(number) 8] = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 } (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) (byte~) keyboard_matrix_read::$0 (label) keyboard_matrix_read::@return @@ -367,7 +367,7 @@ SYMBOL TABLE SSA (byte) keyboard_matrix_read::rowid#0 (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#2 -(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte)(number) $fe, (byte)(number) $fd, (byte)(number) $fb, (byte)(number) $f7, (byte)(number) $ef, (byte)(number) $df, (byte)(number) $bf, (byte)(number) $7f } +(const byte*) keyboard_matrix_row_bitmask[(number) 8] = { (byte) $fe, (byte) $fd, (byte) $fb, (byte) $f7, (byte) $ef, (byte) $df, (byte) $bf, (byte) $7f } (void()) main() (bool~) main::$1 (byte*~) main::$10 @@ -496,50 +496,18 @@ Adding number conversion cast (unumber) 2 in (number~) main::$6 ← (byte) main: Adding number conversion cast (unumber) main::$6 in (number~) main::$6 ← (byte) main::row_pressed_bits#3 * (unumber)(number) 2 Adding number conversion cast (unumber) $28 in (byte*~) main::$8 ← (byte*) main::screen#5 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*~) main::$10 ← (byte*) main::screen#6 + (number) $28 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $3f in (bool~) main::$12 ← (byte) main::key#0 != (number) $3f Adding number conversion cast (unumber) 0 in (bool~) main::$15 ← (byte~) main::$14 != (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$18 ← (byte) main::i#2 < (number) 5 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const byte*) CIA1_PORT_A_DDR) ← (unumber)(number) $ff Inlining cast *((const byte*) CIA1_PORT_B_DDR) ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 56320 Simplifying constant pointer cast (byte*) 56321 Simplifying constant pointer cast (byte*) 56322 Simplifying constant pointer cast (byte*) 56323 -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $3f -Simplifying constant integer cast $fe -Simplifying constant integer cast $fd -Simplifying constant integer cast $fb -Simplifying constant integer cast $f7 -Simplifying constant integer cast $ef -Simplifying constant integer cast $df -Simplifying constant integer cast $bf -Simplifying constant integer cast $7f -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 4 -Simplifying constant integer cast 8 -Simplifying constant integer cast $10 -Simplifying constant integer cast $20 -Simplifying constant integer cast $40 -Simplifying constant integer cast $80 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 7 @@ -552,7 +520,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $28 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 Simplifying constant integer cast $3f Simplifying constant integer cast 0 Simplifying constant integer cast 5 @@ -567,7 +534,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 @@ -2119,56 +2085,56 @@ FINAL SYMBOL TABLE (const byte*) CIA1_PORT_A_DDR = (byte*) 56322 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_5 = (number) $10 -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_9 = (number) $20 -(const byte) KEY_A = (number) $a -(const byte) KEY_ARROW_LEFT = (number) $39 -(const byte) KEY_ARROW_UP = (number) $36 -(const byte) KEY_ASTERISK = (number) $31 -(const byte) KEY_AT = (number) $2e -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_COLON = (number) $2d -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_D = (number) $12 -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_E = (number) $e -(const byte) KEY_EQUALS = (number) $35 -(const byte) KEY_F = (number) $15 -(const byte) KEY_G = (number) $1a -(const byte) KEY_H = (number) $1d -(const byte) KEY_I = (number) $21 -(const byte) KEY_J = (number) $22 -(const byte) KEY_K = (number) $25 -(const byte) KEY_L = (number) $2a -(const byte) KEY_M = (number) $24 -(const byte) KEY_MINUS = (number) $2b -(const byte) KEY_N = (number) $27 -(const byte) KEY_O = (number) $26 -(const byte) KEY_P = (number) $29 -(const byte) KEY_PLUS = (number) $28 -(const byte) KEY_POUND = (number) $30 -(const byte) KEY_Q = (number) $3e -(const byte) KEY_R = (number) $11 -(const byte) KEY_S = (number) $d -(const byte) KEY_SEMICOLON = (number) $32 -(const byte) KEY_SLASH = (number) $37 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_T = (number) $16 -(const byte) KEY_U = (number) $1e -(const byte) KEY_V = (number) $1f -(const byte) KEY_W = (number) 9 -(const byte) KEY_X = (number) $17 -(const byte) KEY_Y = (number) $19 -(const byte) KEY_Z = (number) $c +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_5 = (byte) $10 +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_9 = (byte) $20 +(const byte) KEY_A = (byte) $a +(const byte) KEY_ARROW_LEFT = (byte) $39 +(const byte) KEY_ARROW_UP = (byte) $36 +(const byte) KEY_ASTERISK = (byte) $31 +(const byte) KEY_AT = (byte) $2e +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_COLON = (byte) $2d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_D = (byte) $12 +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_E = (byte) $e +(const byte) KEY_EQUALS = (byte) $35 +(const byte) KEY_F = (byte) $15 +(const byte) KEY_G = (byte) $1a +(const byte) KEY_H = (byte) $1d +(const byte) KEY_I = (byte) $21 +(const byte) KEY_J = (byte) $22 +(const byte) KEY_K = (byte) $25 +(const byte) KEY_L = (byte) $2a +(const byte) KEY_M = (byte) $24 +(const byte) KEY_MINUS = (byte) $2b +(const byte) KEY_N = (byte) $27 +(const byte) KEY_O = (byte) $26 +(const byte) KEY_P = (byte) $29 +(const byte) KEY_PLUS = (byte) $28 +(const byte) KEY_POUND = (byte) $30 +(const byte) KEY_Q = (byte) $3e +(const byte) KEY_R = (byte) $11 +(const byte) KEY_S = (byte) $d +(const byte) KEY_SEMICOLON = (byte) $32 +(const byte) KEY_SLASH = (byte) $37 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_T = (byte) $16 +(const byte) KEY_U = (byte) $1e +(const byte) KEY_V = (byte) $1f +(const byte) KEY_W = (byte) 9 +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Y = (byte) $19 +(const byte) KEY_Z = (byte) $c (const byte*) RASTER = (byte*) 53266 (const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte) $3f, (const byte) KEY_POUND, (byte) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte) $3f, (const byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) diff --git a/src/test/ref/test-keyboard.sym b/src/test/ref/test-keyboard.sym index b5b5c478a..6c98c5cd0 100644 --- a/src/test/ref/test-keyboard.sym +++ b/src/test/ref/test-keyboard.sym @@ -5,56 +5,56 @@ (const byte*) CIA1_PORT_A_DDR = (byte*) 56322 (const byte*) CIA1_PORT_B = (byte*) 56321 (const byte*) CIA1_PORT_B_DDR = (byte*) 56323 -(const byte) KEY_0 = (number) $23 -(const byte) KEY_1 = (number) $38 -(const byte) KEY_2 = (number) $3b -(const byte) KEY_3 = (number) 8 -(const byte) KEY_4 = (number) $b -(const byte) KEY_5 = (number) $10 -(const byte) KEY_6 = (number) $13 -(const byte) KEY_7 = (number) $18 -(const byte) KEY_8 = (number) $1b -(const byte) KEY_9 = (number) $20 -(const byte) KEY_A = (number) $a -(const byte) KEY_ARROW_LEFT = (number) $39 -(const byte) KEY_ARROW_UP = (number) $36 -(const byte) KEY_ASTERISK = (number) $31 -(const byte) KEY_AT = (number) $2e -(const byte) KEY_B = (number) $1c -(const byte) KEY_C = (number) $14 -(const byte) KEY_COLON = (number) $2d -(const byte) KEY_COMMA = (number) $2f -(const byte) KEY_D = (number) $12 -(const byte) KEY_DOT = (number) $2c -(const byte) KEY_E = (number) $e -(const byte) KEY_EQUALS = (number) $35 -(const byte) KEY_F = (number) $15 -(const byte) KEY_G = (number) $1a -(const byte) KEY_H = (number) $1d -(const byte) KEY_I = (number) $21 -(const byte) KEY_J = (number) $22 -(const byte) KEY_K = (number) $25 -(const byte) KEY_L = (number) $2a -(const byte) KEY_M = (number) $24 -(const byte) KEY_MINUS = (number) $2b -(const byte) KEY_N = (number) $27 -(const byte) KEY_O = (number) $26 -(const byte) KEY_P = (number) $29 -(const byte) KEY_PLUS = (number) $28 -(const byte) KEY_POUND = (number) $30 -(const byte) KEY_Q = (number) $3e -(const byte) KEY_R = (number) $11 -(const byte) KEY_S = (number) $d -(const byte) KEY_SEMICOLON = (number) $32 -(const byte) KEY_SLASH = (number) $37 -(const byte) KEY_SPACE = (number) $3c -(const byte) KEY_T = (number) $16 -(const byte) KEY_U = (number) $1e -(const byte) KEY_V = (number) $1f -(const byte) KEY_W = (number) 9 -(const byte) KEY_X = (number) $17 -(const byte) KEY_Y = (number) $19 -(const byte) KEY_Z = (number) $c +(const byte) KEY_0 = (byte) $23 +(const byte) KEY_1 = (byte) $38 +(const byte) KEY_2 = (byte) $3b +(const byte) KEY_3 = (byte) 8 +(const byte) KEY_4 = (byte) $b +(const byte) KEY_5 = (byte) $10 +(const byte) KEY_6 = (byte) $13 +(const byte) KEY_7 = (byte) $18 +(const byte) KEY_8 = (byte) $1b +(const byte) KEY_9 = (byte) $20 +(const byte) KEY_A = (byte) $a +(const byte) KEY_ARROW_LEFT = (byte) $39 +(const byte) KEY_ARROW_UP = (byte) $36 +(const byte) KEY_ASTERISK = (byte) $31 +(const byte) KEY_AT = (byte) $2e +(const byte) KEY_B = (byte) $1c +(const byte) KEY_C = (byte) $14 +(const byte) KEY_COLON = (byte) $2d +(const byte) KEY_COMMA = (byte) $2f +(const byte) KEY_D = (byte) $12 +(const byte) KEY_DOT = (byte) $2c +(const byte) KEY_E = (byte) $e +(const byte) KEY_EQUALS = (byte) $35 +(const byte) KEY_F = (byte) $15 +(const byte) KEY_G = (byte) $1a +(const byte) KEY_H = (byte) $1d +(const byte) KEY_I = (byte) $21 +(const byte) KEY_J = (byte) $22 +(const byte) KEY_K = (byte) $25 +(const byte) KEY_L = (byte) $2a +(const byte) KEY_M = (byte) $24 +(const byte) KEY_MINUS = (byte) $2b +(const byte) KEY_N = (byte) $27 +(const byte) KEY_O = (byte) $26 +(const byte) KEY_P = (byte) $29 +(const byte) KEY_PLUS = (byte) $28 +(const byte) KEY_POUND = (byte) $30 +(const byte) KEY_Q = (byte) $3e +(const byte) KEY_R = (byte) $11 +(const byte) KEY_S = (byte) $d +(const byte) KEY_SEMICOLON = (byte) $32 +(const byte) KEY_SLASH = (byte) $37 +(const byte) KEY_SPACE = (byte) $3c +(const byte) KEY_T = (byte) $16 +(const byte) KEY_U = (byte) $1e +(const byte) KEY_V = (byte) $1f +(const byte) KEY_W = (byte) 9 +(const byte) KEY_X = (byte) $17 +(const byte) KEY_Y = (byte) $19 +(const byte) KEY_Z = (byte) $c (const byte*) RASTER = (byte*) 53266 (const byte*) keyboard_char_keycodes[] = { (const byte) KEY_AT, (const byte) KEY_A, (const byte) KEY_B, (const byte) KEY_C, (const byte) KEY_D, (const byte) KEY_E, (const byte) KEY_F, (const byte) KEY_G, (const byte) KEY_H, (const byte) KEY_I, (const byte) KEY_J, (const byte) KEY_K, (const byte) KEY_L, (const byte) KEY_M, (const byte) KEY_N, (const byte) KEY_O, (const byte) KEY_P, (const byte) KEY_Q, (const byte) KEY_R, (const byte) KEY_S, (const byte) KEY_T, (const byte) KEY_U, (const byte) KEY_V, (const byte) KEY_W, (const byte) KEY_X, (const byte) KEY_Y, (const byte) KEY_Z, (byte) $3f, (const byte) KEY_POUND, (byte) $3f, (const byte) KEY_ARROW_UP, (const byte) KEY_ARROW_LEFT, (const byte) KEY_SPACE, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (byte) $3f, (const byte) KEY_ASTERISK, (const byte) KEY_PLUS, (const byte) KEY_COMMA, (const byte) KEY_MINUS, (const byte) KEY_DOT, (const byte) KEY_SLASH, (const byte) KEY_0, (const byte) KEY_1, (const byte) KEY_2, (const byte) KEY_3, (const byte) KEY_4, (const byte) KEY_5, (const byte) KEY_6, (const byte) KEY_7, (const byte) KEY_8, (const byte) KEY_9, (const byte) KEY_COLON, (const byte) KEY_SEMICOLON, (byte) $3f, (const byte) KEY_EQUALS, (byte) $3f, (byte) $3f } (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) diff --git a/src/test/ref/test-lohiconst.log b/src/test/ref/test-lohiconst.log index b459c1826..efed41bd0 100644 --- a/src/test/ref/test-lohiconst.log +++ b/src/test/ref/test-lohiconst.log @@ -26,7 +26,7 @@ SYMBOL TABLE SSA (label) @2 (label) @begin (label) @end -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI_u4f28 = (dword) $3243f6a9 (void()) main() (label) main::@return (const byte*) main::SCREEN = (byte*)(number) $400 @@ -225,7 +225,7 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI_u4f28 = (dword) $3243f6a9 (void()) main() (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 diff --git a/src/test/ref/test-lohiconst.sym b/src/test/ref/test-lohiconst.sym index 40325c443..48a29f2ce 100644 --- a/src/test/ref/test-lohiconst.sym +++ b/src/test/ref/test-lohiconst.sym @@ -1,7 +1,7 @@ (label) @1 (label) @begin (label) @end -(const dword) PI_u4f28 = (number) $3243f6a9 +(const dword) PI_u4f28 = (dword) $3243f6a9 (void()) main() (label) main::@return (const byte*) main::SCREEN = (byte*) 1024 diff --git a/src/test/ref/test-lowhigh.log b/src/test/ref/test-lowhigh.log index 9ed3f3917..722b0d51b 100644 --- a/src/test/ref/test-lowhigh.log +++ b/src/test/ref/test-lowhigh.log @@ -260,7 +260,7 @@ main::@7: scope:[main] from main (byte*) print_line_cursor#13 ← phi( main/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#47 - (dword) main::dw#0 ← (number) $12345678 + (dword) main::dw#0 ← (dword) $12345678 to:main::@1 main::@1: scope:[main] from main::@21 main::@7 (byte*) print_char_cursor#70 ← phi( main::@21/(byte*) print_char_cursor#30 main::@7/(byte*) print_char_cursor#16 ) @@ -744,7 +744,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#7 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#7 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) $12345678 in (dword) main::dw#0 ← (number) $12345678 Adding number conversion cast (unumber) $12345690 in (bool~) main::$1 ← (dword) main::dw#2 != (number) $12345690 Adding number conversion cast (unumber) $1111 in (number~) main::$4 ← (word~) main::$3 + (number) $1111 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (word~) main::$3 + (unumber)(number) $1111 @@ -756,7 +755,6 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (dword) main::dw#0 ← (unumber)(number) $12345678 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 @@ -764,7 +762,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 -Simplifying constant integer cast $12345678 Simplifying constant integer cast $12345690 Simplifying constant integer cast $1111 Simplifying constant integer cast $1111 @@ -774,7 +771,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (dword) $12345678 Finalized unsigned number type (dword) $12345690 Finalized unsigned number type (word) $1111 Finalized unsigned number type (word) $1111 diff --git a/src/test/ref/test-multiply-16bit.asm b/src/test/ref/test-multiply-16bit.asm index 8583d43c9..73caf9b46 100644 --- a/src/test/ref/test-multiply-16bit.asm +++ b/src/test/ref/test-multiply-16bit.asm @@ -146,9 +146,9 @@ print_ln: { rts } // Print a zero-terminated string -// print_str(byte* zp($1a) str) +// print_str(byte* zp($1c) str) print_str: { - .label str = $1a + .label str = $1c __b1: ldy #0 lda (str),y @@ -347,10 +347,10 @@ print_sword: { // Fixes offsets introduced by using unsigned multiplication // mulf16s(signed word zp($e) a, signed word zp($10) b) mulf16s: { - .label __9 = $1c - .label __13 = $1e - .label __16 = $1c - .label __17 = $1e + .label __9 = $18 + .label __13 = $1a + .label __16 = $18 + .label __17 = $1a .label m = $a .label return = $a .label a = $e @@ -404,14 +404,14 @@ mulf16s: { } // Fast multiply two unsigned words to a double word result // Done in assembler to utilize fast addition A+X -// mulf16u(word zp($1c) a, word zp($1e) b) +// mulf16u(word zp($18) a, word zp($1a) b) mulf16u: { .label memA = $f8 .label memB = $fa .label memR = $fc .label return = $a - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a lda.z a sta memA lda.z a+1 @@ -526,10 +526,10 @@ mulf16u: { // Fixes offsets introduced by using unsigned multiplication // mul16s(signed word zp($e) a, signed word zp($10) b) mul16s: { - .label __9 = $1c - .label __13 = $1e - .label __16 = $1c - .label __17 = $1e + .label __9 = $1a + .label __13 = $1c + .label __16 = $1a + .label __17 = $1c .label m = 6 .label return = 6 .label a = $e @@ -542,13 +542,6 @@ mul16s: { sta.z mul16u.b lda.z b+1 sta.z mul16u.b+1 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u lda.z a+1 bpl __b1 @@ -589,18 +582,25 @@ mul16s: { rts } // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($17) a, word zp($1a) b) +// mul16u(word zp($1c) a, word zp($1a) b) mul16u: { .label mb = $a - .label a = $17 + .label a = $1c .label res = 6 .label b = $1a .label return = 6 - .label b_1 = $1e + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 __b1: lda.z a @@ -640,9 +640,9 @@ mul16u: { // muls16s(signed word zp($e) a, signed word zp($10) b) muls16s: { .label m = 2 - .label j = $1c + .label j = $18 .label return = 2 - .label i = $1e + .label i = $1a .label a = $e .label b = $10 lda.z a+1 @@ -652,11 +652,14 @@ muls16s: { lda.z a beq b2 !: - lda #0 + lda #<0 sta.z m sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 + lda #<0 sta.z j sta.z j+1 __b3: @@ -668,10 +671,12 @@ muls16s: { bne __b4 rts b2: - lda #0 + lda #<0 sta.z return sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 rts __b4: @@ -700,11 +705,14 @@ muls16s: { !: jmp __b3 b3: - lda #0 + lda #<0 sta.z m sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 + lda #<0 sta.z i sta.z i+1 __b5: @@ -744,8 +752,8 @@ muls16s: { } // Perform many possible word multiplications (slow and fast) and compare the results mul16u_compare: { - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a .label ms = 2 .label mn = 6 .label mf = $a @@ -787,13 +795,6 @@ mul16u_compare: { sta.z mul16u.a lda.z a+1 sta.z mul16u.a+1 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 jsr mul16u jsr mulf16u lda.z ms @@ -842,9 +843,7 @@ mul16u_compare: { __b5: iny cpy #$10 - beq !__b2+ - jmp __b2 - !__b2: + bne __b2 inc.z i lda #$10 cmp.z i @@ -870,10 +869,10 @@ mul16u_compare: { str1: .text "word multiply results match!" .byte 0 } -// mul16u_error(word zp($e) a, word zp($1e) b, dword zp(2) ms, dword zp(6) mn, dword zp($a) mf) +// mul16u_error(word zp($e) a, word zp($1a) b, dword zp(2) ms, dword zp(6) mn, dword zp($a) mf) mul16u_error: { .label a = $e - .label b = $1e + .label b = $1a .label ms = 2 .label mn = 6 .label mf = $a @@ -938,23 +937,26 @@ mul16u_error: { } // Slow multiplication of unsigned words // Calculate an unsigned multiplication by repeated addition -// muls16u(word zp($1c) a, word zp($1e) b) +// muls16u(word zp($18) a, word zp($1a) b) muls16u: { .label return = 2 .label m = 2 .label i = $e - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a lda.z a bne !+ lda.z a+1 beq b1 !: - lda #0 + lda #<0 sta.z m sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 + lda #<0 sta.z i sta.z i+1 __b2: @@ -966,10 +968,12 @@ muls16u: { bne __b3 rts b1: - lda #0 + lda #<0 sta.z return sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 rts __b3: @@ -999,13 +1003,13 @@ mulf_init: { // Counter used for determining x%2==0 .label sqr1_hi = $13 // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $1a + .label sqr = $18 .label sqr1_lo = $10 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = $17 + .label sqr2_hi = $1c .label sqr2_lo = $15 //Start with g(0)=f(255) - .label dir = $19 + .label dir = $17 ldx #0 lda #str diff --git a/src/test/ref/test-multiply-16bit.cfg b/src/test/ref/test-multiply-16bit.cfg index e997fa08b..c4782afc9 100644 --- a/src/test/ref/test-multiply-16bit.cfg +++ b/src/test/ref/test-multiply-16bit.cfg @@ -388,300 +388,301 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mul16u_compare::@10 [180] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mul16u_compare::@10/(word) mul16u::a#2 ) - [180] (dword) mul16u::mb#0 ← phi( mul16s/(word) mul16u::b#0 mul16u_compare::@10/(word) mul16u::b#1 ) + [180] (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mul16u_compare::@10/(word) mul16u::b#1 ) + [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [181] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [181] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [181] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [182] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [182] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [182] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [183] return + [184] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [185] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [186] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [187] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [188] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [189] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [188] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [189] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [190] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (signed dword()) muls16s((signed word) muls16s::a , (signed word) muls16s::b) muls16s: scope:[muls16s] from mul16s_compare::@2 - [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 + [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 to:muls16s::@2 muls16s::@2: scope:[muls16s] from muls16s - [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 + [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 to:muls16s::@3 muls16s::@3: scope:[muls16s] from muls16s::@2 muls16s::@4 - [192] (signed dword) muls16s::m#3 ← phi( muls16s::@2/(signed byte) 0 muls16s::@4/(signed dword) muls16s::m#1 ) - [192] (signed word) muls16s::j#2 ← phi( muls16s::@2/(signed byte) 0 muls16s::@4/(signed word) muls16s::j#1 ) - [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 + [193] (signed dword) muls16s::m#3 ← phi( muls16s::@2/(signed dword) 0 muls16s::@4/(signed dword) muls16s::m#1 ) + [193] (signed word) muls16s::j#2 ← phi( muls16s::@2/(signed word) 0 muls16s::@4/(signed word) muls16s::j#1 ) + [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 to:muls16s::@1 muls16s::@1: scope:[muls16s] from muls16s::@2 muls16s::@3 muls16s::@5 - [194] (signed dword) muls16s::return#0 ← phi( muls16s::@5/(signed dword) muls16s::m#5 muls16s::@2/(signed byte) 0 muls16s::@3/(signed dword) muls16s::m#3 ) + [195] (signed dword) muls16s::return#0 ← phi( muls16s::@5/(signed dword) muls16s::m#5 muls16s::@2/(signed dword) 0 muls16s::@3/(signed dword) muls16s::m#3 ) to:muls16s::@return muls16s::@return: scope:[muls16s] from muls16s::@1 - [195] return + [196] return to:@return muls16s::@4: scope:[muls16s] from muls16s::@3 - [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 - [197] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 + [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 + [198] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 to:muls16s::@3 muls16s::@5: scope:[muls16s] from muls16s muls16s::@6 - [198] (signed dword) muls16s::m#5 ← phi( muls16s/(signed byte) 0 muls16s::@6/(signed dword) muls16s::m#2 ) - [198] (signed word) muls16s::i#2 ← phi( muls16s/(signed byte) 0 muls16s::@6/(signed word) muls16s::i#1 ) - [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 + [199] (signed dword) muls16s::m#5 ← phi( muls16s/(signed dword) 0 muls16s::@6/(signed dword) muls16s::m#2 ) + [199] (signed word) muls16s::i#2 ← phi( muls16s/(signed word) 0 muls16s::@6/(signed word) muls16s::i#1 ) + [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 to:muls16s::@1 muls16s::@6: scope:[muls16s] from muls16s::@5 - [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 - [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 + [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 + [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 to:muls16s::@5 (void()) mul16u_compare() mul16u_compare: scope:[mul16u_compare] from main::@2 - [202] phi() + [203] phi() to:mul16u_compare::@1 mul16u_compare::@1: scope:[mul16u_compare] from mul16u_compare mul16u_compare::@8 - [203] (byte) mul16u_compare::i#12 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(byte) mul16u_compare::i#1 ) - [203] (word) mul16u_compare::b#6 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(word) mul16u_compare::b#1 ) - [203] (word) mul16u_compare::a#6 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(word) mul16u_compare::a#1 ) - [203] (byte*) print_char_cursor#145 ← phi( mul16u_compare/(byte*) 1024 mul16u_compare::@8/(byte*) print_char_cursor#132 ) - [204] call print_str + [204] (byte) mul16u_compare::i#12 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(byte) mul16u_compare::i#1 ) + [204] (word) mul16u_compare::b#6 ← phi( mul16u_compare/(word) 0 mul16u_compare::@8/(word) mul16u_compare::b#1 ) + [204] (word) mul16u_compare::a#6 ← phi( mul16u_compare/(word) 0 mul16u_compare::@8/(word) mul16u_compare::a#1 ) + [204] (byte*) print_char_cursor#145 ← phi( mul16u_compare/(byte*) 1024 mul16u_compare::@8/(byte*) print_char_cursor#132 ) + [205] call print_str to:mul16u_compare::@2 mul16u_compare::@2: scope:[mul16u_compare] from mul16u_compare::@1 mul16u_compare::@5 - [205] (byte) mul16u_compare::j#10 ← phi( mul16u_compare::@1/(byte) 0 mul16u_compare::@5/(byte) mul16u_compare::j#1 ) - [205] (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#6 mul16u_compare::@5/(word) mul16u_compare::b#1 ) - [205] (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#6 mul16u_compare::@5/(word) mul16u_compare::a#1 ) - [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b - [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd - [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 - [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 - [210] call muls16u - [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 + [206] (byte) mul16u_compare::j#10 ← phi( mul16u_compare::@1/(byte) 0 mul16u_compare::@5/(byte) mul16u_compare::j#1 ) + [206] (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#6 mul16u_compare::@5/(word) mul16u_compare::b#1 ) + [206] (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#6 mul16u_compare::@5/(word) mul16u_compare::a#1 ) + [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b + [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd + [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 + [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 + [211] call muls16u + [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 to:mul16u_compare::@10 mul16u_compare::@10: scope:[mul16u_compare] from mul16u_compare::@2 - [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 - [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 - [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 - [215] call mul16u - [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 + [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 + [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 + [216] call mul16u + [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mul16u_compare::@11 mul16u_compare::@11: scope:[mul16u_compare] from mul16u_compare::@10 - [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 - [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 - [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 - [220] call mulf16u - [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 + [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 + [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 + [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 + [221] call mulf16u + [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 to:mul16u_compare::@12 mul16u_compare::@12: scope:[mul16u_compare] from mul16u_compare::@11 - [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 - [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 + [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 + [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 to:mul16u_compare::@6 mul16u_compare::@6: scope:[mul16u_compare] from mul16u_compare::@12 - [224] phi() + [225] phi() to:mul16u_compare::@3 mul16u_compare::@3: scope:[mul16u_compare] from mul16u_compare::@12 mul16u_compare::@6 - [225] (byte) mul16u_compare::ok#4 ← phi( mul16u_compare::@12/(byte) 1 mul16u_compare::@6/(byte) 0 ) - [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 + [226] (byte) mul16u_compare::ok#4 ← phi( mul16u_compare::@12/(byte) 1 mul16u_compare::@6/(byte) 0 ) + [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 to:mul16u_compare::@4 mul16u_compare::@15: scope:[mul16u_compare] from mul16u_compare::@3 - [227] phi() + [228] phi() to:mul16u_compare::@4 mul16u_compare::@4: scope:[mul16u_compare] from mul16u_compare::@15 mul16u_compare::@3 - [228] (byte) mul16u_compare::ok#3 ← phi( mul16u_compare::@15/(byte) mul16u_compare::ok#4 mul16u_compare::@3/(byte) 0 ) - [229] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 + [229] (byte) mul16u_compare::ok#3 ← phi( mul16u_compare::@15/(byte) mul16u_compare::ok#4 mul16u_compare::@3/(byte) 0 ) + [230] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 to:mul16u_compare::@7 mul16u_compare::@7: scope:[mul16u_compare] from mul16u_compare::@4 - [230] *((const byte*) BGCOL) ← (byte) 2 - [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 - [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 - [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 - [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 - [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 - [236] call mul16u_error + [231] *((const byte*) BGCOL) ← (byte) 2 + [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 + [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 + [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 + [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 + [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 + [237] call mul16u_error to:mul16u_compare::@return mul16u_compare::@return: scope:[mul16u_compare] from mul16u_compare::@14 mul16u_compare::@7 - [237] return + [238] return to:@return mul16u_compare::@5: scope:[mul16u_compare] from mul16u_compare::@4 - [238] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 - [239] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 + [239] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 + [240] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 to:mul16u_compare::@8 mul16u_compare::@8: scope:[mul16u_compare] from mul16u_compare::@5 - [240] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 - [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 + [241] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 + [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 to:mul16u_compare::@9 mul16u_compare::@9: scope:[mul16u_compare] from mul16u_compare::@8 - [242] phi() - [243] call print_ln + [243] phi() + [244] call print_ln to:mul16u_compare::@13 mul16u_compare::@13: scope:[mul16u_compare] from mul16u_compare::@9 - [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 - [245] call print_str + [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 + [246] call print_str to:mul16u_compare::@14 mul16u_compare::@14: scope:[mul16u_compare] from mul16u_compare::@13 - [246] phi() - [247] call print_ln + [247] phi() + [248] call print_ln to:mul16u_compare::@return (void()) mul16u_error((word) mul16u_error::a , (word) mul16u_error::b , (dword) mul16u_error::ms , (dword) mul16u_error::mn , (dword) mul16u_error::mf) mul16u_error: scope:[mul16u_error] from mul16u_compare::@7 - [248] phi() - [249] call print_str + [249] phi() + [250] call print_str to:mul16u_error::@1 mul16u_error::@1: scope:[mul16u_error] from mul16u_error - [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 - [251] call print_word + [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 + [252] call print_word to:mul16u_error::@2 mul16u_error::@2: scope:[mul16u_error] from mul16u_error::@1 - [252] phi() - [253] call print_str + [253] phi() + [254] call print_str to:mul16u_error::@3 mul16u_error::@3: scope:[mul16u_error] from mul16u_error::@2 - [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 - [255] call print_word + [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 + [256] call print_word to:mul16u_error::@4 mul16u_error::@4: scope:[mul16u_error] from mul16u_error::@3 - [256] phi() - [257] call print_str + [257] phi() + [258] call print_str to:mul16u_error::@5 mul16u_error::@5: scope:[mul16u_error] from mul16u_error::@4 - [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 - [259] call print_dword + [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 + [260] call print_dword to:mul16u_error::@6 mul16u_error::@6: scope:[mul16u_error] from mul16u_error::@5 - [260] phi() - [261] call print_str + [261] phi() + [262] call print_str to:mul16u_error::@7 mul16u_error::@7: scope:[mul16u_error] from mul16u_error::@6 - [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 - [263] call print_dword + [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 + [264] call print_dword to:mul16u_error::@8 mul16u_error::@8: scope:[mul16u_error] from mul16u_error::@7 - [264] phi() - [265] call print_str + [265] phi() + [266] call print_str to:mul16u_error::@9 mul16u_error::@9: scope:[mul16u_error] from mul16u_error::@8 - [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 - [267] call print_dword + [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 + [268] call print_dword to:mul16u_error::@10 mul16u_error::@10: scope:[mul16u_error] from mul16u_error::@9 - [268] phi() - [269] call print_ln + [269] phi() + [270] call print_ln to:mul16u_error::@return mul16u_error::@return: scope:[mul16u_error] from mul16u_error::@10 - [270] return + [271] return to:@return (dword()) muls16u((word) muls16u::a , (word) muls16u::b) muls16u: scope:[muls16u] from mul16u_compare::@2 - [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 + [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 to:muls16u::@2 muls16u::@2: scope:[muls16u] from muls16u muls16u::@3 - [272] (dword) muls16u::m#3 ← phi( muls16u/(byte) 0 muls16u::@3/(dword) muls16u::m#1 ) - [272] (word) muls16u::i#2 ← phi( muls16u/(byte) 0 muls16u::@3/(word) muls16u::i#1 ) - [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 + [273] (dword) muls16u::m#3 ← phi( muls16u/(dword) 0 muls16u::@3/(dword) muls16u::m#1 ) + [273] (word) muls16u::i#2 ← phi( muls16u/(word) 0 muls16u::@3/(word) muls16u::i#1 ) + [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 to:muls16u::@1 muls16u::@1: scope:[muls16u] from muls16u muls16u::@2 - [274] (dword) muls16u::return#0 ← phi( muls16u/(byte) 0 muls16u::@2/(dword) muls16u::m#3 ) + [275] (dword) muls16u::return#0 ← phi( muls16u/(dword) 0 muls16u::@2/(dword) muls16u::m#3 ) to:muls16u::@return muls16u::@return: scope:[muls16u] from muls16u::@1 - [275] return + [276] return to:@return muls16u::@3: scope:[muls16u] from muls16u::@2 - [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 - [277] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 + [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 + [278] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 to:muls16u::@2 (void()) mulf_init() mulf_init: scope:[mulf_init] from main::@1 - [278] phi() + [279] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [279] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [279] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [279] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [279] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [279] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + [280] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [280] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [280] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [280] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [280] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [281] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [281] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) - [281] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [281] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) - [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + [282] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [282] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [282] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [282] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) - [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [285] return + [286] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) - [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) - [288] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [290] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [289] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [291] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [291] phi() + [292] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [292] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [293] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [293] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [294] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [294] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 - [296] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + [295] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [297] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [297] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [298] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [298] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [299] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [299] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [299] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [300] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 - [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 - [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 - [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 - [304] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [306] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [300] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [300] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [301] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [302] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [305] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [307] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 (void()) print_cls() print_cls: scope:[print_cls] from main - [307] phi() - [308] call memset + [308] phi() + [309] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [309] return + [310] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls - [310] phi() + [311] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [311] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [312] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [313] return + [314] return to:@return memset::@2: scope:[memset] from memset::@1 - [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [316] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 diff --git a/src/test/ref/test-multiply-16bit.log b/src/test/ref/test-multiply-16bit.log index 87f004aa7..2d451d3cf 100644 --- a/src/test/ref/test-multiply-16bit.log +++ b/src/test/ref/test-multiply-16bit.log @@ -427,8 +427,8 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 mul16u: scope:[mul16u] from mul16s mul16u_compare::@13 (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mul16u_compare::@13/(word) mul16u::a#2 ) (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mul16u_compare::@13/(word) mul16u::b#1 ) - (dword) mul16u::res#0 ← (number) 0 - (dword) mul16u::mb#0 ← (word) mul16u::b#2 + (dword) mul16u::res#0 ← (dword) 0 + (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) @@ -533,9 +533,9 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (void()) mulf_init() mulf_init: scope:[mulf_init] from main::@1 - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -562,7 +562,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -752,7 +752,7 @@ main::@return: scope:[main] from main::@4 muls16u: scope:[muls16u] from mul16u_compare::@2 (word) muls16u::b#4 ← phi( mul16u_compare::@2/(word) muls16u::b#0 ) (word) muls16u::a#1 ← phi( mul16u_compare::@2/(word) muls16u::a#0 ) - (dword) muls16u::m#0 ← (number) 0 + (dword) muls16u::m#0 ← (dword) 0 (bool~) muls16u::$0 ← (word) muls16u::a#1 != (number) 0 (bool~) muls16u::$1 ← ! (bool~) muls16u::$0 if((bool~) muls16u::$1) goto muls16u::@1 @@ -765,7 +765,7 @@ muls16u::@2: scope:[muls16u] from muls16u (word) muls16u::b#3 ← phi( muls16u/(word) muls16u::b#4 ) (dword) muls16u::m#5 ← phi( muls16u/(dword) muls16u::m#0 ) (word) muls16u::a#3 ← phi( muls16u/(word) muls16u::a#1 ) - (word) muls16u::i#0 ← (number) 0 + (word) muls16u::i#0 ← (word) 0 to:muls16u::@4 muls16u::@4: scope:[muls16u] from muls16u::@2 muls16u::@5 (word) muls16u::b#2 ← phi( muls16u::@2/(word) muls16u::b#3 muls16u::@5/(word) muls16u::b#1 ) @@ -794,7 +794,7 @@ muls16u::@return: scope:[muls16u] from muls16u::@1 muls16s: scope:[muls16s] from mul16s_compare::@2 (signed word) muls16s::b#7 ← phi( mul16s_compare::@2/(signed word) muls16s::b#0 ) (signed word) muls16s::a#1 ← phi( mul16s_compare::@2/(signed word) muls16s::a#0 ) - (signed dword) muls16s::m#0 ← (number) 0 + (signed dword) muls16s::m#0 ← (signed dword) 0 (bool~) muls16s::$0 ← (signed word) muls16s::a#1 < (number) 0 if((bool~) muls16s::$0) goto muls16s::@1 to:muls16s::@4 @@ -802,7 +802,7 @@ muls16s::@1: scope:[muls16s] from muls16s (signed word) muls16s::b#6 ← phi( muls16s/(signed word) muls16s::b#7 ) (signed dword) muls16s::m#10 ← phi( muls16s/(signed dword) muls16s::m#0 ) (signed word) muls16s::a#7 ← phi( muls16s/(signed word) muls16s::a#1 ) - (signed word) muls16s::i#0 ← (number) 0 + (signed word) muls16s::i#0 ← (signed word) 0 to:muls16s::@14 muls16s::@4: scope:[muls16s] from muls16s (signed word) muls16s::b#8 ← phi( muls16s/(signed word) muls16s::b#7 ) @@ -816,7 +816,7 @@ muls16s::@5: scope:[muls16s] from muls16s::@4 (signed word) muls16s::b#5 ← phi( muls16s::@4/(signed word) muls16s::b#8 ) (signed dword) muls16s::m#9 ← phi( muls16s::@4/(signed dword) muls16s::m#8 ) (signed word) muls16s::a#5 ← phi( muls16s::@4/(signed word) muls16s::a#2 ) - (signed word) muls16s::j#0 ← (number) 0 + (signed word) muls16s::j#0 ← (signed word) 0 to:muls16s::@8 muls16s::@8: scope:[muls16s] from muls16s::@5 muls16s::@9 (signed word) muls16s::b#3 ← phi( muls16s::@5/(signed word) muls16s::b#5 muls16s::@9/(signed word) muls16s::b#1 ) @@ -866,8 +866,8 @@ muls16s::@return: scope:[muls16s] from muls16s::@3 mul16u_compare: scope:[mul16u_compare] from main::@2 (byte*) print_line_cursor#95 ← phi( main::@2/(byte*) print_line_cursor#45 ) (byte*) print_char_cursor#157 ← phi( main::@2/(byte*) print_char_cursor#144 ) - (word) mul16u_compare::a#0 ← (number) 0 - (word) mul16u_compare::b#0 ← (number) 0 + (word) mul16u_compare::a#0 ← (word) 0 + (word) mul16u_compare::b#0 ← (word) 0 (byte) mul16u_compare::i#0 ← (byte) 0 to:mul16u_compare::@1 mul16u_compare::@1: scope:[mul16u_compare] from mul16u_compare mul16u_compare::@10 @@ -947,7 +947,7 @@ mul16u_compare::@15: scope:[mul16u_compare] from mul16u_compare::@14 (dword) mulf16u::return#6 ← phi( mul16u_compare::@14/(dword) mulf16u::return#3 ) (dword~) mul16u_compare::$8 ← (dword) mulf16u::return#6 (dword) mul16u_compare::mf#0 ← (dword~) mul16u_compare::$8 - (byte) mul16u_compare::ok#0 ← (number) 1 + (byte) mul16u_compare::ok#0 ← (byte) 1 (bool~) mul16u_compare::$9 ← (dword) mul16u_compare::ms#1 != (dword) mul16u_compare::mf#0 (bool~) mul16u_compare::$10 ← ! (bool~) mul16u_compare::$9 if((bool~) mul16u_compare::$10) goto mul16u_compare::@3 @@ -1206,8 +1206,8 @@ mul16u_error::@return: scope:[mul16u_error] from mul16u_error::@11 mul16s_compare: scope:[mul16s_compare] from main::@3 (byte*) print_line_cursor#97 ← phi( main::@3/(byte*) print_line_cursor#6 ) (byte*) print_char_cursor#160 ← phi( main::@3/(byte*) print_char_cursor#27 ) - (signed word) mul16s_compare::a#0 ← (number) -$7fff - (signed word) mul16s_compare::b#0 ← (number) -$7fff + (signed word) mul16s_compare::a#0 ← (signed word) -$7fff + (signed word) mul16s_compare::b#0 ← (signed word) -$7fff (byte) mul16s_compare::i#0 ← (byte) 0 to:mul16s_compare::@1 mul16s_compare::@1: scope:[mul16s_compare] from mul16s_compare mul16s_compare::@10 @@ -1287,7 +1287,7 @@ mul16s_compare::@15: scope:[mul16s_compare] from mul16s_compare::@14 (signed dword) mulf16s::return#4 ← phi( mul16s_compare::@14/(signed dword) mulf16s::return#2 ) (signed dword~) mul16s_compare::$8 ← (signed dword) mulf16s::return#4 (signed dword) mul16s_compare::mf#0 ← (signed dword~) mul16s_compare::$8 - (byte) mul16s_compare::ok#0 ← (number) 1 + (byte) mul16s_compare::ok#0 ← (byte) 1 (bool~) mul16s_compare::$9 ← (signed dword) mul16s_compare::ms#1 != (signed dword) mul16s_compare::mf#0 (bool~) mul16s_compare::$10 ← ! (bool~) mul16s_compare::$9 if((bool~) mul16s_compare::$10) goto mul16s_compare::@3 @@ -2767,7 +2767,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (dword) mul16u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (unumber)(number) 1 @@ -2776,16 +2775,12 @@ Adding number conversion cast (unumber) 1 in (word~) mul16u::$5 ← (word) mul16 Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1 Adding number conversion cast (snumber) 0 in (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mul16s::$5 ← (signed word) mul16s::b#2 < (number) 0 -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -2796,32 +2791,21 @@ Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number Adding number conversion cast (snumber) 0 in (bool~) mulf16s::$3 ← (signed word) mulf16s::a#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mulf16s::$5 ← (signed word) mulf16s::b#2 < (number) 0 Adding number conversion cast (unumber) 5 in *((const byte*) BGCOL) ← (number) 5 -Adding number conversion cast (unumber) 0 in (dword) muls16u::m#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) muls16u::$0 ← (word) muls16u::a#1 != (number) 0 -Adding number conversion cast (unumber) 0 in (word) muls16u::i#0 ← (number) 0 -Adding number conversion cast (snumber) 0 in (signed dword) muls16s::m#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) muls16s::$0 ← (signed word) muls16s::a#1 < (number) 0 -Adding number conversion cast (snumber) 0 in (signed word) muls16s::i#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) muls16s::$1 ← (signed word) muls16s::a#2 > (number) 0 -Adding number conversion cast (snumber) 0 in (signed word) muls16s::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mul16u_compare::a#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mul16u_compare::b#0 ← (number) 0 Adding number conversion cast (unumber) $d2b in (number~) mul16u_compare::$4 ← (word) mul16u_compare::a#2 + (number) $d2b Adding number conversion cast (unumber) mul16u_compare::$4 in (number~) mul16u_compare::$4 ← (word) mul16u_compare::a#2 + (unumber)(number) $d2b Adding number conversion cast (unumber) $ffd in (number~) mul16u_compare::$5 ← (word) mul16u_compare::b#2 + (number) $ffd Adding number conversion cast (unumber) mul16u_compare::$5 in (number~) mul16u_compare::$5 ← (word) mul16u_compare::b#2 + (unumber)(number) $ffd -Adding number conversion cast (unumber) 1 in (byte) mul16u_compare::ok#0 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mul16u_compare::ok#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u_compare::$13 ← (byte) mul16u_compare::ok#3 == (number) 0 Adding number conversion cast (unumber) 0 in (byte) mul16u_compare::ok#2 ← (number) 0 Adding number conversion cast (unumber) 2 in *((const byte*) BGCOL) ← (number) 2 -Adding number conversion cast (snumber) -$7fff in (signed word) mul16s_compare::a#0 ← (number) -$7fff -Adding number conversion cast (snumber) -$7fff in (signed word) mul16s_compare::b#0 ← (number) -$7fff Adding number conversion cast (snumber) $d2b in (number~) mul16s_compare::$4 ← (signed word) mul16s_compare::a#2 + (number) $d2b Adding number conversion cast (snumber) mul16s_compare::$4 in (number~) mul16s_compare::$4 ← (signed word) mul16s_compare::a#2 + (snumber)(number) $d2b Adding number conversion cast (snumber) $ffd in (number~) mul16s_compare::$5 ← (signed word) mul16s_compare::b#2 + (number) $ffd Adding number conversion cast (snumber) mul16s_compare::$5 in (number~) mul16s_compare::$5 ← (signed word) mul16s_compare::b#2 + (snumber)(number) $ffd -Adding number conversion cast (unumber) 1 in (byte) mul16s_compare::ok#0 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mul16s_compare::ok#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16s_compare::$13 ← (byte) mul16s_compare::ok#3 == (number) 0 Adding number conversion cast (unumber) 0 in (byte) mul16s_compare::ok#2 ← (number) 0 @@ -2832,16 +2816,11 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#5 Inlining cast (dword~) print_sdword::$1 ← (dword)(signed dword) print_sdword::dw#6 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#1 Inlining cast (word~) mul16s::$1 ← (word)(signed word) mul16s::b#1 Inlining cast (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3 Inlining cast (signed dword~) mul16s::$7 ← (signed dword)(dword) mul16s::m#4 Inlining cast (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3 -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast (word~) mulf16s::$0 ← (word)(signed word) mulf16s::a#1 Inlining cast (word~) mulf16s::$1 ← (word)(signed word) mulf16s::b#1 @@ -2849,20 +2828,9 @@ Inlining cast (word~) mulf16s::$10 ← (word)(signed word) mulf16s::b#3 Inlining cast (signed dword~) mulf16s::$7 ← (signed dword)(dword) mulf16s::m#4 Inlining cast (word~) mulf16s::$14 ← (word)(signed word) mulf16s::a#3 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 5 -Inlining cast (dword) muls16u::m#0 ← (unumber)(number) 0 -Inlining cast (word) muls16u::i#0 ← (unumber)(number) 0 -Inlining cast (signed dword) muls16s::m#0 ← (snumber)(number) 0 -Inlining cast (signed word) muls16s::i#0 ← (snumber)(number) 0 -Inlining cast (signed word) muls16s::j#0 ← (snumber)(number) 0 -Inlining cast (word) mul16u_compare::a#0 ← (unumber)(number) 0 -Inlining cast (word) mul16u_compare::b#0 ← (unumber)(number) 0 -Inlining cast (byte) mul16u_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul16u_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul16u_compare::ok#2 ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 2 -Inlining cast (signed word) mul16s_compare::a#0 ← (snumber)(number) -$7fff -Inlining cast (signed word) mul16s_compare::b#0 ← (snumber)(number) -$7fff -Inlining cast (byte) mul16s_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul16s_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul16s_compare::ok#2 ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 2 @@ -2881,23 +2849,18 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -2911,25 +2874,14 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $d2b Simplifying constant integer cast $ffd -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 2 -Simplifying constant integer cast -$7fff -Simplifying constant integer cast -$7fff Simplifying constant integer cast $d2b Simplifying constant integer cast $ffd -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2944,22 +2896,17 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -2971,27 +2918,16 @@ Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $d2b Finalized unsigned number type (word) $ffd -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 -Finalized signed number type (signed word) -$7fff -Finalized signed number type (signed word) -$7fff Finalized signed number type (signed word) $d2b Finalized signed number type (signed word) $ffd -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -3063,7 +2999,6 @@ Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#85 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#86 (byte*) print_char_cursor#87 (byte*) print_char_cursor#21 Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#89 (byte*) print_char_cursor#23 Alias (byte*) print_line_cursor#25 = (byte*) print_screen#2 (byte*) print_screen#1 (byte*) print_line_cursor#3 (byte*) print_char_cursor#24 (byte*) print_char_cursor#90 (byte*) print_line_cursor#4 (byte*) print_char_cursor#25 -Alias (dword) mul16u::mb#0 = (word) mul16u::b#2 Alias (word) mul16u::a#3 = (word) mul16u::a#4 (word) mul16u::a#7 Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#4 (dword) mul16u::return#1 @@ -3538,10 +3473,10 @@ Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memse Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [80] (word~) mul16s::$10 ← (word)(signed word) mul16s::b#0 keeping mul16s::b#0 -Inlining Noop Cast [86] (word~) mul16s::$14 ← (word)(signed word) mul16s::a#0 keeping mul16s::a#0 -Inlining Noop Cast [132] (word~) mulf16s::$10 ← (word)(signed word) mulf16s::b#0 keeping mulf16s::b#0 -Inlining Noop Cast [138] (word~) mulf16s::$14 ← (word)(signed word) mulf16s::a#0 keeping mulf16s::a#0 +Inlining Noop Cast [81] (word~) mul16s::$10 ← (word)(signed word) mul16s::b#0 keeping mul16s::b#0 +Inlining Noop Cast [87] (word~) mul16s::$14 ← (word)(signed word) mul16s::a#0 keeping mul16s::a#0 +Inlining Noop Cast [133] (word~) mulf16s::$10 ← (word)(signed word) mulf16s::b#0 keeping mulf16s::b#0 +Inlining Noop Cast [139] (word~) mulf16s::$14 ← (word)(signed word) mulf16s::a#0 keeping mulf16s::a#0 Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte*) print_str::str#1 @@ -3599,22 +3534,22 @@ Constant inlined mul16u_error::str3 = (const string) str3 Constant inlined mulf_init::sqr2_hi#0 = (const byte*) mulf_sqr2_hi Constant inlined mul16u_error::str2 = (const string) str2 Constant inlined mul16u_error::str4 = (const string) str4 -Constant inlined muls16s::j#0 = (signed byte) 0 +Constant inlined muls16s::j#0 = (signed word) 0 Constant inlined mul16u_compare::ok#0 = (byte) 1 Constant inlined mulf_init::dir#1 = (byte) 1 Constant inlined mulf_init::dir#0 = (byte) $ff -Constant inlined muls16u::i#0 = (byte) 0 +Constant inlined muls16u::i#0 = (word) 0 Constant inlined mul16u_compare::ok#2 = (byte) 0 Constant inlined mul16u_compare::ok#1 = (byte) 0 Constant inlined mul16s_error::str1 = (const string) str1 -Constant inlined muls16u::m#0 = (byte) 0 +Constant inlined muls16u::m#0 = (dword) 0 Constant inlined mul16s_compare::a#0 = (signed word) -$7fff Constant inlined mulf_init::x_255#0 = (byte) -1 Constant inlined mul16s_error::str4 = (const string) str4 Constant inlined mul16s_error::str3 = (const string) str3 Constant inlined mul16s_error::str2 = (const string) str2 Constant inlined mulf_init::x_2#0 = (byte) 0 -Constant inlined mul16u_compare::a#0 = (byte) 0 +Constant inlined mul16u_compare::a#0 = (word) 0 Constant inlined mul16s_compare::j#0 = (byte) 0 Constant inlined mul16u_compare::j#0 = (byte) 0 Constant inlined print_line_cursor#0 = (byte*) 1024 @@ -3631,23 +3566,23 @@ Constant inlined print_str::str#7 = (const string) str4 Constant inlined print_str::str#6 = (const string) str3 Constant inlined print_str::str#5 = (const string) str2 Constant inlined mulf_init::c#0 = (byte) 0 -Constant inlined muls16s::i#0 = (signed byte) 0 +Constant inlined muls16s::i#0 = (signed word) 0 Constant inlined mul16s_compare::str = (const string) str Constant inlined print_str::str#13 = (const string) str3 Constant inlined print_str::str#12 = (const string) str2 Constant inlined print_str::str#11 = (const string) str1 Constant inlined print_str::str#10 = (const string) mul16s_error::str -Constant inlined muls16s::m#0 = (signed byte) 0 +Constant inlined muls16s::m#0 = (signed dword) 0 Constant inlined mul16s_compare::ok#0 = (byte) 1 Constant inlined mul16s_compare::ok#1 = (byte) 0 Constant inlined print_str::str#14 = (const string) str4 Constant inlined mul16s_compare::ok#2 = (byte) 0 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 -Constant inlined mul16u::res#0 = (byte) 0 +Constant inlined mul16u::res#0 = (dword) 0 Constant inlined mul16s_compare::b#0 = (signed word) -$7fff -Constant inlined mul16u_compare::b#0 = (byte) 0 +Constant inlined mul16u_compare::b#0 = (word) 0 Constant inlined mul16s_compare::i#0 = (byte) 0 -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined mul16u_compare::i#0 = (byte) 0 Constant inlined print_char::ch#3 = (byte) ' ' Constant inlined print_char::ch#2 = (byte) '-' @@ -3722,9 +3657,9 @@ Calls in [print_byte] to print_char:173 print_char:178 Calls in [print_sword] to print_char:184 print_word:190 print_char:194 Calls in [mulf16s] to mulf16u:201 Calls in [mul16s] to mul16u:230 -Calls in [mul16u_compare] to print_str:290 muls16u:298 mul16u:305 mulf16u:312 mul16u_error:328 print_ln:336 print_str:338 print_ln:341 -Calls in [mul16u_error] to print_str:352 print_word:356 print_str:358 print_word:362 print_str:364 print_dword:368 print_str:370 print_dword:374 print_str:376 print_dword:380 print_ln:382 -Calls in [print_cls] to memset:441 +Calls in [mul16u_compare] to print_str:291 muls16u:299 mul16u:306 mulf16u:313 mul16u_error:329 print_ln:337 print_str:339 print_ln:342 +Calls in [mul16u_error] to print_str:353 print_word:357 print_str:359 print_word:363 print_str:365 print_dword:369 print_str:371 print_dword:375 print_str:377 print_dword:381 print_ln:383 +Calls in [print_cls] to memset:442 Created 70 initial phi equivalence classes Not coalescing [16] print_char_cursor#219 ← print_line_cursor#1 @@ -3792,79 +3727,79 @@ Coalesced [208] mulf16s::m#7 ← mulf16s::m#1 Coalesced [214] mulf16s::m#10 ← mulf16s::m#2 Coalesced [218] mulf16s::m#9 ← mulf16s::m#5 Coalesced [219] mulf16s::m#8 ← mulf16s::m#0 -Coalesced [228] mul16u::mb#6 ← mul16u::b#0 +Coalesced [228] mul16u::b#3 ← mul16u::b#0 Coalesced [229] mul16u::a#8 ← mul16u::a#1 Coalesced [237] mul16s::m#7 ← mul16s::m#1 Coalesced [243] mul16s::m#10 ← mul16s::m#2 Coalesced [247] mul16s::m#9 ← mul16s::m#5 Coalesced [248] mul16s::m#8 ← mul16s::m#0 -Coalesced [250] mul16u::a#10 ← mul16u::a#6 -Coalesced [251] mul16u::mb#8 ← mul16u::mb#0 -Coalesced [259] mul16u::res#9 ← mul16u::res#1 -Coalesced [263] mul16u::a#11 ← mul16u::a#0 -Coalesced [264] mul16u::res#7 ← mul16u::res#6 -Coalesced [265] mul16u::mb#9 ← mul16u::mb#1 -Coalesced (already) [266] mul16u::res#8 ← mul16u::res#2 -Coalesced [272] muls16s::return#6 ← muls16s::m#3 -Coalesced [277] muls16s::j#4 ← muls16s::j#1 -Coalesced [278] muls16s::m#11 ← muls16s::m#1 -Coalesced [282] muls16s::return#5 ← muls16s::m#5 -Coalesced [285] muls16s::i#4 ← muls16s::i#1 -Coalesced [286] muls16s::m#12 ← muls16s::m#2 -Coalesced [289] print_char_cursor#186 ← print_char_cursor#145 -Coalesced [291] mul16u_compare::a#16 ← mul16u_compare::a#6 -Coalesced [292] mul16u_compare::b#16 ← mul16u_compare::b#6 -Coalesced [303] mul16u::mb#7 ← mul16u::b#1 -Coalesced [304] mul16u::a#9 ← mul16u::a#2 -Coalesced [310] mulf16u::a#3 ← mulf16u::a#1 -Coalesced [311] mulf16u::b#3 ← mulf16u::b#1 -Coalesced (already) [335] print_char_cursor#198 ← print_char_cursor#132 -Not coalescing [337] print_char_cursor#187 ← print_line_cursor#1 -Coalesced (already) [339] print_line_cursor#104 ← print_line_cursor#1 -Coalesced (already) [340] print_char_cursor#199 ← print_char_cursor#132 -Coalesced (already) [343] print_char_cursor#218 ← print_char_cursor#132 -Coalesced [344] mul16u_compare::a#15 ← mul16u_compare::a#1 -Coalesced [345] mul16u_compare::b#15 ← mul16u_compare::b#1 -Coalesced [346] mul16u_compare::i#14 ← mul16u_compare::i#1 -Coalesced (already) [347] mul16u_compare::a#17 ← mul16u_compare::a#1 -Coalesced (already) [348] mul16u_compare::b#17 ← mul16u_compare::b#1 -Coalesced [349] mul16u_compare::j#11 ← mul16u_compare::j#1 -Coalesced [350] mul16u_compare::ok#5 ← mul16u_compare::ok#4 -Coalesced (already) [351] print_char_cursor#188 ← print_char_cursor#132 -Coalesced [354] print_word::w#7 ← print_word::w#3 -Coalesced (already) [355] print_char_cursor#201 ← print_char_cursor#132 -Coalesced (already) [357] print_char_cursor#189 ← print_char_cursor#22 -Coalesced [360] print_word::w#8 ← print_word::w#4 -Coalesced (already) [361] print_char_cursor#202 ← print_char_cursor#132 -Coalesced (already) [363] print_char_cursor#190 ← print_char_cursor#22 -Coalesced [366] print_dword::dw#6 ← print_dword::dw#1 -Coalesced (already) [367] print_char_cursor#206 ← print_char_cursor#132 -Coalesced (already) [369] print_char_cursor#191 ← print_char_cursor#22 -Coalesced [372] print_dword::dw#7 ← print_dword::dw#2 -Coalesced (already) [373] print_char_cursor#207 ← print_char_cursor#132 -Coalesced (already) [375] print_char_cursor#192 ← print_char_cursor#22 -Coalesced [378] print_dword::dw#8 ← print_dword::dw#3 -Coalesced (already) [379] print_char_cursor#208 ← print_char_cursor#132 -Coalesced (already) [381] print_char_cursor#200 ← print_char_cursor#22 -Coalesced [389] muls16u::return#5 ← muls16u::m#3 -Coalesced [394] muls16u::i#4 ← muls16u::i#1 -Coalesced [395] muls16u::m#6 ← muls16u::m#1 -Coalesced [413] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 -Coalesced [414] mulf_init::x_255#6 ← mulf_init::x_255#1 -Coalesced [415] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 -Coalesced [416] mulf_init::dir#5 ← mulf_init::dir#4 -Coalesced (already) [417] mulf_init::dir#6 ← mulf_init::dir#2 -Coalesced [423] mulf_init::sqr#9 ← mulf_init::sqr#2 -Coalesced [424] mulf_init::x_2#8 ← mulf_init::x_2#1 -Coalesced [433] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 -Coalesced [434] mulf_init::c#6 ← mulf_init::c#1 -Coalesced [435] mulf_init::sqr#7 ← mulf_init::sqr#1 -Coalesced [436] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 -Coalesced [437] mulf_init::x_2#6 ← mulf_init::x_2#2 -Coalesced [438] mulf_init::sqr#8 ← mulf_init::sqr#4 -Coalesced (already) [439] mulf_init::x_2#7 ← mulf_init::x_2#3 -Coalesced [452] memset::dst#4 ← memset::dst#1 -Coalesced down to 41 phi equivalence classes +Coalesced [251] mul16u::a#10 ← mul16u::a#6 +Coalesced [252] mul16u::mb#6 ← mul16u::mb#0 +Coalesced [260] mul16u::res#9 ← mul16u::res#1 +Coalesced [264] mul16u::a#11 ← mul16u::a#0 +Coalesced [265] mul16u::res#7 ← mul16u::res#6 +Coalesced [266] mul16u::mb#7 ← mul16u::mb#1 +Coalesced (already) [267] mul16u::res#8 ← mul16u::res#2 +Coalesced [273] muls16s::return#6 ← muls16s::m#3 +Coalesced [278] muls16s::j#4 ← muls16s::j#1 +Coalesced [279] muls16s::m#11 ← muls16s::m#1 +Coalesced [283] muls16s::return#5 ← muls16s::m#5 +Coalesced [286] muls16s::i#4 ← muls16s::i#1 +Coalesced [287] muls16s::m#12 ← muls16s::m#2 +Coalesced [290] print_char_cursor#186 ← print_char_cursor#145 +Coalesced [292] mul16u_compare::a#16 ← mul16u_compare::a#6 +Coalesced [293] mul16u_compare::b#16 ← mul16u_compare::b#6 +Coalesced [304] mul16u::b#4 ← mul16u::b#1 +Coalesced [305] mul16u::a#9 ← mul16u::a#2 +Coalesced [311] mulf16u::a#3 ← mulf16u::a#1 +Coalesced [312] mulf16u::b#3 ← mulf16u::b#1 +Coalesced (already) [336] print_char_cursor#198 ← print_char_cursor#132 +Not coalescing [338] print_char_cursor#187 ← print_line_cursor#1 +Coalesced (already) [340] print_line_cursor#104 ← print_line_cursor#1 +Coalesced (already) [341] print_char_cursor#199 ← print_char_cursor#132 +Coalesced (already) [344] print_char_cursor#218 ← print_char_cursor#132 +Coalesced [345] mul16u_compare::a#15 ← mul16u_compare::a#1 +Coalesced [346] mul16u_compare::b#15 ← mul16u_compare::b#1 +Coalesced [347] mul16u_compare::i#14 ← mul16u_compare::i#1 +Coalesced (already) [348] mul16u_compare::a#17 ← mul16u_compare::a#1 +Coalesced (already) [349] mul16u_compare::b#17 ← mul16u_compare::b#1 +Coalesced [350] mul16u_compare::j#11 ← mul16u_compare::j#1 +Coalesced [351] mul16u_compare::ok#5 ← mul16u_compare::ok#4 +Coalesced (already) [352] print_char_cursor#188 ← print_char_cursor#132 +Coalesced [355] print_word::w#7 ← print_word::w#3 +Coalesced (already) [356] print_char_cursor#201 ← print_char_cursor#132 +Coalesced (already) [358] print_char_cursor#189 ← print_char_cursor#22 +Coalesced [361] print_word::w#8 ← print_word::w#4 +Coalesced (already) [362] print_char_cursor#202 ← print_char_cursor#132 +Coalesced (already) [364] print_char_cursor#190 ← print_char_cursor#22 +Coalesced [367] print_dword::dw#6 ← print_dword::dw#1 +Coalesced (already) [368] print_char_cursor#206 ← print_char_cursor#132 +Coalesced (already) [370] print_char_cursor#191 ← print_char_cursor#22 +Coalesced [373] print_dword::dw#7 ← print_dword::dw#2 +Coalesced (already) [374] print_char_cursor#207 ← print_char_cursor#132 +Coalesced (already) [376] print_char_cursor#192 ← print_char_cursor#22 +Coalesced [379] print_dword::dw#8 ← print_dword::dw#3 +Coalesced (already) [380] print_char_cursor#208 ← print_char_cursor#132 +Coalesced (already) [382] print_char_cursor#200 ← print_char_cursor#22 +Coalesced [390] muls16u::return#5 ← muls16u::m#3 +Coalesced [395] muls16u::i#4 ← muls16u::i#1 +Coalesced [396] muls16u::m#6 ← muls16u::m#1 +Coalesced [414] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 +Coalesced [415] mulf_init::x_255#6 ← mulf_init::x_255#1 +Coalesced [416] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 +Coalesced [417] mulf_init::dir#5 ← mulf_init::dir#4 +Coalesced (already) [418] mulf_init::dir#6 ← mulf_init::dir#2 +Coalesced [424] mulf_init::sqr#9 ← mulf_init::sqr#2 +Coalesced [425] mulf_init::x_2#8 ← mulf_init::x_2#1 +Coalesced [434] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 +Coalesced [435] mulf_init::c#6 ← mulf_init::c#1 +Coalesced [436] mulf_init::sqr#7 ← mulf_init::sqr#1 +Coalesced [437] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 +Coalesced [438] mulf_init::x_2#6 ← mulf_init::x_2#2 +Coalesced [439] mulf_init::sqr#8 ← mulf_init::sqr#4 +Coalesced (already) [440] mulf_init::x_2#7 ← mulf_init::x_2#3 +Coalesced [453] memset::dst#4 ← memset::dst#1 +Coalesced down to 42 phi equivalence classes Culled Empty Block (label) @13 Culled Empty Block (label) @59 Culled Empty Block (label) main::@4 @@ -4378,302 +4313,303 @@ mul16s::@return: scope:[mul16s] from mul16s::@2 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mul16s mul16u_compare::@10 [180] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mul16u_compare::@10/(word) mul16u::a#2 ) - [180] (dword) mul16u::mb#0 ← phi( mul16s/(word) mul16u::b#0 mul16u_compare::@10/(word) mul16u::b#1 ) + [180] (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mul16u_compare::@10/(word) mul16u::b#1 ) + [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 - [181] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) - [181] (dword) mul16u::res#2 ← phi( mul16u/(byte) 0 mul16u::@3/(dword) mul16u::res#6 ) - [181] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) - [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 + [182] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) + [182] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) + [182] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 ) + [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 - [183] return + [184] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 - [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 - [185] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 + [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 + [186] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 - [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 + [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 - [187] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) - [188] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 - [189] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 + [188] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) + [189] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 + [190] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (signed dword()) muls16s((signed word) muls16s::a , (signed word) muls16s::b) muls16s: scope:[muls16s] from mul16s_compare::@2 - [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 + [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 to:muls16s::@2 muls16s::@2: scope:[muls16s] from muls16s - [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 + [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 to:muls16s::@3 muls16s::@3: scope:[muls16s] from muls16s::@2 muls16s::@4 - [192] (signed dword) muls16s::m#3 ← phi( muls16s::@2/(signed byte) 0 muls16s::@4/(signed dword) muls16s::m#1 ) - [192] (signed word) muls16s::j#2 ← phi( muls16s::@2/(signed byte) 0 muls16s::@4/(signed word) muls16s::j#1 ) - [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 + [193] (signed dword) muls16s::m#3 ← phi( muls16s::@2/(signed dword) 0 muls16s::@4/(signed dword) muls16s::m#1 ) + [193] (signed word) muls16s::j#2 ← phi( muls16s::@2/(signed word) 0 muls16s::@4/(signed word) muls16s::j#1 ) + [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 to:muls16s::@1 muls16s::@1: scope:[muls16s] from muls16s::@2 muls16s::@3 muls16s::@5 - [194] (signed dword) muls16s::return#0 ← phi( muls16s::@5/(signed dword) muls16s::m#5 muls16s::@2/(signed byte) 0 muls16s::@3/(signed dword) muls16s::m#3 ) + [195] (signed dword) muls16s::return#0 ← phi( muls16s::@5/(signed dword) muls16s::m#5 muls16s::@2/(signed dword) 0 muls16s::@3/(signed dword) muls16s::m#3 ) to:muls16s::@return muls16s::@return: scope:[muls16s] from muls16s::@1 - [195] return + [196] return to:@return muls16s::@4: scope:[muls16s] from muls16s::@3 - [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 - [197] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 + [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 + [198] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 to:muls16s::@3 muls16s::@5: scope:[muls16s] from muls16s muls16s::@6 - [198] (signed dword) muls16s::m#5 ← phi( muls16s/(signed byte) 0 muls16s::@6/(signed dword) muls16s::m#2 ) - [198] (signed word) muls16s::i#2 ← phi( muls16s/(signed byte) 0 muls16s::@6/(signed word) muls16s::i#1 ) - [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 + [199] (signed dword) muls16s::m#5 ← phi( muls16s/(signed dword) 0 muls16s::@6/(signed dword) muls16s::m#2 ) + [199] (signed word) muls16s::i#2 ← phi( muls16s/(signed word) 0 muls16s::@6/(signed word) muls16s::i#1 ) + [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 to:muls16s::@1 muls16s::@6: scope:[muls16s] from muls16s::@5 - [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 - [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 + [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 + [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 to:muls16s::@5 (void()) mul16u_compare() mul16u_compare: scope:[mul16u_compare] from main::@2 - [202] phi() + [203] phi() to:mul16u_compare::@1 mul16u_compare::@1: scope:[mul16u_compare] from mul16u_compare mul16u_compare::@8 - [203] (byte) mul16u_compare::i#12 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(byte) mul16u_compare::i#1 ) - [203] (word) mul16u_compare::b#6 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(word) mul16u_compare::b#1 ) - [203] (word) mul16u_compare::a#6 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(word) mul16u_compare::a#1 ) - [203] (byte*) print_char_cursor#145 ← phi( mul16u_compare/(byte*) 1024 mul16u_compare::@8/(byte*) print_char_cursor#132 ) - [204] call print_str + [204] (byte) mul16u_compare::i#12 ← phi( mul16u_compare/(byte) 0 mul16u_compare::@8/(byte) mul16u_compare::i#1 ) + [204] (word) mul16u_compare::b#6 ← phi( mul16u_compare/(word) 0 mul16u_compare::@8/(word) mul16u_compare::b#1 ) + [204] (word) mul16u_compare::a#6 ← phi( mul16u_compare/(word) 0 mul16u_compare::@8/(word) mul16u_compare::a#1 ) + [204] (byte*) print_char_cursor#145 ← phi( mul16u_compare/(byte*) 1024 mul16u_compare::@8/(byte*) print_char_cursor#132 ) + [205] call print_str to:mul16u_compare::@2 mul16u_compare::@2: scope:[mul16u_compare] from mul16u_compare::@1 mul16u_compare::@5 - [205] (byte) mul16u_compare::j#10 ← phi( mul16u_compare::@1/(byte) 0 mul16u_compare::@5/(byte) mul16u_compare::j#1 ) - [205] (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#6 mul16u_compare::@5/(word) mul16u_compare::b#1 ) - [205] (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#6 mul16u_compare::@5/(word) mul16u_compare::a#1 ) - [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b - [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd - [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 - [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 - [210] call muls16u - [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 + [206] (byte) mul16u_compare::j#10 ← phi( mul16u_compare::@1/(byte) 0 mul16u_compare::@5/(byte) mul16u_compare::j#1 ) + [206] (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#6 mul16u_compare::@5/(word) mul16u_compare::b#1 ) + [206] (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#6 mul16u_compare::@5/(word) mul16u_compare::a#1 ) + [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b + [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd + [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 + [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 + [211] call muls16u + [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 to:mul16u_compare::@10 mul16u_compare::@10: scope:[mul16u_compare] from mul16u_compare::@2 - [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 - [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 - [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 - [215] call mul16u - [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 + [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 + [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 + [216] call mul16u + [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 to:mul16u_compare::@11 mul16u_compare::@11: scope:[mul16u_compare] from mul16u_compare::@10 - [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 - [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 - [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 - [220] call mulf16u - [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 + [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 + [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 + [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 + [221] call mulf16u + [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 to:mul16u_compare::@12 mul16u_compare::@12: scope:[mul16u_compare] from mul16u_compare::@11 - [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 - [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 + [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 + [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 to:mul16u_compare::@6 mul16u_compare::@6: scope:[mul16u_compare] from mul16u_compare::@12 - [224] phi() + [225] phi() to:mul16u_compare::@3 mul16u_compare::@3: scope:[mul16u_compare] from mul16u_compare::@12 mul16u_compare::@6 - [225] (byte) mul16u_compare::ok#4 ← phi( mul16u_compare::@12/(byte) 1 mul16u_compare::@6/(byte) 0 ) - [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 + [226] (byte) mul16u_compare::ok#4 ← phi( mul16u_compare::@12/(byte) 1 mul16u_compare::@6/(byte) 0 ) + [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 to:mul16u_compare::@4 mul16u_compare::@15: scope:[mul16u_compare] from mul16u_compare::@3 - [227] phi() + [228] phi() to:mul16u_compare::@4 mul16u_compare::@4: scope:[mul16u_compare] from mul16u_compare::@15 mul16u_compare::@3 - [228] (byte) mul16u_compare::ok#3 ← phi( mul16u_compare::@15/(byte) mul16u_compare::ok#4 mul16u_compare::@3/(byte) 0 ) - [229] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 + [229] (byte) mul16u_compare::ok#3 ← phi( mul16u_compare::@15/(byte) mul16u_compare::ok#4 mul16u_compare::@3/(byte) 0 ) + [230] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 to:mul16u_compare::@7 mul16u_compare::@7: scope:[mul16u_compare] from mul16u_compare::@4 - [230] *((const byte*) BGCOL) ← (byte) 2 - [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 - [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 - [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 - [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 - [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 - [236] call mul16u_error + [231] *((const byte*) BGCOL) ← (byte) 2 + [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 + [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 + [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 + [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 + [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 + [237] call mul16u_error to:mul16u_compare::@return mul16u_compare::@return: scope:[mul16u_compare] from mul16u_compare::@14 mul16u_compare::@7 - [237] return + [238] return to:@return mul16u_compare::@5: scope:[mul16u_compare] from mul16u_compare::@4 - [238] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 - [239] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 + [239] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 + [240] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 to:mul16u_compare::@8 mul16u_compare::@8: scope:[mul16u_compare] from mul16u_compare::@5 - [240] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 - [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 + [241] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 + [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 to:mul16u_compare::@9 mul16u_compare::@9: scope:[mul16u_compare] from mul16u_compare::@8 - [242] phi() - [243] call print_ln + [243] phi() + [244] call print_ln to:mul16u_compare::@13 mul16u_compare::@13: scope:[mul16u_compare] from mul16u_compare::@9 - [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 - [245] call print_str + [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 + [246] call print_str to:mul16u_compare::@14 mul16u_compare::@14: scope:[mul16u_compare] from mul16u_compare::@13 - [246] phi() - [247] call print_ln + [247] phi() + [248] call print_ln to:mul16u_compare::@return (void()) mul16u_error((word) mul16u_error::a , (word) mul16u_error::b , (dword) mul16u_error::ms , (dword) mul16u_error::mn , (dword) mul16u_error::mf) mul16u_error: scope:[mul16u_error] from mul16u_compare::@7 - [248] phi() - [249] call print_str + [249] phi() + [250] call print_str to:mul16u_error::@1 mul16u_error::@1: scope:[mul16u_error] from mul16u_error - [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 - [251] call print_word + [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 + [252] call print_word to:mul16u_error::@2 mul16u_error::@2: scope:[mul16u_error] from mul16u_error::@1 - [252] phi() - [253] call print_str + [253] phi() + [254] call print_str to:mul16u_error::@3 mul16u_error::@3: scope:[mul16u_error] from mul16u_error::@2 - [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 - [255] call print_word + [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 + [256] call print_word to:mul16u_error::@4 mul16u_error::@4: scope:[mul16u_error] from mul16u_error::@3 - [256] phi() - [257] call print_str + [257] phi() + [258] call print_str to:mul16u_error::@5 mul16u_error::@5: scope:[mul16u_error] from mul16u_error::@4 - [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 - [259] call print_dword + [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 + [260] call print_dword to:mul16u_error::@6 mul16u_error::@6: scope:[mul16u_error] from mul16u_error::@5 - [260] phi() - [261] call print_str + [261] phi() + [262] call print_str to:mul16u_error::@7 mul16u_error::@7: scope:[mul16u_error] from mul16u_error::@6 - [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 - [263] call print_dword + [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 + [264] call print_dword to:mul16u_error::@8 mul16u_error::@8: scope:[mul16u_error] from mul16u_error::@7 - [264] phi() - [265] call print_str + [265] phi() + [266] call print_str to:mul16u_error::@9 mul16u_error::@9: scope:[mul16u_error] from mul16u_error::@8 - [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 - [267] call print_dword + [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 + [268] call print_dword to:mul16u_error::@10 mul16u_error::@10: scope:[mul16u_error] from mul16u_error::@9 - [268] phi() - [269] call print_ln + [269] phi() + [270] call print_ln to:mul16u_error::@return mul16u_error::@return: scope:[mul16u_error] from mul16u_error::@10 - [270] return + [271] return to:@return (dword()) muls16u((word) muls16u::a , (word) muls16u::b) muls16u: scope:[muls16u] from mul16u_compare::@2 - [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 + [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 to:muls16u::@2 muls16u::@2: scope:[muls16u] from muls16u muls16u::@3 - [272] (dword) muls16u::m#3 ← phi( muls16u/(byte) 0 muls16u::@3/(dword) muls16u::m#1 ) - [272] (word) muls16u::i#2 ← phi( muls16u/(byte) 0 muls16u::@3/(word) muls16u::i#1 ) - [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 + [273] (dword) muls16u::m#3 ← phi( muls16u/(dword) 0 muls16u::@3/(dword) muls16u::m#1 ) + [273] (word) muls16u::i#2 ← phi( muls16u/(word) 0 muls16u::@3/(word) muls16u::i#1 ) + [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 to:muls16u::@1 muls16u::@1: scope:[muls16u] from muls16u muls16u::@2 - [274] (dword) muls16u::return#0 ← phi( muls16u/(byte) 0 muls16u::@2/(dword) muls16u::m#3 ) + [275] (dword) muls16u::return#0 ← phi( muls16u/(dword) 0 muls16u::@2/(dword) muls16u::m#3 ) to:muls16u::@return muls16u::@return: scope:[muls16u] from muls16u::@1 - [275] return + [276] return to:@return muls16u::@3: scope:[muls16u] from muls16u::@2 - [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 - [277] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 + [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 + [278] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 to:muls16u::@2 (void()) mulf_init() mulf_init: scope:[mulf_init] from main::@1 - [278] phi() + [279] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [279] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [279] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [279] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [279] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [279] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + [280] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [280] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [280] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [280] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [280] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [281] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [281] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) - [281] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [281] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) - [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + [282] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [282] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [282] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [282] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) - [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [285] return + [286] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) - [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) - [288] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [290] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [289] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [291] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [291] phi() + [292] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [292] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [293] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [293] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [294] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [294] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 - [296] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + [295] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [297] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [297] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [298] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [298] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [299] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [299] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [299] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [300] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 - [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 - [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 - [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 - [304] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [306] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [300] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [300] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [301] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [302] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [305] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [307] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 (void()) print_cls() print_cls: scope:[print_cls] from main - [307] phi() - [308] call memset + [308] phi() + [309] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [309] return + [310] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls - [310] phi() + [311] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [311] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [312] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [313] return + [314] return to:@return memset::@2: scope:[memset] from memset::@1 - [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [316] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 @@ -4748,12 +4684,13 @@ VARIABLE REGISTER WEIGHTS (word) mul16u::a#1 2.0 (word) mul16u::a#2 101.0 (word) mul16u::a#3 667.6666666666667 -(word) mul16u::a#6 105.0 +(word) mul16u::a#6 52.5 (word) mul16u::b (word) mul16u::b#0 4.0 (word) mul16u::b#1 202.0 +(word) mul16u::b#2 103.0 (dword) mul16u::mb -(dword) mul16u::mb#0 105.0 +(dword) mul16u::mb#0 4.0 (dword) mul16u::mb#1 2002.0 (dword) mul16u::mb#2 429.2857142857143 (dword) mul16u::res @@ -4966,8 +4903,6 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w#4 4.0 (word) print_word::w#5 4.666666666666666 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#0 -Not consolidating phi with different size mul16u::mb#0 mul16u::b#1 Initial phi equivalence classes [ mul16s_compare::i#12 mul16s_compare::i#1 ] [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] @@ -4987,8 +4922,7 @@ Initial phi equivalence classes [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -[ mul16u::b#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -5080,8 +5014,7 @@ Complete equivalence classes [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -[ mul16u::b#0 ] -[ mul16u::b#1 ] +[ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] @@ -5172,80 +5105,79 @@ Allocated zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s Allocated zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] Allocated zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] Allocated zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] -Allocated zp[2]:41 [ mul16u::b#0 ] -Allocated zp[2]:43 [ mul16u::b#1 ] -Allocated zp[2]:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated zp[4]:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] -Allocated zp[4]:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] -Allocated zp[2]:55 [ muls16s::j#2 muls16s::j#1 ] -Allocated zp[4]:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] -Allocated zp[2]:61 [ muls16s::i#2 muls16s::i#1 ] -Allocated zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Allocated zp[2]:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] -Allocated zp[2]:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] -Allocated zp[1]:68 [ mul16u_compare::j#10 mul16u_compare::j#1 ] -Allocated zp[1]:69 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] -Allocated zp[2]:70 [ muls16u::i#2 muls16u::i#1 ] -Allocated zp[4]:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] -Allocated zp[2]:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] -Allocated zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] -Allocated zp[2]:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Allocated zp[1]:81 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Allocated zp[2]:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] -Allocated zp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Allocated zp[2]:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] -Allocated zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] -Allocated zp[2]:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -Allocated zp[2]:90 [ memset::dst#2 memset::dst#1 ] -Allocated zp[2]:92 [ muls16s::a#0 ] -Allocated zp[2]:94 [ muls16s::b#0 ] -Allocated zp[4]:96 [ muls16s::return#2 ] -Allocated zp[4]:100 [ mul16s_compare::ms#0 ] -Allocated zp[2]:104 [ mul16s::a#0 ] -Allocated zp[2]:106 [ mul16s::b#0 ] -Allocated zp[4]:108 [ mul16s::return#2 ] -Allocated zp[4]:112 [ mul16s_compare::mn#0 ] -Allocated zp[2]:116 [ mulf16s::a#0 ] -Allocated zp[2]:118 [ mulf16s::b#0 ] -Allocated zp[4]:120 [ mulf16s::return#2 ] -Allocated zp[4]:124 [ mul16s_compare::mf#0 ] -Allocated zp[2]:128 [ mul16s_error::a#0 ] -Allocated zp[2]:130 [ mul16s_error::b#0 ] -Allocated zp[4]:132 [ mul16s_error::ms#0 ] -Allocated zp[4]:136 [ mul16s_error::mn#0 ] -Allocated zp[4]:140 [ mul16s_error::mf#0 ] -Allocated zp[1]:144 [ print_byte::$0 ] -Allocated zp[1]:145 [ print_byte::$2 ] -Allocated zp[4]:146 [ mulf16u::return#2 ] -Allocated zp[2]:150 [ mulf16s::$9 ] -Allocated zp[2]:152 [ mulf16s::$16 ] -Allocated zp[2]:154 [ mulf16s::$13 ] -Allocated zp[2]:156 [ mulf16s::$17 ] -Allocated zp[4]:158 [ mulf16s::return#0 ] -Allocated zp[4]:162 [ mulf16u::return#0 ] -Allocated zp[4]:166 [ mul16u::return#2 ] -Allocated zp[2]:170 [ mul16s::$9 ] -Allocated zp[2]:172 [ mul16s::$16 ] -Allocated zp[2]:174 [ mul16s::$13 ] -Allocated zp[2]:176 [ mul16s::$17 ] -Allocated zp[4]:178 [ mul16s::return#0 ] -Allocated zp[1]:182 [ mul16u::$1 ] -Allocated zp[2]:183 [ muls16u::a#0 ] -Allocated zp[2]:185 [ muls16u::b#0 ] -Allocated zp[4]:187 [ muls16u::return#2 ] -Allocated zp[4]:191 [ mul16u_compare::ms#0 ] -Allocated zp[4]:195 [ mul16u::return#3 ] -Allocated zp[4]:199 [ mul16u_compare::mn#0 ] -Allocated zp[4]:203 [ mulf16u::return#3 ] -Allocated zp[4]:207 [ mul16u_compare::mf#0 ] -Allocated zp[2]:211 [ mul16u_error::a#0 ] -Allocated zp[2]:213 [ mul16u_error::b#0 ] -Allocated zp[4]:215 [ mul16u_error::ms#0 ] -Allocated zp[4]:219 [ mul16u_error::mn#0 ] -Allocated zp[4]:223 [ mul16u_error::mf#0 ] -Allocated zp[1]:227 [ mulf_init::$1 ] -Allocated zp[1]:228 [ mulf_init::$4 ] -Allocated zp[1]:229 [ mulf_init::$5 ] +Allocated zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] +Allocated zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] +Allocated zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] +Allocated zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] +Allocated zp[2]:53 [ muls16s::j#2 muls16s::j#1 ] +Allocated zp[4]:55 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] +Allocated zp[2]:59 [ muls16s::i#2 muls16s::i#1 ] +Allocated zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Allocated zp[2]:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] +Allocated zp[2]:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] +Allocated zp[1]:66 [ mul16u_compare::j#10 mul16u_compare::j#1 ] +Allocated zp[1]:67 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] +Allocated zp[2]:68 [ muls16u::i#2 muls16u::i#1 ] +Allocated zp[4]:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] +Allocated zp[2]:74 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +Allocated zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] +Allocated zp[2]:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Allocated zp[1]:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Allocated zp[2]:80 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +Allocated zp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Allocated zp[2]:83 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] +Allocated zp[2]:86 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +Allocated zp[2]:88 [ memset::dst#2 memset::dst#1 ] +Allocated zp[2]:90 [ muls16s::a#0 ] +Allocated zp[2]:92 [ muls16s::b#0 ] +Allocated zp[4]:94 [ muls16s::return#2 ] +Allocated zp[4]:98 [ mul16s_compare::ms#0 ] +Allocated zp[2]:102 [ mul16s::a#0 ] +Allocated zp[2]:104 [ mul16s::b#0 ] +Allocated zp[4]:106 [ mul16s::return#2 ] +Allocated zp[4]:110 [ mul16s_compare::mn#0 ] +Allocated zp[2]:114 [ mulf16s::a#0 ] +Allocated zp[2]:116 [ mulf16s::b#0 ] +Allocated zp[4]:118 [ mulf16s::return#2 ] +Allocated zp[4]:122 [ mul16s_compare::mf#0 ] +Allocated zp[2]:126 [ mul16s_error::a#0 ] +Allocated zp[2]:128 [ mul16s_error::b#0 ] +Allocated zp[4]:130 [ mul16s_error::ms#0 ] +Allocated zp[4]:134 [ mul16s_error::mn#0 ] +Allocated zp[4]:138 [ mul16s_error::mf#0 ] +Allocated zp[1]:142 [ print_byte::$0 ] +Allocated zp[1]:143 [ print_byte::$2 ] +Allocated zp[4]:144 [ mulf16u::return#2 ] +Allocated zp[2]:148 [ mulf16s::$9 ] +Allocated zp[2]:150 [ mulf16s::$16 ] +Allocated zp[2]:152 [ mulf16s::$13 ] +Allocated zp[2]:154 [ mulf16s::$17 ] +Allocated zp[4]:156 [ mulf16s::return#0 ] +Allocated zp[4]:160 [ mulf16u::return#0 ] +Allocated zp[4]:164 [ mul16u::return#2 ] +Allocated zp[2]:168 [ mul16s::$9 ] +Allocated zp[2]:170 [ mul16s::$16 ] +Allocated zp[2]:172 [ mul16s::$13 ] +Allocated zp[2]:174 [ mul16s::$17 ] +Allocated zp[4]:176 [ mul16s::return#0 ] +Allocated zp[1]:180 [ mul16u::$1 ] +Allocated zp[2]:181 [ muls16u::a#0 ] +Allocated zp[2]:183 [ muls16u::b#0 ] +Allocated zp[4]:185 [ muls16u::return#2 ] +Allocated zp[4]:189 [ mul16u_compare::ms#0 ] +Allocated zp[4]:193 [ mul16u::return#3 ] +Allocated zp[4]:197 [ mul16u_compare::mn#0 ] +Allocated zp[4]:201 [ mulf16u::return#3 ] +Allocated zp[4]:205 [ mul16u_compare::mf#0 ] +Allocated zp[2]:209 [ mul16u_error::a#0 ] +Allocated zp[2]:211 [ mul16u_error::b#0 ] +Allocated zp[4]:213 [ mul16u_error::ms#0 ] +Allocated zp[4]:217 [ mul16u_error::mn#0 ] +Allocated zp[4]:221 [ mul16u_error::mf#0 ] +Allocated zp[1]:225 [ mulf_init::$1 ] +Allocated zp[1]:226 [ mulf_init::$4 ] +Allocated zp[1]:227 [ mulf_init::$5 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -5279,7 +5211,7 @@ main: { lda #5 sta BGCOL // [5] call print_cls - // [307] phi from main to print_cls [phi:main->print_cls] + // [308] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -5288,7 +5220,7 @@ main: { // main::@1 __b1: // [7] call mulf_init - // [278] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [279] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] mulf_init_from___b1: jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -5297,7 +5229,7 @@ main: { // main::@2 __b2: // [9] call mul16u_compare - // [202] phi from main::@2 to mul16u_compare [phi:main::@2->mul16u_compare] + // [203] phi from main::@2 to mul16u_compare [phi:main::@2->mul16u_compare] mul16u_compare_from___b2: jsr mul16u_compare // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -5318,9 +5250,9 @@ main: { mul16s_compare: { .label a = 3 .label b = 5 - .label ms = $64 - .label mn = $70 - .label mf = $7c + .label ms = $62 + .label mn = $6e + .label mf = $7a .label j = 7 .label i = 2 .label ok = 8 @@ -5753,13 +5685,13 @@ print_str: { jmp __b1_from___b2 } // mul16s_error -// mul16s_error(signed word zp($80) a, signed word zp($82) b, signed dword zp($84) ms, signed dword zp($88) mn, signed dword zp($8c) mf) +// mul16s_error(signed word zp($7e) a, signed word zp($80) b, signed dword zp($82) ms, signed dword zp($86) mn, signed dword zp($8a) mf) mul16s_error: { - .label a = $80 - .label b = $82 - .label ms = $84 - .label mn = $88 - .label mf = $8c + .label a = $7e + .label b = $80 + .label ms = $82 + .label mn = $86 + .label mf = $8a // [72] call print_str // [64] phi from mul16s_error to print_str [phi:mul16s_error->print_str] print_str_from_mul16s_error: @@ -6102,8 +6034,8 @@ print_word: { // Print a byte as HEX // print_byte(byte zp($1a) b) print_byte: { - .label __0 = $90 - .label __2 = $91 + .label __0 = $8e + .label __2 = $8f .label b = $1a // [122] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b @@ -6218,17 +6150,17 @@ print_sword: { // mulf16s // Fast multiply two signed words to a signed double word result // Fixes offsets introduced by using unsigned multiplication -// mulf16s(signed word zp($74) a, signed word zp($76) b) +// mulf16s(signed word zp($72) a, signed word zp($74) b) mulf16s: { - .label __9 = $96 - .label __13 = $9a - .label __16 = $98 - .label __17 = $9c + .label __9 = $94 + .label __13 = $98 + .label __16 = $96 + .label __17 = $9a .label m = $1d - .label return = $9e - .label a = $74 - .label b = $76 - .label return_1 = $78 + .label return = $9c + .label a = $72 + .label b = $74 + .label return_1 = $76 // [140] (word) mulf16u::a#0 ← (word)(signed word) mulf16s::a#0 -- vwuz1=vwuz2 lda.z a sta.z mulf16u.a @@ -6351,11 +6283,11 @@ mulf16u: { .label memA = $f8 .label memB = $fa .label memR = $fc - .label return = $a2 + .label return = $a0 .label a = $21 .label b = $23 - .label return_1 = $92 - .label return_2 = $cb + .label return_1 = $90 + .label return_2 = $c9 // [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 -- _deref_pwuc1=vwuz1 lda.z a sta memA @@ -6477,17 +6409,17 @@ mulf16u: { // mul16s // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zp($68) a, signed word zp($6a) b) +// mul16s(signed word zp($66) a, signed word zp($68) b) mul16s: { - .label __9 = $aa - .label __13 = $ae - .label __16 = $ac - .label __17 = $b0 + .label __9 = $a8 + .label __13 = $ac + .label __16 = $aa + .label __17 = $ae .label m = $25 - .label return = $b2 - .label a = $68 - .label b = $6a - .label return_1 = $6c + .label return = $b0 + .label a = $66 + .label b = $68 + .label return_1 = $6a // [163] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a @@ -6502,14 +6434,7 @@ mul16s: { // [180] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [180] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [180] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [180] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // [166] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res @@ -6611,31 +6536,40 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($2d) a, word zp($29) b) +// mul16u(word zp($2b) a, word zp($29) b) mul16u: { - .label __1 = $b6 - .label mb = $33 - .label a = $2d - .label res = $2f + .label __1 = $b4 + .label mb = $31 + .label a = $2b + .label res = $2d .label b = $29 - .label return = $a6 - .label b_1 = $2b - .label return_1 = $c3 - // [181] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + .label return = $a4 + .label return_1 = $c1 + // [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [182] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [181] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [181] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [182] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [182] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [181] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [182] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -6643,22 +6577,22 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [183] return + // [184] return rts // mul16u::@2 __b2: - // [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 + // [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [185] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 + // [186] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -6672,63 +6606,65 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [187] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [188] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [187] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [188] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [188] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [189] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [189] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [190] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [181] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [182] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [181] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [181] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [181] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [182] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [182] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [182] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // muls16s // Slow multiplication of signed words // Perform a signed multiplication by repeated addition/subtraction -// muls16s(signed word zp($5c) a, signed word zp($5e) b) +// muls16s(signed word zp($5a) a, signed word zp($5c) b) muls16s: { - .label m = $39 - .label j = $37 - .label return = $39 - .label i = $3d - .label a = $5c - .label b = $5e - .label return_1 = $60 - // [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 -- vwsz1_lt_0_then_la1 + .label m = $37 + .label j = $35 + .label return = $37 + .label i = $3b + .label a = $5a + .label b = $5c + .label return_1 = $5e + // [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 -- vwsz1_lt_0_then_la1 lda.z a+1 bmi __b5_from_muls16s jmp __b2 // muls16s::@2 __b2: - // [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 -- vwsz1_le_0_then_la1 + // [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 -- vwsz1_le_0_then_la1 lda.z a+1 bmi __b1_from___b2 bne !+ lda.z a beq __b1_from___b2 !: - // [192] phi from muls16s::@2 to muls16s::@3 [phi:muls16s::@2->muls16s::@3] + // [193] phi from muls16s::@2 to muls16s::@3 [phi:muls16s::@2->muls16s::@3] __b3_from___b2: - // [192] phi (signed dword) muls16s::m#3 = (signed byte) 0 [phi:muls16s::@2->muls16s::@3#0] -- vdsz1=vbsc1 - lda #0 + // [193] phi (signed dword) muls16s::m#3 = (signed dword) 0 [phi:muls16s::@2->muls16s::@3#0] -- vdsz1=vdsc1 + lda #<0 sta.z m - lda #0 + lda #>0 sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [192] phi (signed word) muls16s::j#2 = (signed byte) 0 [phi:muls16s::@2->muls16s::@3#1] -- vwsz1=vbsc1 + // [193] phi (signed word) muls16s::j#2 = (signed word) 0 [phi:muls16s::@2->muls16s::@3#1] -- vwsz1=vwsc1 lda #<0 sta.z j lda #>0 @@ -6736,26 +6672,28 @@ muls16s: { jmp __b3 // muls16s::@3 __b3: - // [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 -- vwsz1_neq_vwsz2_then_la1 + // [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 -- vwsz1_neq_vwsz2_then_la1 lda.z j+1 cmp.z a+1 bne __b4 lda.z j cmp.z a bne __b4 - // [194] phi from muls16s::@3 muls16s::@5 to muls16s::@1 [phi:muls16s::@3/muls16s::@5->muls16s::@1] + // [195] phi from muls16s::@3 muls16s::@5 to muls16s::@1 [phi:muls16s::@3/muls16s::@5->muls16s::@1] __b1_from___b3: __b1_from___b5: - // [194] phi (signed dword) muls16s::return#0 = (signed dword) muls16s::m#3 [phi:muls16s::@3/muls16s::@5->muls16s::@1#0] -- register_copy + // [195] phi (signed dword) muls16s::return#0 = (signed dword) muls16s::m#3 [phi:muls16s::@3/muls16s::@5->muls16s::@1#0] -- register_copy jmp __b1 - // [194] phi from muls16s::@2 to muls16s::@1 [phi:muls16s::@2->muls16s::@1] + // [195] phi from muls16s::@2 to muls16s::@1 [phi:muls16s::@2->muls16s::@1] __b1_from___b2: - // [194] phi (signed dword) muls16s::return#0 = (signed byte) 0 [phi:muls16s::@2->muls16s::@1#0] -- vdsz1=vbsc1 - lda #0 + // [195] phi (signed dword) muls16s::return#0 = (signed dword) 0 [phi:muls16s::@2->muls16s::@1#0] -- vdsz1=vdsc1 + lda #<0 sta.z return - lda #0 + lda #>0 sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 jmp __b1 // muls16s::@1 @@ -6763,11 +6701,11 @@ muls16s: { jmp __breturn // muls16s::@return __breturn: - // [195] return + // [196] return rts // muls16s::@4 __b4: - // [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 -- vdsz1=vdsz1_plus_vwsz2 + // [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 -- vdsz1=vdsz1_plus_vwsz2 lda.z b+1 ora #$7f bmi !+ @@ -6787,26 +6725,28 @@ muls16s: { lda.z m+3 adc.z $ff sta.z m+3 - // [197] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 -- vwsz1=_inc_vwsz1 + // [198] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 -- vwsz1=_inc_vwsz1 inc.z j bne !+ inc.z j+1 !: - // [192] phi from muls16s::@4 to muls16s::@3 [phi:muls16s::@4->muls16s::@3] + // [193] phi from muls16s::@4 to muls16s::@3 [phi:muls16s::@4->muls16s::@3] __b3_from___b4: - // [192] phi (signed dword) muls16s::m#3 = (signed dword) muls16s::m#1 [phi:muls16s::@4->muls16s::@3#0] -- register_copy - // [192] phi (signed word) muls16s::j#2 = (signed word) muls16s::j#1 [phi:muls16s::@4->muls16s::@3#1] -- register_copy + // [193] phi (signed dword) muls16s::m#3 = (signed dword) muls16s::m#1 [phi:muls16s::@4->muls16s::@3#0] -- register_copy + // [193] phi (signed word) muls16s::j#2 = (signed word) muls16s::j#1 [phi:muls16s::@4->muls16s::@3#1] -- register_copy jmp __b3 - // [198] phi from muls16s to muls16s::@5 [phi:muls16s->muls16s::@5] + // [199] phi from muls16s to muls16s::@5 [phi:muls16s->muls16s::@5] __b5_from_muls16s: - // [198] phi (signed dword) muls16s::m#5 = (signed byte) 0 [phi:muls16s->muls16s::@5#0] -- vdsz1=vbsc1 - lda #0 + // [199] phi (signed dword) muls16s::m#5 = (signed dword) 0 [phi:muls16s->muls16s::@5#0] -- vdsz1=vdsc1 + lda #<0 sta.z m - lda #0 + lda #>0 sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [198] phi (signed word) muls16s::i#2 = (signed byte) 0 [phi:muls16s->muls16s::@5#1] -- vwsz1=vbsc1 + // [199] phi (signed word) muls16s::i#2 = (signed word) 0 [phi:muls16s->muls16s::@5#1] -- vwsz1=vwsc1 lda #<0 sta.z i lda #>0 @@ -6814,7 +6754,7 @@ muls16s: { jmp __b5 // muls16s::@5 __b5: - // [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 -- vwsz1_neq_vwsz2_then_la1 + // [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 -- vwsz1_neq_vwsz2_then_la1 lda.z i+1 cmp.z a+1 bne __b6 @@ -6824,7 +6764,7 @@ muls16s: { jmp __b1_from___b5 // muls16s::@6 __b6: - // [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 -- vdsz1=vdsz1_minus_vwsz2 + // [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 -- vdsz1=vdsz1_minus_vwsz2 lda.z b+1 ora #$7f bmi !+ @@ -6844,60 +6784,60 @@ muls16s: { lda.z m+3 sbc.z $ff sta.z m+3 - // [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 -- vwsz1=_dec_vwsz1 + // [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 -- vwsz1=_dec_vwsz1 lda.z i bne !+ dec.z i+1 !: dec.z i - // [198] phi from muls16s::@6 to muls16s::@5 [phi:muls16s::@6->muls16s::@5] + // [199] phi from muls16s::@6 to muls16s::@5 [phi:muls16s::@6->muls16s::@5] __b5_from___b6: - // [198] phi (signed dword) muls16s::m#5 = (signed dword) muls16s::m#2 [phi:muls16s::@6->muls16s::@5#0] -- register_copy - // [198] phi (signed word) muls16s::i#2 = (signed word) muls16s::i#1 [phi:muls16s::@6->muls16s::@5#1] -- register_copy + // [199] phi (signed dword) muls16s::m#5 = (signed dword) muls16s::m#2 [phi:muls16s::@6->muls16s::@5#0] -- register_copy + // [199] phi (signed word) muls16s::i#2 = (signed word) muls16s::i#1 [phi:muls16s::@6->muls16s::@5#1] -- register_copy jmp __b5 } // mul16u_compare // Perform many possible word multiplications (slow and fast) and compare the results mul16u_compare: { - .label a = $40 - .label b = $42 - .label ms = $bf - .label mn = $c7 - .label mf = $cf - .label j = $44 - .label i = $3f - .label ok = $45 - // [203] phi from mul16u_compare to mul16u_compare::@1 [phi:mul16u_compare->mul16u_compare::@1] + .label a = $3e + .label b = $40 + .label ms = $bd + .label mn = $c5 + .label mf = $cd + .label j = $42 + .label i = $3d + .label ok = $43 + // [204] phi from mul16u_compare to mul16u_compare::@1 [phi:mul16u_compare->mul16u_compare::@1] __b1_from_mul16u_compare: - // [203] phi (byte) mul16u_compare::i#12 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#0] -- vbuz1=vbuc1 + // [204] phi (byte) mul16u_compare::i#12 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [203] phi (word) mul16u_compare::b#6 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#1] -- vwuz1=vbuc1 + // [204] phi (word) mul16u_compare::b#6 = (word) 0 [phi:mul16u_compare->mul16u_compare::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z b lda #>0 sta.z b+1 - // [203] phi (word) mul16u_compare::a#6 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#2] -- vwuz1=vbuc1 + // [204] phi (word) mul16u_compare::a#6 = (word) 0 [phi:mul16u_compare->mul16u_compare::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z a lda #>0 sta.z a+1 - // [203] phi (byte*) print_char_cursor#145 = (byte*) 1024 [phi:mul16u_compare->mul16u_compare::@1#3] -- pbuz1=pbuc1 + // [204] phi (byte*) print_char_cursor#145 = (byte*) 1024 [phi:mul16u_compare->mul16u_compare::@1#3] -- pbuz1=pbuc1 lda #<$400 sta.z print_char_cursor lda #>$400 sta.z print_char_cursor+1 jmp __b1 - // [203] phi from mul16u_compare::@8 to mul16u_compare::@1 [phi:mul16u_compare::@8->mul16u_compare::@1] + // [204] phi from mul16u_compare::@8 to mul16u_compare::@1 [phi:mul16u_compare::@8->mul16u_compare::@1] __b1_from___b8: - // [203] phi (byte) mul16u_compare::i#12 = (byte) mul16u_compare::i#1 [phi:mul16u_compare::@8->mul16u_compare::@1#0] -- register_copy - // [203] phi (word) mul16u_compare::b#6 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@8->mul16u_compare::@1#1] -- register_copy - // [203] phi (word) mul16u_compare::a#6 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@8->mul16u_compare::@1#2] -- register_copy - // [203] phi (byte*) print_char_cursor#145 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@8->mul16u_compare::@1#3] -- register_copy + // [204] phi (byte) mul16u_compare::i#12 = (byte) mul16u_compare::i#1 [phi:mul16u_compare::@8->mul16u_compare::@1#0] -- register_copy + // [204] phi (word) mul16u_compare::b#6 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@8->mul16u_compare::@1#1] -- register_copy + // [204] phi (word) mul16u_compare::a#6 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@8->mul16u_compare::@1#2] -- register_copy + // [204] phi (byte*) print_char_cursor#145 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@8->mul16u_compare::@1#3] -- register_copy jmp __b1 // mul16u_compare::@1 __b1: - // [204] call print_str + // [205] call print_str // [64] phi from mul16u_compare::@1 to print_str [phi:mul16u_compare::@1->print_str] print_str_from___b1: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#145 [phi:mul16u_compare::@1->print_str#0] -- register_copy @@ -6907,23 +6847,23 @@ mul16u_compare: { lda #>str sta.z print_str.str+1 jsr print_str - // [205] phi from mul16u_compare::@1 to mul16u_compare::@2 [phi:mul16u_compare::@1->mul16u_compare::@2] + // [206] phi from mul16u_compare::@1 to mul16u_compare::@2 [phi:mul16u_compare::@1->mul16u_compare::@2] __b2_from___b1: - // [205] phi (byte) mul16u_compare::j#10 = (byte) 0 [phi:mul16u_compare::@1->mul16u_compare::@2#0] -- vbuz1=vbuc1 + // [206] phi (byte) mul16u_compare::j#10 = (byte) 0 [phi:mul16u_compare::@1->mul16u_compare::@2#0] -- vbuz1=vbuc1 lda #0 sta.z j - // [205] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#6 [phi:mul16u_compare::@1->mul16u_compare::@2#1] -- register_copy - // [205] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#6 [phi:mul16u_compare::@1->mul16u_compare::@2#2] -- register_copy + // [206] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#6 [phi:mul16u_compare::@1->mul16u_compare::@2#1] -- register_copy + // [206] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#6 [phi:mul16u_compare::@1->mul16u_compare::@2#2] -- register_copy jmp __b2 - // [205] phi from mul16u_compare::@5 to mul16u_compare::@2 [phi:mul16u_compare::@5->mul16u_compare::@2] + // [206] phi from mul16u_compare::@5 to mul16u_compare::@2 [phi:mul16u_compare::@5->mul16u_compare::@2] __b2_from___b5: - // [205] phi (byte) mul16u_compare::j#10 = (byte) mul16u_compare::j#1 [phi:mul16u_compare::@5->mul16u_compare::@2#0] -- register_copy - // [205] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@5->mul16u_compare::@2#1] -- register_copy - // [205] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@5->mul16u_compare::@2#2] -- register_copy + // [206] phi (byte) mul16u_compare::j#10 = (byte) mul16u_compare::j#1 [phi:mul16u_compare::@5->mul16u_compare::@2#0] -- register_copy + // [206] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@5->mul16u_compare::@2#1] -- register_copy + // [206] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@5->mul16u_compare::@2#2] -- register_copy jmp __b2 // mul16u_compare::@2 __b2: - // [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b -- vwuz1=vwuz1_plus_vwuc1 + // [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b -- vwuz1=vwuz1_plus_vwuc1 clc lda.z a adc #<$d2b @@ -6931,7 +6871,7 @@ mul16u_compare: { lda.z a+1 adc #>$d2b sta.z a+1 - // [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd -- vwuz1=vwuz1_plus_vwuc1 + // [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd -- vwuz1=vwuz1_plus_vwuc1 clc lda.z b adc #<$ffd @@ -6939,19 +6879,19 @@ mul16u_compare: { lda.z b+1 adc #>$ffd sta.z b+1 - // [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z muls16u.a lda.z a+1 sta.z muls16u.a+1 - // [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 + // [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 lda.z b sta.z muls16u.b lda.z b+1 sta.z muls16u.b+1 - // [210] call muls16u + // [211] call muls16u jsr muls16u - // [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 -- vduz1=vduz2 + // [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 -- vduz1=vduz2 lda.z muls16u.return sta.z muls16u.return_1 lda.z muls16u.return+1 @@ -6963,7 +6903,7 @@ mul16u_compare: { jmp __b10 // mul16u_compare::@10 __b10: - // [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 -- vduz1=vduz2 + // [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 -- vduz1=vduz2 lda.z muls16u.return_1 sta.z ms lda.z muls16u.return_1+1 @@ -6972,30 +6912,23 @@ mul16u_compare: { sta.z ms+2 lda.z muls16u.return_1+3 sta.z ms+3 - // [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a lda.z a+1 sta.z mul16u.a+1 - // [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 + // [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 lda.z b - sta.z mul16u.b_1 + sta.z mul16u.b lda.z b+1 - sta.z mul16u.b_1+1 - // [215] call mul16u + sta.z mul16u.b+1 + // [216] call mul16u // [180] phi from mul16u_compare::@10 to mul16u [phi:mul16u_compare::@10->mul16u] mul16u_from___b10: // [180] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mul16u_compare::@10->mul16u#0] -- register_copy - // [180] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mul16u_compare::@10->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [180] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mul16u_compare::@10->mul16u#1] -- register_copy jsr mul16u - // [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 + // [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res sta.z mul16u.return_1 lda.z mul16u.res+1 @@ -7007,7 +6940,7 @@ mul16u_compare: { jmp __b11 // mul16u_compare::@11 __b11: - // [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 -- vduz1=vduz2 + // [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 -- vduz1=vduz2 lda.z mul16u.return_1 sta.z mn lda.z mul16u.return_1+1 @@ -7016,23 +6949,23 @@ mul16u_compare: { sta.z mn+2 lda.z mul16u.return_1+3 sta.z mn+3 - // [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mulf16u.a lda.z a+1 sta.z mulf16u.a+1 - // [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 + // [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 lda.z b sta.z mulf16u.b lda.z b+1 sta.z mulf16u.b+1 - // [220] call mulf16u + // [221] call mulf16u // [157] phi from mul16u_compare::@11 to mulf16u [phi:mul16u_compare::@11->mulf16u] mulf16u_from___b11: // [157] phi (word) mulf16u::b#2 = (word) mulf16u::b#1 [phi:mul16u_compare::@11->mulf16u#0] -- register_copy // [157] phi (word) mulf16u::a#2 = (word) mulf16u::a#1 [phi:mul16u_compare::@11->mulf16u#1] -- register_copy jsr mulf16u - // [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 -- vduz1=vduz2 + // [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 -- vduz1=vduz2 lda.z mulf16u.return sta.z mulf16u.return_2 lda.z mulf16u.return+1 @@ -7044,7 +6977,7 @@ mul16u_compare: { jmp __b12 // mul16u_compare::@12 __b12: - // [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 -- vduz1=vduz2 + // [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 -- vduz1=vduz2 lda.z mulf16u.return_2 sta.z mf lda.z mulf16u.return_2+1 @@ -7053,7 +6986,7 @@ mul16u_compare: { sta.z mf+2 lda.z mulf16u.return_2+3 sta.z mf+3 - // [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 -- vduz1_eq_vduz2_then_la1 + // [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 -- vduz1_eq_vduz2_then_la1 lda.z ms cmp.z mf bne !+ @@ -7067,26 +7000,26 @@ mul16u_compare: { cmp.z mf+3 beq __b3_from___b12 !: - // [224] phi from mul16u_compare::@12 to mul16u_compare::@6 [phi:mul16u_compare::@12->mul16u_compare::@6] + // [225] phi from mul16u_compare::@12 to mul16u_compare::@6 [phi:mul16u_compare::@12->mul16u_compare::@6] __b6_from___b12: jmp __b6 // mul16u_compare::@6 __b6: - // [225] phi from mul16u_compare::@6 to mul16u_compare::@3 [phi:mul16u_compare::@6->mul16u_compare::@3] + // [226] phi from mul16u_compare::@6 to mul16u_compare::@3 [phi:mul16u_compare::@6->mul16u_compare::@3] __b3_from___b6: - // [225] phi (byte) mul16u_compare::ok#4 = (byte) 0 [phi:mul16u_compare::@6->mul16u_compare::@3#0] -- vbuz1=vbuc1 + // [226] phi (byte) mul16u_compare::ok#4 = (byte) 0 [phi:mul16u_compare::@6->mul16u_compare::@3#0] -- vbuz1=vbuc1 lda #0 sta.z ok jmp __b3 - // [225] phi from mul16u_compare::@12 to mul16u_compare::@3 [phi:mul16u_compare::@12->mul16u_compare::@3] + // [226] phi from mul16u_compare::@12 to mul16u_compare::@3 [phi:mul16u_compare::@12->mul16u_compare::@3] __b3_from___b12: - // [225] phi (byte) mul16u_compare::ok#4 = (byte) 1 [phi:mul16u_compare::@12->mul16u_compare::@3#0] -- vbuz1=vbuc1 + // [226] phi (byte) mul16u_compare::ok#4 = (byte) 1 [phi:mul16u_compare::@12->mul16u_compare::@3#0] -- vbuz1=vbuc1 lda #1 sta.z ok jmp __b3 // mul16u_compare::@3 __b3: - // [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 -- vduz1_eq_vduz2_then_la1 + // [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 -- vduz1_eq_vduz2_then_la1 lda.z ms cmp.z mn bne !+ @@ -7100,44 +7033,44 @@ mul16u_compare: { cmp.z mn+3 beq __b15_from___b3 !: - // [228] phi from mul16u_compare::@3 to mul16u_compare::@4 [phi:mul16u_compare::@3->mul16u_compare::@4] + // [229] phi from mul16u_compare::@3 to mul16u_compare::@4 [phi:mul16u_compare::@3->mul16u_compare::@4] __b4_from___b3: - // [228] phi (byte) mul16u_compare::ok#3 = (byte) 0 [phi:mul16u_compare::@3->mul16u_compare::@4#0] -- vbuz1=vbuc1 + // [229] phi (byte) mul16u_compare::ok#3 = (byte) 0 [phi:mul16u_compare::@3->mul16u_compare::@4#0] -- vbuz1=vbuc1 lda #0 sta.z ok jmp __b4 - // [227] phi from mul16u_compare::@3 to mul16u_compare::@15 [phi:mul16u_compare::@3->mul16u_compare::@15] + // [228] phi from mul16u_compare::@3 to mul16u_compare::@15 [phi:mul16u_compare::@3->mul16u_compare::@15] __b15_from___b3: jmp __b15 // mul16u_compare::@15 __b15: - // [228] phi from mul16u_compare::@15 to mul16u_compare::@4 [phi:mul16u_compare::@15->mul16u_compare::@4] + // [229] phi from mul16u_compare::@15 to mul16u_compare::@4 [phi:mul16u_compare::@15->mul16u_compare::@4] __b4_from___b15: - // [228] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@15->mul16u_compare::@4#0] -- register_copy + // [229] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@15->mul16u_compare::@4#0] -- register_copy jmp __b4 // mul16u_compare::@4 __b4: - // [229] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 -- vbuz1_neq_0_then_la1 + // [230] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 -- vbuz1_neq_0_then_la1 lda.z ok cmp #0 bne __b5 jmp __b7 // mul16u_compare::@7 __b7: - // [230] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [231] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mul16u_error.a lda.z a+1 sta.z mul16u_error.a+1 - // [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 + // [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 -- vwuz1=vwuz2 lda.z b sta.z mul16u_error.b lda.z b+1 sta.z mul16u_error.b+1 - // [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 -- vduz1=vduz2 + // [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 -- vduz1=vduz2 lda.z ms sta.z mul16u_error.ms lda.z ms+1 @@ -7146,7 +7079,7 @@ mul16u_compare: { sta.z mul16u_error.ms+2 lda.z ms+3 sta.z mul16u_error.ms+3 - // [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 -- vduz1=vduz2 + // [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 -- vduz1=vduz2 lda.z mn sta.z mul16u_error.mn lda.z mn+1 @@ -7155,7 +7088,7 @@ mul16u_compare: { sta.z mul16u_error.mn+2 lda.z mn+3 sta.z mul16u_error.mn+3 - // [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 -- vduz1=vduz2 + // [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 -- vduz1=vduz2 lda.z mf sta.z mul16u_error.mf lda.z mf+1 @@ -7164,38 +7097,38 @@ mul16u_compare: { sta.z mul16u_error.mf+2 lda.z mf+3 sta.z mul16u_error.mf+3 - // [236] call mul16u_error - // [248] phi from mul16u_compare::@7 to mul16u_error [phi:mul16u_compare::@7->mul16u_error] + // [237] call mul16u_error + // [249] phi from mul16u_compare::@7 to mul16u_error [phi:mul16u_compare::@7->mul16u_error] mul16u_error_from___b7: jsr mul16u_error jmp __breturn // mul16u_compare::@return __breturn: - // [237] return + // [238] return rts // mul16u_compare::@5 __b5: - // [238] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 -- vbuz1=_inc_vbuz1 + // [239] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 -- vbuz1=_inc_vbuz1 inc.z j - // [239] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 -- vbuz1_neq_vbuc1_then_la1 + // [240] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z j bne __b2_from___b5 jmp __b8 // mul16u_compare::@8 __b8: - // [240] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 -- vbuz1=_inc_vbuz1 + // [241] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 -- vbuz1=_inc_vbuz1 inc.z i - // [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 -- vbuz1_neq_vbuc1_then_la1 + // [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b8 - // [242] phi from mul16u_compare::@8 to mul16u_compare::@9 [phi:mul16u_compare::@8->mul16u_compare::@9] + // [243] phi from mul16u_compare::@8 to mul16u_compare::@9 [phi:mul16u_compare::@8->mul16u_compare::@9] __b9_from___b8: jmp __b9 // mul16u_compare::@9 __b9: - // [243] call print_ln + // [244] call print_ln // [59] phi from mul16u_compare::@9 to print_ln [phi:mul16u_compare::@9->print_ln] print_ln_from___b9: // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@9->print_ln#0] -- register_copy @@ -7208,12 +7141,12 @@ mul16u_compare: { jmp __b13 // mul16u_compare::@13 __b13: - // [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 - // [245] call print_str + // [246] call print_str // [64] phi from mul16u_compare::@13 to print_str [phi:mul16u_compare::@13->print_str] print_str_from___b13: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#187 [phi:mul16u_compare::@13->print_str#0] -- register_copy @@ -7223,12 +7156,12 @@ mul16u_compare: { lda #>str1 sta.z print_str.str+1 jsr print_str - // [246] phi from mul16u_compare::@13 to mul16u_compare::@14 [phi:mul16u_compare::@13->mul16u_compare::@14] + // [247] phi from mul16u_compare::@13 to mul16u_compare::@14 [phi:mul16u_compare::@13->mul16u_compare::@14] __b14_from___b13: jmp __b14 // mul16u_compare::@14 __b14: - // [247] call print_ln + // [248] call print_ln // [59] phi from mul16u_compare::@14 to print_ln [phi:mul16u_compare::@14->print_ln] print_ln_from___b14: // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@14->print_ln#0] -- register_copy @@ -7239,14 +7172,14 @@ mul16u_compare: { .byte 0 } // mul16u_error -// mul16u_error(word zp($d3) a, word zp($d5) b, dword zp($d7) ms, dword zp($db) mn, dword zp($df) mf) +// mul16u_error(word zp($d1) a, word zp($d3) b, dword zp($d5) ms, dword zp($d9) mn, dword zp($dd) mf) mul16u_error: { - .label a = $d3 - .label b = $d5 - .label ms = $d7 - .label mn = $db - .label mf = $df - // [249] call print_str + .label a = $d1 + .label b = $d3 + .label ms = $d5 + .label mn = $d9 + .label mf = $dd + // [250] call print_str // [64] phi from mul16u_error to print_str [phi:mul16u_error->print_str] print_str_from_mul16u_error: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#132 [phi:mul16u_error->print_str#0] -- register_copy @@ -7259,23 +7192,23 @@ mul16u_error: { jmp __b1 // mul16u_error::@1 __b1: - // [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 -- vwuz1=vwuz2 + // [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 -- vwuz1=vwuz2 lda.z a sta.z print_word.w lda.z a+1 sta.z print_word.w+1 - // [251] call print_word + // [252] call print_word // [115] phi from mul16u_error::@1 to print_word [phi:mul16u_error::@1->print_word] print_word_from___b1: // [115] phi (byte*) print_char_cursor#137 = (byte*) print_char_cursor#132 [phi:mul16u_error::@1->print_word#0] -- register_copy // [115] phi (word) print_word::w#5 = (word) print_word::w#3 [phi:mul16u_error::@1->print_word#1] -- register_copy jsr print_word - // [252] phi from mul16u_error::@1 to mul16u_error::@2 [phi:mul16u_error::@1->mul16u_error::@2] + // [253] phi from mul16u_error::@1 to mul16u_error::@2 [phi:mul16u_error::@1->mul16u_error::@2] __b2_from___b1: jmp __b2 // mul16u_error::@2 __b2: - // [253] call print_str + // [254] call print_str // [64] phi from mul16u_error::@2 to print_str [phi:mul16u_error::@2->print_str] print_str_from___b2: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@2->print_str#0] -- register_copy @@ -7288,23 +7221,23 @@ mul16u_error: { jmp __b3 // mul16u_error::@3 __b3: - // [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 -- vwuz1=vwuz2 + // [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 -- vwuz1=vwuz2 lda.z b sta.z print_word.w lda.z b+1 sta.z print_word.w+1 - // [255] call print_word + // [256] call print_word // [115] phi from mul16u_error::@3 to print_word [phi:mul16u_error::@3->print_word] print_word_from___b3: // [115] phi (byte*) print_char_cursor#137 = (byte*) print_char_cursor#132 [phi:mul16u_error::@3->print_word#0] -- register_copy // [115] phi (word) print_word::w#5 = (word) print_word::w#4 [phi:mul16u_error::@3->print_word#1] -- register_copy jsr print_word - // [256] phi from mul16u_error::@3 to mul16u_error::@4 [phi:mul16u_error::@3->mul16u_error::@4] + // [257] phi from mul16u_error::@3 to mul16u_error::@4 [phi:mul16u_error::@3->mul16u_error::@4] __b4_from___b3: jmp __b4 // mul16u_error::@4 __b4: - // [257] call print_str + // [258] call print_str // [64] phi from mul16u_error::@4 to print_str [phi:mul16u_error::@4->print_str] print_str_from___b4: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@4->print_str#0] -- register_copy @@ -7317,7 +7250,7 @@ mul16u_error: { jmp __b5 // mul16u_error::@5 __b5: - // [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 -- vduz1=vduz2 + // [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 -- vduz1=vduz2 lda.z ms sta.z print_dword.dw lda.z ms+1 @@ -7326,18 +7259,18 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z ms+3 sta.z print_dword.dw+3 - // [259] call print_dword + // [260] call print_dword // [109] phi from mul16u_error::@5 to print_dword [phi:mul16u_error::@5->print_dword] print_dword_from___b5: // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@5->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#1 [phi:mul16u_error::@5->print_dword#1] -- register_copy jsr print_dword - // [260] phi from mul16u_error::@5 to mul16u_error::@6 [phi:mul16u_error::@5->mul16u_error::@6] + // [261] phi from mul16u_error::@5 to mul16u_error::@6 [phi:mul16u_error::@5->mul16u_error::@6] __b6_from___b5: jmp __b6 // mul16u_error::@6 __b6: - // [261] call print_str + // [262] call print_str // [64] phi from mul16u_error::@6 to print_str [phi:mul16u_error::@6->print_str] print_str_from___b6: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@6->print_str#0] -- register_copy @@ -7350,7 +7283,7 @@ mul16u_error: { jmp __b7 // mul16u_error::@7 __b7: - // [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 -- vduz1=vduz2 + // [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 -- vduz1=vduz2 lda.z mn sta.z print_dword.dw lda.z mn+1 @@ -7359,18 +7292,18 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z mn+3 sta.z print_dword.dw+3 - // [263] call print_dword + // [264] call print_dword // [109] phi from mul16u_error::@7 to print_dword [phi:mul16u_error::@7->print_dword] print_dword_from___b7: // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@7->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#2 [phi:mul16u_error::@7->print_dword#1] -- register_copy jsr print_dword - // [264] phi from mul16u_error::@7 to mul16u_error::@8 [phi:mul16u_error::@7->mul16u_error::@8] + // [265] phi from mul16u_error::@7 to mul16u_error::@8 [phi:mul16u_error::@7->mul16u_error::@8] __b8_from___b7: jmp __b8 // mul16u_error::@8 __b8: - // [265] call print_str + // [266] call print_str // [64] phi from mul16u_error::@8 to print_str [phi:mul16u_error::@8->print_str] print_str_from___b8: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@8->print_str#0] -- register_copy @@ -7383,7 +7316,7 @@ mul16u_error: { jmp __b9 // mul16u_error::@9 __b9: - // [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 -- vduz1=vduz2 + // [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 -- vduz1=vduz2 lda.z mf sta.z print_dword.dw lda.z mf+1 @@ -7392,18 +7325,18 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z mf+3 sta.z print_dword.dw+3 - // [267] call print_dword + // [268] call print_dword // [109] phi from mul16u_error::@9 to print_dword [phi:mul16u_error::@9->print_dword] print_dword_from___b9: // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@9->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#3 [phi:mul16u_error::@9->print_dword#1] -- register_copy jsr print_dword - // [268] phi from mul16u_error::@9 to mul16u_error::@10 [phi:mul16u_error::@9->mul16u_error::@10] + // [269] phi from mul16u_error::@9 to mul16u_error::@10 [phi:mul16u_error::@9->mul16u_error::@10] __b10_from___b9: jmp __b10 // mul16u_error::@10 __b10: - // [269] call print_ln + // [270] call print_ln // [59] phi from mul16u_error::@10 to print_ln [phi:mul16u_error::@10->print_ln] print_ln_from___b10: // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#22 [phi:mul16u_error::@10->print_ln#0] -- register_copy @@ -7416,7 +7349,7 @@ mul16u_error: { jmp __breturn // mul16u_error::@return __breturn: - // [270] return + // [271] return rts str: .text "multiply mismatch " .byte 0 @@ -7424,30 +7357,32 @@ mul16u_error: { // muls16u // Slow multiplication of unsigned words // Calculate an unsigned multiplication by repeated addition -// muls16u(word zp($b7) a, word zp($b9) b) +// muls16u(word zp($b5) a, word zp($b7) b) muls16u: { - .label return = $48 - .label m = $48 - .label i = $46 - .label a = $b7 - .label b = $b9 - .label return_1 = $bb - // [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 -- vwuz1_eq_0_then_la1 + .label return = $46 + .label m = $46 + .label i = $44 + .label a = $b5 + .label b = $b7 + .label return_1 = $b9 + // [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 -- vwuz1_eq_0_then_la1 lda.z a bne !+ lda.z a+1 beq __b1_from_muls16u !: - // [272] phi from muls16u to muls16u::@2 [phi:muls16u->muls16u::@2] + // [273] phi from muls16u to muls16u::@2 [phi:muls16u->muls16u::@2] __b2_from_muls16u: - // [272] phi (dword) muls16u::m#3 = (byte) 0 [phi:muls16u->muls16u::@2#0] -- vduz1=vbuc1 - lda #0 + // [273] phi (dword) muls16u::m#3 = (dword) 0 [phi:muls16u->muls16u::@2#0] -- vduz1=vduc1 + lda #<0 sta.z m - lda #0 + lda #>0 sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [272] phi (word) muls16u::i#2 = (byte) 0 [phi:muls16u->muls16u::@2#1] -- vwuz1=vbuc1 + // [273] phi (word) muls16u::i#2 = (word) 0 [phi:muls16u->muls16u::@2#1] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -7455,25 +7390,27 @@ muls16u: { jmp __b2 // muls16u::@2 __b2: - // [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 -- vwuz1_neq_vwuz2_then_la1 + // [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 -- vwuz1_neq_vwuz2_then_la1 lda.z i+1 cmp.z a+1 bne __b3 lda.z i cmp.z a bne __b3 - // [274] phi from muls16u::@2 to muls16u::@1 [phi:muls16u::@2->muls16u::@1] + // [275] phi from muls16u::@2 to muls16u::@1 [phi:muls16u::@2->muls16u::@1] __b1_from___b2: - // [274] phi (dword) muls16u::return#0 = (dword) muls16u::m#3 [phi:muls16u::@2->muls16u::@1#0] -- register_copy + // [275] phi (dword) muls16u::return#0 = (dword) muls16u::m#3 [phi:muls16u::@2->muls16u::@1#0] -- register_copy jmp __b1 - // [274] phi from muls16u to muls16u::@1 [phi:muls16u->muls16u::@1] + // [275] phi from muls16u to muls16u::@1 [phi:muls16u->muls16u::@1] __b1_from_muls16u: - // [274] phi (dword) muls16u::return#0 = (byte) 0 [phi:muls16u->muls16u::@1#0] -- vduz1=vbuc1 - lda #0 + // [275] phi (dword) muls16u::return#0 = (dword) 0 [phi:muls16u->muls16u::@1#0] -- vduz1=vduc1 + lda #<0 sta.z return - lda #0 + lda #>0 sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 jmp __b1 // muls16u::@1 @@ -7481,11 +7418,11 @@ muls16u: { jmp __breturn // muls16u::@return __breturn: - // [275] return + // [276] return rts // muls16u::@3 __b3: - // [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 -- vduz1=vduz1_plus_vwuz2 + // [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 -- vduz1=vduz1_plus_vwuz2 lda.z m clc adc.z b @@ -7499,59 +7436,59 @@ muls16u: { lda.z m+3 adc #0 sta.z m+3 - // [277] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 -- vwuz1=_inc_vwuz1 + // [278] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [272] phi from muls16u::@3 to muls16u::@2 [phi:muls16u::@3->muls16u::@2] + // [273] phi from muls16u::@3 to muls16u::@2 [phi:muls16u::@3->muls16u::@2] __b2_from___b3: - // [272] phi (dword) muls16u::m#3 = (dword) muls16u::m#1 [phi:muls16u::@3->muls16u::@2#0] -- register_copy - // [272] phi (word) muls16u::i#2 = (word) muls16u::i#1 [phi:muls16u::@3->muls16u::@2#1] -- register_copy + // [273] phi (dword) muls16u::m#3 = (dword) muls16u::m#1 [phi:muls16u::@3->muls16u::@2#0] -- register_copy + // [273] phi (word) muls16u::i#2 = (word) muls16u::i#1 [phi:muls16u::@3->muls16u::@2#1] -- register_copy jmp __b2 } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label __1 = $e3 - .label __4 = $e4 - .label __5 = $e5 + .label __1 = $e1 + .label __4 = $e2 + .label __5 = $e3 // x/2 - .label c = $4e + .label c = $4c // Counter used for determining x%2==0 - .label sqr1_hi = $4f + .label sqr1_hi = $4d // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $58 - .label sqr1_lo = $4c + .label sqr = $56 + .label sqr1_lo = $4a // sqr = (x*x)/4 - .label x_2 = $51 + .label x_2 = $4f // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = $55 + .label sqr2_hi = $53 // Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x) // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256) - .label x_255 = $54 - .label sqr2_lo = $52 + .label x_255 = $52 + .label sqr2_lo = $50 //Start with g(0)=f(255) - .label dir = $57 - // [279] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label dir = $55 + // [280] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [279] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 + // [280] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z x_2 - // [279] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [280] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [279] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [280] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [279] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [280] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [279] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [280] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -7559,27 +7496,27 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] + // [282] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [281] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [282] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [281] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [282] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [281] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 + // [282] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 lda #-1 sta.z x_255 - // [281] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [282] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -7587,7 +7524,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -7597,123 +7534,123 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [285] return + // [286] return rts // mulf_init::@6 __b6: - // [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z x_255 lda mulf_sqr1_lo,y ldy #0 sta (sqr2_lo),y - // [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z x_255 lda mulf_sqr1_hi,y ldy #0 sta (sqr2_hi),y - // [288] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [289] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 + // [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 lda.z x_255 clc adc.z dir sta.z x_255 - // [290] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 + // [291] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 lda.z x_255 cmp #0 bne __b9_from___b6 - // [292] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [293] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [292] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [293] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [291] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [292] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] __b9_from___b6: jmp __b9 // mulf_init::@9 __b9: - // [292] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [293] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [292] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [293] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [293] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [294] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [281] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [282] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [281] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [281] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [281] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [281] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [282] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [282] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [282] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [282] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [294] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [295] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and.z c sta.z __1 - // [296] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 + // [297] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 lda.z __1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [297] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 + // [298] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 inc.z x_2 - // [298] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [299] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [299] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [300] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] __b3_from___b2: __b3_from___b4: - // [299] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [299] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [300] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [300] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [300] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 + // [301] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 lda.z sqr sta.z __4 - // [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 + // [302] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 lda.z __4 ldy #0 sta (sqr1_lo),y - // [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 + // [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 lda.z sqr+1 sta.z __5 - // [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 + // [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 lda.z __5 ldy #0 sta (sqr1_hi),y - // [304] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [305] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 + // [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 lda.z x_2 clc adc.z sqr @@ -7721,31 +7658,31 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [306] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [307] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [279] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [280] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [279] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [279] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [279] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [279] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [279] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [280] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [280] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [280] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [280] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [280] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [308] call memset - // [310] phi from print_cls to memset [phi:print_cls->memset] + // [309] call memset + // [311] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [309] return + // [310] return rts } // memset @@ -7755,10 +7692,10 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $5a - // [311] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $58 + // [312] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [311] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [312] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -7766,7 +7703,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -7776,22 +7713,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [313] return + // [314] return rts // memset::@2 __b2: - // [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [316] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [311] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [312] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [311] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [312] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -7849,13 +7786,13 @@ Statement [44] (signed dword) mul16s_error::ms#0 ← (signed dword) mul16s_compa Statement [45] (signed dword) mul16s_error::mn#0 ← (signed dword) mul16s_compare::mn#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_compare::mf#0 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#132 mul16s_compare::mf#0 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 ] ) always clobbers reg byte a Statement [46] (signed dword) mul16s_error::mf#0 ← (signed dword) mul16s_compare::mf#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 ] ) always clobbers reg byte a Statement [55] (byte*) print_char_cursor#180 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#180 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#180 ] ) always clobbers reg byte a -Statement [61] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#22 + (byte) $28 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a -Statement [62] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a -Statement [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#22 + (byte) $28 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:244 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:248 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:237::print_ln:270 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a +Statement [62] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:244 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:248 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:237::print_ln:270 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a +Statement [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:205 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:246 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:250 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:254 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:258 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:262 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:266 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Statement [68] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#15) [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Statement [68] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#15) [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:205 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:246 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:250 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:254 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:258 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:262 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:266 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y Statement [73] (signed word) print_sword::w#1 ← (signed word) mul16s_error::a#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#1 ] ) always clobbers reg byte a Statement [77] (signed word) print_sword::w#2 ← (signed word) mul16s_error::b#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#2 ] ) always clobbers reg byte a Statement [81] (signed dword) print_sdword::dw#1 ← (signed dword) mul16s_error::ms#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#1 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#1 ] ) always clobbers reg byte a @@ -7864,15 +7801,15 @@ Statement [89] (signed dword) print_sdword::dw#3 ← (signed dword) mul16s_error Statement [95] if((signed dword) print_sdword::dw#4<(signed byte) 0) goto print_sdword::@1 [ print_char_cursor#132 print_sdword::dw#4 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_sdword::dw#4 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_sdword::dw#4 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90 [ print_line_cursor#1 print_char_cursor#132 print_sdword::dw#4 ] ) always clobbers reg byte a Statement [99] (dword) print_dword::dw#0 ← (dword)(signed dword) print_sdword::dw#6 [ print_char_cursor#22 print_dword::dw#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_dword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_dword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90 [ print_line_cursor#1 print_char_cursor#22 print_dword::dw#0 ] ) always clobbers reg byte a Statement [104] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#4 [ print_char_cursor#22 print_sdword::dw#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_sdword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_sdword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90 [ print_line_cursor#1 print_char_cursor#22 print_sdword::dw#0 ] ) always clobbers reg byte a -Statement [106] *((byte*) print_char_cursor#88) ← (byte) print_char::ch#6 [ print_char_cursor#88 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:97 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:97 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:97 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:103 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:103 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:103 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117::print_char:124 [ print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117::print_char:124 [ print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119::print_char:124 [ print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119::print_char:124 [ print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117::print_char:127 [ print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117::print_char:127 [ print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119::print_char:127 [ print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119::print_char:127 [ print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:132 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:132 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:138 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:138 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] ) always clobbers reg byte y +Statement [106] *((byte*) print_char_cursor#88) ← (byte) print_char::ch#6 [ print_char_cursor#88 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:97 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:97 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:97 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:103 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:103 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:103 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117::print_char:124 [ print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117::print_char:124 [ print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119::print_char:124 [ print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119::print_char:124 [ print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117::print_char:127 [ print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117::print_char:127 [ print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119::print_char:127 [ print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119::print_char:127 [ print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:132 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:132 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:138 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:138 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:26 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [110] (word) print_word::w#1 ← > (dword) print_dword::dw#4 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ) always clobbers reg byte a -Statement [112] (word) print_word::w#2 ← < (dword) print_dword::dw#4 [ print_char_cursor#22 print_word::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263 [ mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267 [ print_char_cursor#22 print_word::w#2 ] ) always clobbers reg byte a -Statement [116] (byte) print_byte::b#0 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111 [ print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ) always clobbers reg byte a -Statement [118] (byte) print_byte::b#1 ← < (word) print_word::w#5 [ print_char_cursor#22 print_byte::b#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111 [ print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113 [ print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] ) always clobbers reg byte a -Statement [122] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a +Statement [110] (word) print_word::w#1 ← > (dword) print_dword::dw#4 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ) always clobbers reg byte a +Statement [112] (word) print_word::w#2 ← < (dword) print_dword::dw#4 [ print_char_cursor#22 print_word::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264 [ mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268 [ print_char_cursor#22 print_word::w#2 ] ) always clobbers reg byte a +Statement [116] (byte) print_byte::b#0 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111 [ print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ) always clobbers reg byte a +Statement [118] (byte) print_byte::b#1 ← < (word) print_word::w#5 [ print_char_cursor#22 print_byte::b#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111 [ print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113 [ print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] ) always clobbers reg byte a +Statement [122] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:26 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement [125] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#22 print_byte::$2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119 [ print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] ) always clobbers reg byte a +Statement [125] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#22 print_byte::$2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119 [ print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] ) always clobbers reg byte a Statement [130] if((signed word) print_sword::w#3<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#132 print_sword::w#3 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sword:74 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_sword::w#3 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_sword::w#3 ] ) always clobbers reg byte a Statement [134] (word) print_word::w#0 ← (word)(signed word) print_sword::w#5 [ print_char_cursor#22 print_word::w#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sword:74 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#0 ] ) always clobbers reg byte a Statement [139] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#3 [ print_char_cursor#22 print_sword::w#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sword:74 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_sword::w#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_sword::w#0 ] ) always clobbers reg byte a @@ -7889,15 +7826,15 @@ Statement [151] (word~) mulf16s::$13 ← > (dword) mulf16s::m#5 [ mulf16s::a#0 m Statement [152] (word~) mulf16s::$17 ← (word~) mulf16s::$13 - (word)(signed word) mulf16s::a#0 [ mulf16s::m#5 mulf16s::$17 ] ( main:2::mul16s_compare:11::mulf16s:31 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::m#5 mulf16s::$17 ] ) always clobbers reg byte a Statement [153] (dword) mulf16s::m#2 ← (dword) mulf16s::m#5 hi= (word~) mulf16s::$17 [ mulf16s::m#2 ] ( main:2::mul16s_compare:11::mulf16s:31 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::m#2 ] ) always clobbers reg byte a Statement [155] (signed dword) mulf16s::return#0 ← (signed dword)(dword) mulf16s::m#4 [ mulf16s::return#0 ] ( main:2::mul16s_compare:11::mulf16s:31 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::return#0 ] ) always clobbers reg byte a -Statement [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 [ mulf16u::b#2 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::b#2 ] main:2::mul16u_compare:9::mulf16u:220 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::b#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:68 [ mul16u_compare::j#10 mul16u_compare::j#1 ] -Statement [159] *((const word*) mulf16u::memB) ← (word) mulf16u::b#2 [ ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 ] main:2::mul16u_compare:9::mulf16u:220 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 [ mulf16u::b#2 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::b#2 ] main:2::mul16u_compare:9::mulf16u:221 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::b#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:66 [ mul16u_compare::j#10 mul16u_compare::j#1 ] +Statement [159] *((const word*) mulf16u::memB) ← (word) mulf16u::b#2 [ ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 ] main:2::mul16u_compare:9::mulf16u:221 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a Statement asm { ldamemA stasm1a+1 stasm3a+1 stasm5a+1 stasm7a+1 eor#$ff stasm2a+1 stasm4a+1 stasm6a+1 stasm8a+1 ldamemA+1 stasm1b+1 stasm3b+1 stasm5b+1 stasm7b+1 eor#$ff stasm2b+1 stasm4b+1 stasm6b+1 stasm8b+1 ldxmemB sec sm1a: ldamulf_sqr1_lo,x sm2a: sbcmulf_sqr2_lo,x stamemR+0 sm3a: ldamulf_sqr1_hi,x sm4a: sbcmulf_sqr2_hi,x sta_AA+1 sec sm1b: ldamulf_sqr1_lo,x sm2b: sbcmulf_sqr2_lo,x sta_cc+1 sm3b: ldamulf_sqr1_hi,x sm4b: sbcmulf_sqr2_hi,x sta_CC+1 ldxmemB+1 sec sm5a: ldamulf_sqr1_lo,x sm6a: sbcmulf_sqr2_lo,x sta_bb+1 sm7a: ldamulf_sqr1_hi,x sm8a: sbcmulf_sqr2_hi,x sta_BB+1 sec sm5b: ldamulf_sqr1_lo,x sm6b: sbcmulf_sqr2_lo,x sta_dd+1 sm7b: ldamulf_sqr1_hi,x sm8b: sbcmulf_sqr2_hi,x stamemR+3 clc _AA: lda#0 _bb: adc#0 stamemR+1 _BB: lda#0 _CC: adc#0 stamemR+2 bcc!+ incmemR+3 clc !: _cc: lda#0 adcmemR+1 stamemR+1 _dd: lda#0 adcmemR+2 stamemR+2 bcc!+ incmemR+3 !: } always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] Removing always clobbered register reg byte x as potential for zp[1]:7 [ mul16s_compare::j#10 mul16s_compare::j#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:68 [ mul16u_compare::j#10 mul16u_compare::j#1 ] -Statement [161] (dword) mulf16u::return#0 ← *((const dword*) mulf16u::memR) [ mulf16u::return#0 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::return#0 ] main:2::mul16u_compare:9::mulf16u:220 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:66 [ mul16u_compare::j#10 mul16u_compare::j#1 ] +Statement [161] (dword) mulf16u::return#0 ← *((const dword*) mulf16u::memR) [ mulf16u::return#0 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::return#0 ] main:2::mul16u_compare:9::mulf16u:221 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#0 ] ) always clobbers reg byte a Statement [163] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16s::b#0 mul16u::a#1 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#1 ] ) always clobbers reg byte a Statement [164] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#0 [ mul16s::a#0 mul16s::b#0 mul16u::a#1 mul16u::b#0 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a Statement [166] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16s::b#0 mul16u::return#2 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::return#2 ] ) always clobbers reg byte a @@ -7911,72 +7848,73 @@ Statement [174] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#0 mul1 Statement [175] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#0 [ mul16s::m#5 mul16s::$17 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a Statement [176] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::m#2 ] ) always clobbers reg byte a Statement [178] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::return#0 ] ) always clobbers reg byte a -Statement [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:215 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:215 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:215 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a -Statement [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a -Statement [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ) always clobbers reg byte a -Statement [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ) always clobbers reg byte a -Statement [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 [ muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ) always clobbers reg byte a -Statement [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ) always clobbers reg byte a -Statement [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 [ muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ) always clobbers reg byte a -Statement [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ) always clobbers reg byte a -Statement [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ) always clobbers reg byte a -Statement [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ) always clobbers reg byte a -Statement [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a -Statement [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ) always clobbers reg byte a -Statement [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a -Statement [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a -Statement [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a -Statement [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ) always clobbers reg byte a -Statement [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a -Statement [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a -Statement [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a -Statement [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ) always clobbers reg byte a -Statement [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a -Statement [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a -Statement [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:69 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] -Statement [230] *((const byte*) BGCOL) ← (byte) 2 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a -Statement [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ) always clobbers reg byte a -Statement [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ) always clobbers reg byte a -Statement [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ) always clobbers reg byte a -Statement [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ) always clobbers reg byte a -Statement [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ) always clobbers reg byte a -Statement [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#187 ] ( main:2::mul16u_compare:9 [ print_line_cursor#1 print_char_cursor#187 ] ) always clobbers reg byte a -Statement [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 [ print_char_cursor#132 print_dword::dw#3 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_dword::dw#3 ] ) always clobbers reg byte a -Statement [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 [ muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9::muls16u:210 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a -Statement [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ( main:2::mul16u_compare:9::muls16u:210 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ) always clobbers reg byte a -Statement [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ( main:2::mul16u_compare:9::muls16u:210 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ) always clobbers reg byte a -Statement [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:81 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [300] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:81 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#6 mul16u::mb#0 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a +Statement [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a +Statement [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ) always clobbers reg byte a +Statement [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ) always clobbers reg byte a +Statement [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 [ muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ) always clobbers reg byte a +Statement [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ) always clobbers reg byte a +Statement [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 [ muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ) always clobbers reg byte a +Statement [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ) always clobbers reg byte a +Statement [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ) always clobbers reg byte a +Statement [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ) always clobbers reg byte a +Statement [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a +Statement [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ) always clobbers reg byte a +Statement [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a +Statement [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a +Statement [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a +Statement [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ) always clobbers reg byte a +Statement [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ) always clobbers reg byte a +Statement [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a +Statement [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a +Statement [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:67 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] +Statement [231] *((const byte*) BGCOL) ← (byte) 2 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a +Statement [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ) always clobbers reg byte a +Statement [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ) always clobbers reg byte a +Statement [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ) always clobbers reg byte a +Statement [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ) always clobbers reg byte a +Statement [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ) always clobbers reg byte a +Statement [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#187 ] ( main:2::mul16u_compare:9 [ print_line_cursor#1 print_char_cursor#187 ] ) always clobbers reg byte a +Statement [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 [ print_char_cursor#132 print_dword::dw#3 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_dword::dw#3 ] ) always clobbers reg byte a +Statement [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 [ muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9::muls16u:211 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a +Statement [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ( main:2::mul16u_compare:9::muls16u:211 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ) always clobbers reg byte a +Statement [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ( main:2::mul16u_compare:9::muls16u:211 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ) always clobbers reg byte a +Statement [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [301] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [302] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:309 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:309 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y Statement [4] *((const byte*) BGCOL) ← (byte) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [13] (byte*) print_char_cursor#219 ← (byte*) print_line_cursor#1 [ print_char_cursor#219 print_line_cursor#1 ] ( main:2::mul16s_compare:11 [ print_char_cursor#219 print_line_cursor#1 ] ) always clobbers reg byte a Statement [17] (signed word) mul16s_compare::a#1 ← (signed word) mul16s_compare::a#2 + (signed word) $d2b [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#2 mul16s_compare::j#10 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#2 mul16s_compare::j#10 ] ) always clobbers reg byte a @@ -8003,10 +7941,10 @@ Statement [45] (signed dword) mul16s_error::mn#0 ← (signed dword) mul16s_compa Statement [46] (signed dword) mul16s_error::mf#0 ← (signed dword) mul16s_compare::mf#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 ] ) always clobbers reg byte a Statement [52] if((byte) mul16s_compare::i#1!=(byte) $10) goto mul16s_compare::@1 [ print_line_cursor#1 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::i#1 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::i#1 ] ) always clobbers reg byte a Statement [55] (byte*) print_char_cursor#180 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#180 ] ( main:2::mul16s_compare:11 [ print_line_cursor#1 print_char_cursor#180 ] ) always clobbers reg byte a -Statement [61] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#22 + (byte) $28 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a -Statement [62] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:243 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:247 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:236::print_ln:269 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a -Statement [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y -Statement [68] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#15) [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:204 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:245 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:249 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:253 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:257 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:261 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:236::print_str:265 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y +Statement [61] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#22 + (byte) $28 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:244 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:248 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:237::print_ln:270 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a +Statement [62] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#133) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#133 ] ( main:2::mul16s_compare:11::print_ln:54 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::print_ln:58 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16s_compare:11::mul16s_error:47::print_ln:92 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:244 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::print_ln:248 [ print_line_cursor#1 print_char_cursor#133 ] main:2::mul16u_compare:9::mul16u_error:237::print_ln:270 [ print_line_cursor#1 print_char_cursor#133 ] ) always clobbers reg byte a +Statement [66] if((byte) 0!=*((byte*) print_str::str#15)) goto print_str::@2 [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:205 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:246 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:250 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:254 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:258 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:262 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:266 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y +Statement [68] *((byte*) print_char_cursor#132) ← *((byte*) print_str::str#15) [ print_char_cursor#132 print_str::str#15 ] ( main:2::mul16s_compare:11::print_str:15 [ print_line_cursor#1 mul16s_compare::a#6 mul16s_compare::b#6 mul16s_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::print_str:56 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:72 [ print_line_cursor#1 mul16s_error::a#0 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:76 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:80 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:84 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16s_compare:11::mul16s_error:47::print_str:88 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:205 [ mul16u_compare::a#6 mul16u_compare::b#6 mul16u_compare::i#12 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::print_str:246 [ print_line_cursor#1 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:250 [ mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:254 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:258 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:262 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] main:2::mul16u_compare:9::mul16u_error:237::print_str:266 [ mul16u_error::mf#0 print_char_cursor#132 print_str::str#15 ] ) always clobbers reg byte a reg byte y Statement [73] (signed word) print_sword::w#1 ← (signed word) mul16s_error::a#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#1 ] ) always clobbers reg byte a Statement [77] (signed word) print_sword::w#2 ← (signed word) mul16s_error::b#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#2 ] ) always clobbers reg byte a Statement [81] (signed dword) print_sdword::dw#1 ← (signed dword) mul16s_error::ms#0 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#1 ] ( main:2::mul16s_compare:11::mul16s_error:47 [ print_line_cursor#1 print_char_cursor#132 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#1 ] ) always clobbers reg byte a @@ -8015,13 +7953,13 @@ Statement [89] (signed dword) print_sdword::dw#3 ← (signed dword) mul16s_error Statement [95] if((signed dword) print_sdword::dw#4<(signed byte) 0) goto print_sdword::@1 [ print_char_cursor#132 print_sdword::dw#4 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_sdword::dw#4 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#132 print_sdword::dw#4 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90 [ print_line_cursor#1 print_char_cursor#132 print_sdword::dw#4 ] ) always clobbers reg byte a Statement [99] (dword) print_dword::dw#0 ← (dword)(signed dword) print_sdword::dw#6 [ print_char_cursor#22 print_dword::dw#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_dword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_dword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90 [ print_line_cursor#1 print_char_cursor#22 print_dword::dw#0 ] ) always clobbers reg byte a Statement [104] (signed dword) print_sdword::dw#0 ← - (signed dword) print_sdword::dw#4 [ print_char_cursor#22 print_sdword::dw#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_sdword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_sdword::dw#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90 [ print_line_cursor#1 print_char_cursor#22 print_sdword::dw#0 ] ) always clobbers reg byte a -Statement [106] *((byte*) print_char_cursor#88) ← (byte) print_char::ch#6 [ print_char_cursor#88 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:97 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:97 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:97 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:103 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:103 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:103 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117::print_char:124 [ print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117::print_char:124 [ print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119::print_char:124 [ print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119::print_char:124 [ print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117::print_char:127 [ print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117::print_char:127 [ print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119::print_char:127 [ print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119::print_char:127 [ print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:132 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:132 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:138 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:138 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] ) always clobbers reg byte y -Statement [110] (word) print_word::w#1 ← > (dword) print_dword::dw#4 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ) always clobbers reg byte a -Statement [112] (word) print_word::w#2 ← < (dword) print_dword::dw#4 [ print_char_cursor#22 print_word::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263 [ mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267 [ print_char_cursor#22 print_word::w#2 ] ) always clobbers reg byte a -Statement [116] (byte) print_byte::b#0 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111 [ print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ) always clobbers reg byte a -Statement [118] (byte) print_byte::b#1 ← < (word) print_word::w#5 [ print_char_cursor#22 print_byte::b#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111 [ print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113 [ print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] ) always clobbers reg byte a -Statement [122] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a -Statement [125] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#22 print_byte::$2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:259::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:263::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_dword:267::print_word:113::print_byte:119 [ print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:251::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:236::print_word:255::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] ) always clobbers reg byte a +Statement [106] *((byte*) print_char_cursor#88) ← (byte) print_char::ch#6 [ print_char_cursor#88 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:97 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:97 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:97 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_char:103 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_char:103 [ print_line_cursor#1 mul16s_error::mf#0 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_char:103 [ print_line_cursor#1 print_sdword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117::print_char:124 [ print_dword::dw#4 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:124 [ print_line_cursor#1 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117::print_char:124 [ mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117::print_char:124 [ print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:124 [ print_line_cursor#1 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119::print_char:124 [ print_dword::dw#4 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:124 [ print_line_cursor#1 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119::print_char:124 [ mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119::print_char:124 [ print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:124 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119::print_char:124 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119::print_char:124 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_byte::b#2 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117::print_char:127 [ print_dword::dw#4 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117::print_char:127 [ print_line_cursor#1 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117::print_char:127 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117::print_char:127 [ print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119::print_char:127 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119::print_char:127 [ print_dword::dw#4 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119::print_char:127 [ print_line_cursor#1 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119::print_char:127 [ mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119::print_char:127 [ print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119::print_char:127 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119::print_char:127 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119::print_char:127 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:132 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:132 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_char:138 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_char:138 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_sword::w#3 print_char_cursor#88 ] ) always clobbers reg byte y +Statement [110] (word) print_word::w#1 ← > (dword) print_dword::dw#4 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268 [ print_dword::dw#4 print_char_cursor#138 print_word::w#1 ] ) always clobbers reg byte a +Statement [112] (word) print_word::w#2 ← < (dword) print_dword::dw#4 [ print_char_cursor#22 print_word::w#2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100 [ print_line_cursor#1 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264 [ mul16u_error::mf#0 print_char_cursor#22 print_word::w#2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268 [ print_char_cursor#22 print_word::w#2 ] ) always clobbers reg byte a +Statement [116] (byte) print_byte::b#0 ← > (word) print_word::w#5 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111 [ print_dword::dw#4 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113 [ print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#137 print_byte::b#0 ] ) always clobbers reg byte a +Statement [118] (byte) print_byte::b#1 ← < (word) print_word::w#5 [ print_char_cursor#22 print_byte::b#1 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111 [ print_dword::dw#4 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113 [ print_line_cursor#1 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113 [ print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::b#1 ] ) always clobbers reg byte a +Statement [122] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119 [ print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#142 print_byte::b#2 print_byte::$0 ] ) always clobbers reg byte a +Statement [125] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#22 print_byte::$2 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:117 [ print_line_cursor#1 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:117 [ mul16u_error::mf#0 print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:117 [ print_dword::dw#4 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:117 [ print_line_cursor#1 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:117 [ mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:117 [ mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:117 [ print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:117 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:117 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:117 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_word::w#5 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:111::print_byte:119 [ print_line_cursor#1 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:111::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:111::print_byte:119 [ mul16u_error::mf#0 print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:111::print_byte:119 [ print_dword::dw#4 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:82::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:86::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sdword:90::print_dword:100::print_word:113::print_byte:119 [ print_line_cursor#1 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:260::print_word:113::print_byte:119 [ mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:264::print_word:113::print_byte:119 [ mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_dword:268::print_word:113::print_byte:119 [ print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:74::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78::print_word:135::print_byte:119 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:252::print_byte:119 [ mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] main:2::mul16u_compare:9::mul16u_error:237::print_word:256::print_byte:119 [ mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 print_char_cursor#22 print_byte::$2 ] ) always clobbers reg byte a Statement [130] if((signed word) print_sword::w#3<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#132 print_sword::w#3 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sword:74 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_sword::w#3 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#132 print_sword::w#3 ] ) always clobbers reg byte a Statement [134] (word) print_word::w#0 ← (word)(signed word) print_sword::w#5 [ print_char_cursor#22 print_word::w#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sword:74 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_word::w#0 ] ) always clobbers reg byte a Statement [139] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#3 [ print_char_cursor#22 print_sword::w#0 ] ( main:2::mul16s_compare:11::mul16s_error:47::print_sword:74 [ print_line_cursor#1 mul16s_error::b#0 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_sword::w#0 ] main:2::mul16s_compare:11::mul16s_error:47::print_sword:78 [ print_line_cursor#1 mul16s_error::ms#0 mul16s_error::mn#0 mul16s_error::mf#0 print_char_cursor#22 print_sword::w#0 ] ) always clobbers reg byte a @@ -8038,10 +7976,10 @@ Statement [151] (word~) mulf16s::$13 ← > (dword) mulf16s::m#5 [ mulf16s::a#0 m Statement [152] (word~) mulf16s::$17 ← (word~) mulf16s::$13 - (word)(signed word) mulf16s::a#0 [ mulf16s::m#5 mulf16s::$17 ] ( main:2::mul16s_compare:11::mulf16s:31 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::m#5 mulf16s::$17 ] ) always clobbers reg byte a Statement [153] (dword) mulf16s::m#2 ← (dword) mulf16s::m#5 hi= (word~) mulf16s::$17 [ mulf16s::m#2 ] ( main:2::mul16s_compare:11::mulf16s:31 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::m#2 ] ) always clobbers reg byte a Statement [155] (signed dword) mulf16s::return#0 ← (signed dword)(dword) mulf16s::m#4 [ mulf16s::return#0 ] ( main:2::mul16s_compare:11::mulf16s:31 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::return#0 ] ) always clobbers reg byte a -Statement [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 [ mulf16u::b#2 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::b#2 ] main:2::mul16u_compare:9::mulf16u:220 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::b#2 ] ) always clobbers reg byte a -Statement [159] *((const word*) mulf16u::memB) ← (word) mulf16u::b#2 [ ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 ] main:2::mul16u_compare:9::mulf16u:220 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 [ mulf16u::b#2 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::b#2 ] main:2::mul16u_compare:9::mulf16u:221 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::b#2 ] ) always clobbers reg byte a +Statement [159] *((const word*) mulf16u::memB) ← (word) mulf16u::b#2 [ ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 ] main:2::mul16u_compare:9::mulf16u:221 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a Statement asm { ldamemA stasm1a+1 stasm3a+1 stasm5a+1 stasm7a+1 eor#$ff stasm2a+1 stasm4a+1 stasm6a+1 stasm8a+1 ldamemA+1 stasm1b+1 stasm3b+1 stasm5b+1 stasm7b+1 eor#$ff stasm2b+1 stasm4b+1 stasm6b+1 stasm8b+1 ldxmemB sec sm1a: ldamulf_sqr1_lo,x sm2a: sbcmulf_sqr2_lo,x stamemR+0 sm3a: ldamulf_sqr1_hi,x sm4a: sbcmulf_sqr2_hi,x sta_AA+1 sec sm1b: ldamulf_sqr1_lo,x sm2b: sbcmulf_sqr2_lo,x sta_cc+1 sm3b: ldamulf_sqr1_hi,x sm4b: sbcmulf_sqr2_hi,x sta_CC+1 ldxmemB+1 sec sm5a: ldamulf_sqr1_lo,x sm6a: sbcmulf_sqr2_lo,x sta_bb+1 sm7a: ldamulf_sqr1_hi,x sm8a: sbcmulf_sqr2_hi,x sta_BB+1 sec sm5b: ldamulf_sqr1_lo,x sm6b: sbcmulf_sqr2_lo,x sta_dd+1 sm7b: ldamulf_sqr1_hi,x sm8b: sbcmulf_sqr2_hi,x stamemR+3 clc _AA: lda#0 _bb: adc#0 stamemR+1 _BB: lda#0 _CC: adc#0 stamemR+2 bcc!+ incmemR+3 clc !: _cc: lda#0 adcmemR+1 stamemR+1 _dd: lda#0 adcmemR+2 stamemR+2 bcc!+ incmemR+3 !: } always clobbers reg byte a reg byte x -Statement [161] (dword) mulf16u::return#0 ← *((const dword*) mulf16u::memR) [ mulf16u::return#0 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::return#0 ] main:2::mul16u_compare:9::mulf16u:220 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#0 ] ) always clobbers reg byte a +Statement [161] (dword) mulf16u::return#0 ← *((const dword*) mulf16u::memR) [ mulf16u::return#0 ] ( main:2::mul16s_compare:11::mulf16s:31::mulf16u:142 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s_compare::mn#0 mulf16s::a#0 mulf16s::b#0 mulf16u::return#0 ] main:2::mul16u_compare:9::mulf16u:221 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#0 ] ) always clobbers reg byte a Statement [163] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16s::b#0 mul16u::a#1 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#1 ] ) always clobbers reg byte a Statement [164] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#0 [ mul16s::a#0 mul16s::b#0 mul16u::a#1 mul16u::b#0 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a Statement [166] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16s::b#0 mul16u::return#2 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::return#2 ] ) always clobbers reg byte a @@ -8055,63 +7993,64 @@ Statement [174] (word~) mul16s::$13 ← > (dword) mul16s::m#5 [ mul16s::a#0 mul1 Statement [175] (word~) mul16s::$17 ← (word~) mul16s::$13 - (word)(signed word) mul16s::a#0 [ mul16s::m#5 mul16s::$17 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::m#5 mul16s::$17 ] ) always clobbers reg byte a Statement [176] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17 [ mul16s::m#2 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::m#2 ] ) always clobbers reg byte a Statement [178] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:2::mul16s_compare:11::mul16s:26 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::return#0 ] ) always clobbers reg byte a -Statement [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:215 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a -Statement [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:215 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a -Statement [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:215 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a -Statement [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a -Statement [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a -Statement [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ) always clobbers reg byte a -Statement [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ) always clobbers reg byte a -Statement [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 [ muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ) always clobbers reg byte a -Statement [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ) always clobbers reg byte a -Statement [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 [ muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ) always clobbers reg byte a -Statement [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ) always clobbers reg byte a -Statement [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ) always clobbers reg byte a -Statement [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ) always clobbers reg byte a -Statement [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a -Statement [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ) always clobbers reg byte a -Statement [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a -Statement [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a -Statement [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a -Statement [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ) always clobbers reg byte a -Statement [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a -Statement [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a -Statement [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a -Statement [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ) always clobbers reg byte a -Statement [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a -Statement [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a -Statement [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ) always clobbers reg byte a -Statement [230] *((const byte*) BGCOL) ← (byte) 2 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a -Statement [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ) always clobbers reg byte a -Statement [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ) always clobbers reg byte a -Statement [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ) always clobbers reg byte a -Statement [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ) always clobbers reg byte a -Statement [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ) always clobbers reg byte a -Statement [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#187 ] ( main:2::mul16u_compare:9 [ print_line_cursor#1 print_char_cursor#187 ] ) always clobbers reg byte a -Statement [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ) always clobbers reg byte a -Statement [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 [ print_char_cursor#132 print_dword::dw#3 ] ( main:2::mul16u_compare:9::mul16u_error:236 [ print_char_cursor#132 print_dword::dw#3 ] ) always clobbers reg byte a -Statement [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 [ muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9::muls16u:210 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a -Statement [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ( main:2::mul16u_compare:9::muls16u:210 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ) always clobbers reg byte a -Statement [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ( main:2::mul16u_compare:9::muls16u:210 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ) always clobbers reg byte a -Statement [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Statement [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Statement [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [300] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:308 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#6 mul16u::mb#0 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a +Statement [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a +Statement [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a +Statement [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:2::mul16s_compare:11::mul16s:26::mul16u:165 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 mul16s_compare::ms#0 mul16s::a#0 mul16s::b#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:2::mul16u_compare:9::mul16u:216 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a +Statement [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a +Statement [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 [ muls16s::a#0 muls16s::b#0 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 ] ) always clobbers reg byte a +Statement [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#3 ] ) always clobbers reg byte a +Statement [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::j#2 muls16s::m#1 ] ) always clobbers reg byte a +Statement [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 [ muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::m#5 muls16s::i#2 ] ) always clobbers reg byte a +Statement [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 [ muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#2 muls16s::m#2 ] ) always clobbers reg byte a +Statement [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 [ muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ( main:2::mul16s_compare:11::muls16s:21 [ print_line_cursor#1 mul16s_compare::i#12 print_char_cursor#132 mul16s_compare::a#1 mul16s_compare::b#1 mul16s_compare::j#10 muls16s::a#0 muls16s::b#0 muls16s::i#1 muls16s::m#2 ] ) always clobbers reg byte a +Statement [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#2 mul16u_compare::j#10 ] ) always clobbers reg byte a +Statement [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 ] ) always clobbers reg byte a +Statement [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 ] ) always clobbers reg byte a +Statement [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a +Statement [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::return#2 ] ) always clobbers reg byte a +Statement [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a +Statement [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a +Statement [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u::b#1 mul16u::a#2 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 ] ) always clobbers reg byte a +Statement [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u::return#3 ] ) always clobbers reg byte a +Statement [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mulf16u::a#1 mulf16u::b#1 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 ] ) always clobbers reg byte a +Statement [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mulf16u::return#3 ] ) always clobbers reg byte a +Statement [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a +Statement [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a +Statement [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_compare::ok#4 ] ) always clobbers reg byte a +Statement [231] *((const byte*) BGCOL) ← (byte) 2 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 ] ) always clobbers reg byte a +Statement [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::b#1 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 ] ) always clobbers reg byte a +Statement [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::ms#0 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 ] ) always clobbers reg byte a +Statement [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mn#0 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 ] ) always clobbers reg byte a +Statement [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::mf#0 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 ] ) always clobbers reg byte a +Statement [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_error::a#0 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ( main:2::mul16u_compare:9 [ print_char_cursor#132 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::i#1 ] ) always clobbers reg byte a +Statement [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#187 ] ( main:2::mul16u_compare:9 [ print_line_cursor#1 print_char_cursor#187 ] ) always clobbers reg byte a +Statement [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_word::w#3 mul16u_error::b#0 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_word::w#4 mul16u_error::ms#0 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_dword::dw#1 mul16u_error::mn#0 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_dword::dw#2 mul16u_error::mf#0 ] ) always clobbers reg byte a +Statement [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 [ print_char_cursor#132 print_dword::dw#3 ] ( main:2::mul16u_compare:9::mul16u_error:237 [ print_char_cursor#132 print_dword::dw#3 ] ) always clobbers reg byte a +Statement [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 [ muls16u::a#0 muls16u::b#0 ] ( main:2::mul16u_compare:9::muls16u:211 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 ] ) always clobbers reg byte a +Statement [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ( main:2::mul16u_compare:9::muls16u:211 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#3 ] ) always clobbers reg byte a +Statement [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 [ muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ( main:2::mul16u_compare:9::muls16u:211 [ print_char_cursor#132 mul16u_compare::i#12 mul16u_compare::a#1 mul16u_compare::b#1 mul16u_compare::j#10 muls16u::a#0 muls16u::b#0 muls16u::i#2 muls16u::m#1 ] ) always clobbers reg byte a +Statement [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Statement [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Statement [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [301] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [302] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:309 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:309 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] : zp[1]:2 , Potential registers zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] : zp[2]:3 , Potential registers zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] : zp[2]:5 , @@ -8130,220 +8069,218 @@ Potential registers zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m Potential registers zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] : zp[2]:33 , Potential registers zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] : zp[2]:35 , Potential registers zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] : zp[4]:37 , -Potential registers zp[2]:41 [ mul16u::b#0 ] : zp[2]:41 , -Potential registers zp[2]:43 [ mul16u::b#1 ] : zp[2]:43 , -Potential registers zp[2]:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:45 , -Potential registers zp[4]:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:47 , -Potential registers zp[4]:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:51 , -Potential registers zp[2]:55 [ muls16s::j#2 muls16s::j#1 ] : zp[2]:55 , -Potential registers zp[4]:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] : zp[4]:57 , -Potential registers zp[2]:61 [ muls16s::i#2 muls16s::i#1 ] : zp[2]:61 , -Potential registers zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] : zp[1]:63 , -Potential registers zp[2]:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] : zp[2]:64 , -Potential registers zp[2]:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] : zp[2]:66 , -Potential registers zp[1]:68 [ mul16u_compare::j#10 mul16u_compare::j#1 ] : zp[1]:68 , reg byte y , -Potential registers zp[1]:69 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] : zp[1]:69 , reg byte x , reg byte y , -Potential registers zp[2]:70 [ muls16u::i#2 muls16u::i#1 ] : zp[2]:70 , -Potential registers zp[4]:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] : zp[4]:72 , -Potential registers zp[2]:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:76 , -Potential registers zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:78 , reg byte x , -Potential registers zp[2]:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:79 , -Potential registers zp[1]:81 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:81 , reg byte x , -Potential registers zp[2]:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:82 , -Potential registers zp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:84 , reg byte x , -Potential registers zp[2]:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:85 , -Potential registers zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:87 , reg byte x , -Potential registers zp[2]:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:88 , -Potential registers zp[2]:90 [ memset::dst#2 memset::dst#1 ] : zp[2]:90 , -Potential registers zp[2]:92 [ muls16s::a#0 ] : zp[2]:92 , -Potential registers zp[2]:94 [ muls16s::b#0 ] : zp[2]:94 , -Potential registers zp[4]:96 [ muls16s::return#2 ] : zp[4]:96 , -Potential registers zp[4]:100 [ mul16s_compare::ms#0 ] : zp[4]:100 , -Potential registers zp[2]:104 [ mul16s::a#0 ] : zp[2]:104 , -Potential registers zp[2]:106 [ mul16s::b#0 ] : zp[2]:106 , -Potential registers zp[4]:108 [ mul16s::return#2 ] : zp[4]:108 , -Potential registers zp[4]:112 [ mul16s_compare::mn#0 ] : zp[4]:112 , -Potential registers zp[2]:116 [ mulf16s::a#0 ] : zp[2]:116 , -Potential registers zp[2]:118 [ mulf16s::b#0 ] : zp[2]:118 , -Potential registers zp[4]:120 [ mulf16s::return#2 ] : zp[4]:120 , -Potential registers zp[4]:124 [ mul16s_compare::mf#0 ] : zp[4]:124 , -Potential registers zp[2]:128 [ mul16s_error::a#0 ] : zp[2]:128 , -Potential registers zp[2]:130 [ mul16s_error::b#0 ] : zp[2]:130 , -Potential registers zp[4]:132 [ mul16s_error::ms#0 ] : zp[4]:132 , -Potential registers zp[4]:136 [ mul16s_error::mn#0 ] : zp[4]:136 , -Potential registers zp[4]:140 [ mul16s_error::mf#0 ] : zp[4]:140 , -Potential registers zp[1]:144 [ print_byte::$0 ] : zp[1]:144 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:145 [ print_byte::$2 ] : zp[1]:145 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:146 [ mulf16u::return#2 ] : zp[4]:146 , -Potential registers zp[2]:150 [ mulf16s::$9 ] : zp[2]:150 , -Potential registers zp[2]:152 [ mulf16s::$16 ] : zp[2]:152 , -Potential registers zp[2]:154 [ mulf16s::$13 ] : zp[2]:154 , -Potential registers zp[2]:156 [ mulf16s::$17 ] : zp[2]:156 , -Potential registers zp[4]:158 [ mulf16s::return#0 ] : zp[4]:158 , -Potential registers zp[4]:162 [ mulf16u::return#0 ] : zp[4]:162 , -Potential registers zp[4]:166 [ mul16u::return#2 ] : zp[4]:166 , -Potential registers zp[2]:170 [ mul16s::$9 ] : zp[2]:170 , -Potential registers zp[2]:172 [ mul16s::$16 ] : zp[2]:172 , -Potential registers zp[2]:174 [ mul16s::$13 ] : zp[2]:174 , -Potential registers zp[2]:176 [ mul16s::$17 ] : zp[2]:176 , -Potential registers zp[4]:178 [ mul16s::return#0 ] : zp[4]:178 , -Potential registers zp[1]:182 [ mul16u::$1 ] : zp[1]:182 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:183 [ muls16u::a#0 ] : zp[2]:183 , -Potential registers zp[2]:185 [ muls16u::b#0 ] : zp[2]:185 , -Potential registers zp[4]:187 [ muls16u::return#2 ] : zp[4]:187 , -Potential registers zp[4]:191 [ mul16u_compare::ms#0 ] : zp[4]:191 , -Potential registers zp[4]:195 [ mul16u::return#3 ] : zp[4]:195 , -Potential registers zp[4]:199 [ mul16u_compare::mn#0 ] : zp[4]:199 , -Potential registers zp[4]:203 [ mulf16u::return#3 ] : zp[4]:203 , -Potential registers zp[4]:207 [ mul16u_compare::mf#0 ] : zp[4]:207 , -Potential registers zp[2]:211 [ mul16u_error::a#0 ] : zp[2]:211 , -Potential registers zp[2]:213 [ mul16u_error::b#0 ] : zp[2]:213 , -Potential registers zp[4]:215 [ mul16u_error::ms#0 ] : zp[4]:215 , -Potential registers zp[4]:219 [ mul16u_error::mn#0 ] : zp[4]:219 , -Potential registers zp[4]:223 [ mul16u_error::mf#0 ] : zp[4]:223 , -Potential registers zp[1]:227 [ mulf_init::$1 ] : zp[1]:227 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:228 [ mulf_init::$4 ] : zp[1]:228 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:229 [ mulf_init::$5 ] : zp[1]:229 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] : zp[2]:41 , +Potential registers zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:43 , +Potential registers zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:45 , +Potential registers zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:49 , +Potential registers zp[2]:53 [ muls16s::j#2 muls16s::j#1 ] : zp[2]:53 , +Potential registers zp[4]:55 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] : zp[4]:55 , +Potential registers zp[2]:59 [ muls16s::i#2 muls16s::i#1 ] : zp[2]:59 , +Potential registers zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] : zp[1]:61 , +Potential registers zp[2]:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] : zp[2]:62 , +Potential registers zp[2]:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] : zp[2]:64 , +Potential registers zp[1]:66 [ mul16u_compare::j#10 mul16u_compare::j#1 ] : zp[1]:66 , reg byte y , +Potential registers zp[1]:67 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] : zp[1]:67 , reg byte x , reg byte y , +Potential registers zp[2]:68 [ muls16u::i#2 muls16u::i#1 ] : zp[2]:68 , +Potential registers zp[4]:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] : zp[4]:70 , +Potential registers zp[2]:74 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:74 , +Potential registers zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:76 , reg byte x , +Potential registers zp[2]:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:77 , +Potential registers zp[1]:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:79 , reg byte x , +Potential registers zp[2]:80 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:80 , +Potential registers zp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:82 , reg byte x , +Potential registers zp[2]:83 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:83 , +Potential registers zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:85 , reg byte x , +Potential registers zp[2]:86 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:86 , +Potential registers zp[2]:88 [ memset::dst#2 memset::dst#1 ] : zp[2]:88 , +Potential registers zp[2]:90 [ muls16s::a#0 ] : zp[2]:90 , +Potential registers zp[2]:92 [ muls16s::b#0 ] : zp[2]:92 , +Potential registers zp[4]:94 [ muls16s::return#2 ] : zp[4]:94 , +Potential registers zp[4]:98 [ mul16s_compare::ms#0 ] : zp[4]:98 , +Potential registers zp[2]:102 [ mul16s::a#0 ] : zp[2]:102 , +Potential registers zp[2]:104 [ mul16s::b#0 ] : zp[2]:104 , +Potential registers zp[4]:106 [ mul16s::return#2 ] : zp[4]:106 , +Potential registers zp[4]:110 [ mul16s_compare::mn#0 ] : zp[4]:110 , +Potential registers zp[2]:114 [ mulf16s::a#0 ] : zp[2]:114 , +Potential registers zp[2]:116 [ mulf16s::b#0 ] : zp[2]:116 , +Potential registers zp[4]:118 [ mulf16s::return#2 ] : zp[4]:118 , +Potential registers zp[4]:122 [ mul16s_compare::mf#0 ] : zp[4]:122 , +Potential registers zp[2]:126 [ mul16s_error::a#0 ] : zp[2]:126 , +Potential registers zp[2]:128 [ mul16s_error::b#0 ] : zp[2]:128 , +Potential registers zp[4]:130 [ mul16s_error::ms#0 ] : zp[4]:130 , +Potential registers zp[4]:134 [ mul16s_error::mn#0 ] : zp[4]:134 , +Potential registers zp[4]:138 [ mul16s_error::mf#0 ] : zp[4]:138 , +Potential registers zp[1]:142 [ print_byte::$0 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:143 [ print_byte::$2 ] : zp[1]:143 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:144 [ mulf16u::return#2 ] : zp[4]:144 , +Potential registers zp[2]:148 [ mulf16s::$9 ] : zp[2]:148 , +Potential registers zp[2]:150 [ mulf16s::$16 ] : zp[2]:150 , +Potential registers zp[2]:152 [ mulf16s::$13 ] : zp[2]:152 , +Potential registers zp[2]:154 [ mulf16s::$17 ] : zp[2]:154 , +Potential registers zp[4]:156 [ mulf16s::return#0 ] : zp[4]:156 , +Potential registers zp[4]:160 [ mulf16u::return#0 ] : zp[4]:160 , +Potential registers zp[4]:164 [ mul16u::return#2 ] : zp[4]:164 , +Potential registers zp[2]:168 [ mul16s::$9 ] : zp[2]:168 , +Potential registers zp[2]:170 [ mul16s::$16 ] : zp[2]:170 , +Potential registers zp[2]:172 [ mul16s::$13 ] : zp[2]:172 , +Potential registers zp[2]:174 [ mul16s::$17 ] : zp[2]:174 , +Potential registers zp[4]:176 [ mul16s::return#0 ] : zp[4]:176 , +Potential registers zp[1]:180 [ mul16u::$1 ] : zp[1]:180 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:181 [ muls16u::a#0 ] : zp[2]:181 , +Potential registers zp[2]:183 [ muls16u::b#0 ] : zp[2]:183 , +Potential registers zp[4]:185 [ muls16u::return#2 ] : zp[4]:185 , +Potential registers zp[4]:189 [ mul16u_compare::ms#0 ] : zp[4]:189 , +Potential registers zp[4]:193 [ mul16u::return#3 ] : zp[4]:193 , +Potential registers zp[4]:197 [ mul16u_compare::mn#0 ] : zp[4]:197 , +Potential registers zp[4]:201 [ mulf16u::return#3 ] : zp[4]:201 , +Potential registers zp[4]:205 [ mul16u_compare::mf#0 ] : zp[4]:205 , +Potential registers zp[2]:209 [ mul16u_error::a#0 ] : zp[2]:209 , +Potential registers zp[2]:211 [ mul16u_error::b#0 ] : zp[2]:211 , +Potential registers zp[4]:213 [ mul16u_error::ms#0 ] : zp[4]:213 , +Potential registers zp[4]:217 [ mul16u_error::mn#0 ] : zp[4]:217 , +Potential registers zp[4]:221 [ mul16u_error::mf#0 ] : zp[4]:221 , +Potential registers zp[1]:225 [ mulf_init::$1 ] : zp[1]:225 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:226 [ mulf_init::$4 ] : zp[1]:226 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:227 [ mulf_init::$5 ] : zp[1]:227 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [muls16s] 5,706: zp[4]:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] 3,003: zp[2]:55 [ muls16s::j#2 muls16s::j#1 ] 3,003: zp[2]:61 [ muls16s::i#2 muls16s::i#1 ] 202: zp[4]:96 [ muls16s::return#2 ] 191.18: zp[2]:94 [ muls16s::b#0 ] 175.58: zp[2]:92 [ muls16s::a#0 ] -Uplift Scope [mul16u] 3,446.71: zp[4]:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 2,536.29: zp[4]:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 2,002: zp[1]:182 [ mul16u::$1 ] 1,876.67: zp[2]:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 202: zp[2]:43 [ mul16u::b#1 ] 202: zp[4]:195 [ mul16u::return#3 ] 4: zp[2]:41 [ mul16u::b#0 ] 4: zp[4]:166 [ mul16u::return#2 ] -Uplift Scope [muls16u] 3,003: zp[2]:70 [ muls16u::i#2 muls16u::i#1 ] 2,869.83: zp[4]:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] 202: zp[4]:187 [ muls16u::return#2 ] 183.67: zp[2]:185 [ muls16u::b#0 ] 157.71: zp[2]:183 [ muls16u::a#0 ] -Uplift Scope [mul16u_compare] 241.86: zp[2]:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] 235.67: zp[1]:69 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] 159.58: zp[1]:68 [ mul16u_compare::j#10 mul16u_compare::j#1 ] 135.36: zp[2]:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] 17.26: zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] 15.69: zp[4]:207 [ mul16u_compare::mf#0 ] 14.52: zp[4]:191 [ mul16u_compare::ms#0 ] 12: zp[4]:199 [ mul16u_compare::mn#0 ] -Uplift Scope [mul16s_compare] 241.86: zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] 235.67: zp[1]:8 [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] 159.58: zp[1]:7 [ mul16s_compare::j#10 mul16s_compare::j#1 ] 135.36: zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] 17.26: zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] 15.69: zp[4]:124 [ mul16s_compare::mf#0 ] 14.52: zp[4]:100 [ mul16s_compare::ms#0 ] 12: zp[4]:112 [ mul16s_compare::mn#0 ] -Uplift Scope [mulf16u] 258.5: zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] 208: zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] 202: zp[4]:203 [ mulf16u::return#3 ] 26.25: zp[4]:162 [ mulf16u::return#0 ] 4: zp[4]:146 [ mulf16u::return#2 ] +Uplift Scope [muls16s] 5,706: zp[4]:55 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] 3,003: zp[2]:53 [ muls16s::j#2 muls16s::j#1 ] 3,003: zp[2]:59 [ muls16s::i#2 muls16s::i#1 ] 202: zp[4]:94 [ muls16s::return#2 ] 191.18: zp[2]:92 [ muls16s::b#0 ] 175.58: zp[2]:90 [ muls16s::a#0 ] +Uplift Scope [mul16u] 3,446.71: zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 2,435.29: zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 2,002: zp[1]:180 [ mul16u::$1 ] 1,824.17: zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 309: zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] 202: zp[4]:193 [ mul16u::return#3 ] 4: zp[4]:164 [ mul16u::return#2 ] +Uplift Scope [muls16u] 3,003: zp[2]:68 [ muls16u::i#2 muls16u::i#1 ] 2,869.83: zp[4]:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] 202: zp[4]:185 [ muls16u::return#2 ] 183.67: zp[2]:183 [ muls16u::b#0 ] 157.71: zp[2]:181 [ muls16u::a#0 ] +Uplift Scope [mul16u_compare] 241.86: zp[2]:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] 235.67: zp[1]:67 [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] 159.58: zp[1]:66 [ mul16u_compare::j#10 mul16u_compare::j#1 ] 135.36: zp[2]:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] 17.26: zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] 15.69: zp[4]:205 [ mul16u_compare::mf#0 ] 14.52: zp[4]:189 [ mul16u_compare::ms#0 ] 12: zp[4]:197 [ mul16u_compare::mn#0 ] +Uplift Scope [mul16s_compare] 241.86: zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] 235.67: zp[1]:8 [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] 159.58: zp[1]:7 [ mul16s_compare::j#10 mul16s_compare::j#1 ] 135.36: zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] 17.26: zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] 15.69: zp[4]:122 [ mul16s_compare::mf#0 ] 14.52: zp[4]:98 [ mul16s_compare::ms#0 ] 12: zp[4]:110 [ mul16s_compare::mn#0 ] +Uplift Scope [mulf16u] 258.5: zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] 208: zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] 202: zp[4]:201 [ mulf16u::return#3 ] 26.25: zp[4]:160 [ mulf16u::return#0 ] 4: zp[4]:144 [ mulf16u::return#2 ] Uplift Scope [print_str] 305.5: zp[2]:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] -Uplift Scope [mul16s] 202: zp[4]:108 [ mul16s::return#2 ] 34.33: zp[4]:178 [ mul16s::return#0 ] 16.5: zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 9.36: zp[2]:106 [ mul16s::b#0 ] 7.36: zp[2]:104 [ mul16s::a#0 ] 4: zp[2]:170 [ mul16s::$9 ] 4: zp[2]:172 [ mul16s::$16 ] 4: zp[2]:174 [ mul16s::$13 ] 4: zp[2]:176 [ mul16s::$17 ] -Uplift Scope [mulf16s] 202: zp[4]:120 [ mulf16s::return#2 ] 34.33: zp[4]:158 [ mulf16s::return#0 ] 16.5: zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] 9.36: zp[2]:118 [ mulf16s::b#0 ] 7.36: zp[2]:116 [ mulf16s::a#0 ] 4: zp[2]:150 [ mulf16s::$9 ] 4: zp[2]:152 [ mulf16s::$16 ] 4: zp[2]:154 [ mulf16s::$13 ] 4: zp[2]:156 [ mulf16s::$17 ] +Uplift Scope [mul16s] 202: zp[4]:106 [ mul16s::return#2 ] 34.33: zp[4]:176 [ mul16s::return#0 ] 16.5: zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] 9.36: zp[2]:104 [ mul16s::b#0 ] 7.36: zp[2]:102 [ mul16s::a#0 ] 4: zp[2]:168 [ mul16s::$9 ] 4: zp[2]:170 [ mul16s::$16 ] 4: zp[2]:172 [ mul16s::$13 ] 4: zp[2]:174 [ mul16s::$17 ] +Uplift Scope [mulf16s] 202: zp[4]:118 [ mulf16s::return#2 ] 34.33: zp[4]:156 [ mulf16s::return#0 ] 16.5: zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] 9.36: zp[2]:116 [ mulf16s::b#0 ] 7.36: zp[2]:114 [ mulf16s::a#0 ] 4: zp[2]:148 [ mulf16s::$9 ] 4: zp[2]:150 [ mulf16s::$16 ] 4: zp[2]:152 [ mulf16s::$13 ] 4: zp[2]:154 [ mulf16s::$17 ] Uplift Scope [] 237.59: zp[2]:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] 34.6: zp[2]:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] -Uplift Scope [mulf_init] 47.67: zp[2]:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:81 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:227 [ mulf_init::$1 ] 22: zp[1]:228 [ mulf_init::$4 ] 22: zp[1]:229 [ mulf_init::$5 ] 15.4: zp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Uplift Scope [memset] 36.67: zp[2]:90 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [mulf_init] 47.67: zp[2]:86 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:80 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:74 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:79 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:225 [ mulf_init::$1 ] 22: zp[1]:226 [ mulf_init::$4 ] 22: zp[1]:227 [ mulf_init::$5 ] 15.4: zp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:83 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplift Scope [memset] 36.67: zp[2]:88 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_word] 24.67: zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] Uplift Scope [print_sdword] 22: zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] Uplift Scope [print_dword] 20: zp[4]:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] -Uplift Scope [print_byte] 10: zp[1]:26 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:144 [ print_byte::$0 ] 4: zp[1]:145 [ print_byte::$2 ] +Uplift Scope [print_byte] 10: zp[1]:26 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp[1]:142 [ print_byte::$0 ] 4: zp[1]:143 [ print_byte::$2 ] Uplift Scope [print_sword] 17.67: zp[2]:27 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] Uplift Scope [print_char] 14: zp[1]:17 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplift Scope [mul16u_error] 0.57: zp[2]:211 [ mul16u_error::a#0 ] 0.4: zp[2]:213 [ mul16u_error::b#0 ] 0.31: zp[4]:215 [ mul16u_error::ms#0 ] 0.25: zp[4]:219 [ mul16u_error::mn#0 ] 0.21: zp[4]:223 [ mul16u_error::mf#0 ] -Uplift Scope [mul16s_error] 0.57: zp[2]:128 [ mul16s_error::a#0 ] 0.4: zp[2]:130 [ mul16s_error::b#0 ] 0.31: zp[4]:132 [ mul16s_error::ms#0 ] 0.25: zp[4]:136 [ mul16s_error::mn#0 ] 0.21: zp[4]:140 [ mul16s_error::mf#0 ] +Uplift Scope [mul16u_error] 0.57: zp[2]:209 [ mul16u_error::a#0 ] 0.4: zp[2]:211 [ mul16u_error::b#0 ] 0.31: zp[4]:213 [ mul16u_error::ms#0 ] 0.25: zp[4]:217 [ mul16u_error::mn#0 ] 0.21: zp[4]:221 [ mul16u_error::mf#0 ] +Uplift Scope [mul16s_error] 0.57: zp[2]:126 [ mul16s_error::a#0 ] 0.4: zp[2]:128 [ mul16s_error::b#0 ] 0.31: zp[4]:130 [ mul16s_error::ms#0 ] 0.25: zp[4]:134 [ mul16s_error::mn#0 ] 0.21: zp[4]:138 [ mul16s_error::mf#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [main] -Uplifting [muls16s] best 548951 combination zp[4]:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] zp[2]:55 [ muls16s::j#2 muls16s::j#1 ] zp[2]:61 [ muls16s::i#2 muls16s::i#1 ] zp[4]:96 [ muls16s::return#2 ] zp[2]:94 [ muls16s::b#0 ] zp[2]:92 [ muls16s::a#0 ] -Uplifting [mul16u] best 542951 combination zp[4]:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:43 [ mul16u::b#1 ] zp[4]:195 [ mul16u::return#3 ] zp[2]:41 [ mul16u::b#0 ] zp[4]:166 [ mul16u::return#2 ] -Uplifting [muls16u] best 542951 combination zp[2]:70 [ muls16u::i#2 muls16u::i#1 ] zp[4]:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] zp[4]:187 [ muls16u::return#2 ] zp[2]:185 [ muls16u::b#0 ] zp[2]:183 [ muls16u::a#0 ] -Uplifting [mul16u_compare] best 540851 combination zp[2]:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] zp[2]:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] zp[4]:207 [ mul16u_compare::mf#0 ] zp[4]:191 [ mul16u_compare::ms#0 ] zp[4]:199 [ mul16u_compare::mn#0 ] -Uplifting [mul16s_compare] best 538751 combination zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ] zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] zp[4]:124 [ mul16s_compare::mf#0 ] zp[4]:100 [ mul16s_compare::ms#0 ] zp[4]:112 [ mul16s_compare::mn#0 ] -Uplifting [mulf16u] best 538751 combination zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] zp[4]:203 [ mulf16u::return#3 ] zp[4]:162 [ mulf16u::return#0 ] zp[4]:146 [ mulf16u::return#2 ] -Uplifting [print_str] best 538751 combination zp[2]:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] -Uplifting [mul16s] best 538751 combination zp[4]:108 [ mul16s::return#2 ] zp[4]:178 [ mul16s::return#0 ] zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[2]:106 [ mul16s::b#0 ] zp[2]:104 [ mul16s::a#0 ] zp[2]:170 [ mul16s::$9 ] zp[2]:172 [ mul16s::$16 ] zp[2]:174 [ mul16s::$13 ] zp[2]:176 [ mul16s::$17 ] -Uplifting [mulf16s] best 538751 combination zp[4]:120 [ mulf16s::return#2 ] zp[4]:158 [ mulf16s::return#0 ] zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp[2]:118 [ mulf16s::b#0 ] zp[2]:116 [ mulf16s::a#0 ] zp[2]:150 [ mulf16s::$9 ] zp[2]:152 [ mulf16s::$16 ] zp[2]:154 [ mulf16s::$13 ] zp[2]:156 [ mulf16s::$17 ] -Uplifting [] best 538751 combination zp[2]:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] zp[2]:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] -Uplifting [mulf_init] best 538501 combination zp[2]:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [muls16s] best 564939 combination zp[4]:55 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] zp[2]:53 [ muls16s::j#2 muls16s::j#1 ] zp[2]:59 [ muls16s::i#2 muls16s::i#1 ] zp[4]:94 [ muls16s::return#2 ] zp[2]:92 [ muls16s::b#0 ] zp[2]:90 [ muls16s::a#0 ] +Uplifting [mul16u] best 558939 combination zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] zp[4]:193 [ mul16u::return#3 ] zp[4]:164 [ mul16u::return#2 ] +Uplifting [muls16u] best 558939 combination zp[2]:68 [ muls16u::i#2 muls16u::i#1 ] zp[4]:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] zp[4]:185 [ muls16u::return#2 ] zp[2]:183 [ muls16u::b#0 ] zp[2]:181 [ muls16u::a#0 ] +Uplifting [mul16u_compare] best 556839 combination zp[2]:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] reg byte x [ mul16u_compare::ok#3 mul16u_compare::ok#4 ] reg byte y [ mul16u_compare::j#10 mul16u_compare::j#1 ] zp[2]:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] zp[4]:205 [ mul16u_compare::mf#0 ] zp[4]:189 [ mul16u_compare::ms#0 ] zp[4]:197 [ mul16u_compare::mn#0 ] +Uplifting [mul16s_compare] best 554739 combination zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ] reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ] zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] zp[4]:122 [ mul16s_compare::mf#0 ] zp[4]:98 [ mul16s_compare::ms#0 ] zp[4]:110 [ mul16s_compare::mn#0 ] +Uplifting [mulf16u] best 554739 combination zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] zp[4]:201 [ mulf16u::return#3 ] zp[4]:160 [ mulf16u::return#0 ] zp[4]:144 [ mulf16u::return#2 ] +Uplifting [print_str] best 554739 combination zp[2]:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] +Uplifting [mul16s] best 554739 combination zp[4]:106 [ mul16s::return#2 ] zp[4]:176 [ mul16s::return#0 ] zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] zp[2]:104 [ mul16s::b#0 ] zp[2]:102 [ mul16s::a#0 ] zp[2]:168 [ mul16s::$9 ] zp[2]:170 [ mul16s::$16 ] zp[2]:172 [ mul16s::$13 ] zp[2]:174 [ mul16s::$17 ] +Uplifting [mulf16s] best 554739 combination zp[4]:118 [ mulf16s::return#2 ] zp[4]:156 [ mulf16s::return#0 ] zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] zp[2]:116 [ mulf16s::b#0 ] zp[2]:114 [ mulf16s::a#0 ] zp[2]:148 [ mulf16s::$9 ] zp[2]:150 [ mulf16s::$16 ] zp[2]:152 [ mulf16s::$13 ] zp[2]:154 [ mulf16s::$17 ] +Uplifting [] best 554739 combination zp[2]:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] zp[2]:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] +Uplifting [mulf_init] best 554489 combination zp[2]:86 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:80 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:74 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:83 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [memset] best 538501 combination zp[2]:90 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_word] best 538501 combination zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplifting [print_sdword] best 538501 combination zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] -Uplifting [print_dword] best 538501 combination zp[4]:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] -Uplifting [print_byte] best 538487 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_sword] best 538487 combination zp[2]:27 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] -Uplifting [print_char] best 538466 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplifting [mul16u_error] best 538466 combination zp[2]:211 [ mul16u_error::a#0 ] zp[2]:213 [ mul16u_error::b#0 ] zp[4]:215 [ mul16u_error::ms#0 ] zp[4]:219 [ mul16u_error::mn#0 ] zp[4]:223 [ mul16u_error::mf#0 ] -Uplifting [mul16s_error] best 538466 combination zp[2]:128 [ mul16s_error::a#0 ] zp[2]:130 [ mul16s_error::b#0 ] zp[4]:132 [ mul16s_error::ms#0 ] zp[4]:136 [ mul16s_error::mn#0 ] zp[4]:140 [ mul16s_error::mf#0 ] -Uplifting [RADIX] best 538466 combination -Uplifting [print_ln] best 538466 combination -Uplifting [print_cls] best 538466 combination -Uplifting [main] best 538466 combination +Uplifting [memset] best 554489 combination zp[2]:88 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_word] best 554489 combination zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] +Uplifting [print_sdword] best 554489 combination zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] +Uplifting [print_dword] best 554489 combination zp[4]:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] +Uplifting [print_byte] best 554475 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_sword] best 554475 combination zp[2]:27 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] +Uplifting [print_char] best 554454 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplifting [mul16u_error] best 554454 combination zp[2]:209 [ mul16u_error::a#0 ] zp[2]:211 [ mul16u_error::b#0 ] zp[4]:213 [ mul16u_error::ms#0 ] zp[4]:217 [ mul16u_error::mn#0 ] zp[4]:221 [ mul16u_error::mf#0 ] +Uplifting [mul16s_error] best 554454 combination zp[2]:126 [ mul16s_error::a#0 ] zp[2]:128 [ mul16s_error::b#0 ] zp[4]:130 [ mul16s_error::ms#0 ] zp[4]:134 [ mul16s_error::mn#0 ] zp[4]:138 [ mul16s_error::mf#0 ] +Uplifting [RADIX] best 554454 combination +Uplifting [print_ln] best 554454 combination +Uplifting [print_cls] best 554454 combination +Uplifting [main] best 554454 combination Attempting to uplift remaining variables inzp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] -Uplifting [mul16s_compare] best 538466 combination zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] -Attempting to uplift remaining variables inzp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Uplifting [mul16u_compare] best 538466 combination zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] -Attempting to uplift remaining variables inzp[1]:84 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 538326 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Attempting to uplift remaining variables inzp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] -Uplifting [mulf_init] best 538326 combination zp[1]:87 [ mulf_init::dir#2 mulf_init::dir#4 ] -Attempting to uplift remaining variables inzp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] -Uplifting [mulf_init] best 538326 combination zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] -Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] ] with [ zp[2]:92 [ muls16s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 ] ] with [ zp[2]:104 [ mul16s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 ] ] with [ zp[2]:116 [ mulf16s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 ] ] with [ zp[2]:128 [ mul16s_error::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] ] with [ zp[2]:94 [ muls16s::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 ] ] with [ zp[2]:106 [ mul16s::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 ] ] with [ zp[2]:118 [ mulf16s::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 ] ] with [ zp[2]:130 [ mul16s_error::b#0 ] ] - score: 1 +Uplifting [mul16s_compare] best 554454 combination zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] +Attempting to uplift remaining variables inzp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Uplifting [mul16u_compare] best 554454 combination zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] +Attempting to uplift remaining variables inzp[1]:82 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 554314 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Attempting to uplift remaining variables inzp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] +Uplifting [mulf_init] best 554314 combination zp[1]:85 [ mulf_init::dir#2 mulf_init::dir#4 ] +Attempting to uplift remaining variables inzp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] +Uplifting [mulf_init] best 554314 combination zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] +Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 ] ] with [ zp[2]:90 [ muls16s::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 ] ] with [ zp[2]:102 [ mul16s::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 ] ] with [ zp[2]:114 [ mulf16s::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 ] ] with [ zp[2]:126 [ mul16s_error::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 ] ] with [ zp[2]:92 [ muls16s::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 ] ] with [ zp[2]:104 [ mul16s::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 ] ] with [ zp[2]:116 [ mulf16s::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 ] ] with [ zp[2]:128 [ mul16s_error::b#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 ] ] with [ zp[4]:18 [ print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] ] with [ zp[4]:132 [ mul16s_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 ] ] with [ zp[4]:130 [ mul16s_error::ms#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 ] ] with [ zp[2]:27 [ print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] ] with [ zp[2]:211 [ mul16u_error::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] ] with [ zp[4]:146 [ mulf16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 ] ] with [ zp[4]:158 [ mulf16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] ] with [ zp[2]:64 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] ] with [ zp[2]:66 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] ] - score: 1 -Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] ] with [ zp[4]:166 [ mul16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 ] ] with [ zp[4]:178 [ mul16s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:195 [ mul16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[4]:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] ] with [ zp[4]:96 [ muls16s::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] ] with [ zp[4]:187 [ muls16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:108 [ mul16s::return#2 ] ] with [ zp[4]:112 [ mul16s_compare::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:120 [ mulf16s::return#2 ] ] with [ zp[4]:124 [ mul16s_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:150 [ mulf16s::$9 ] ] with [ zp[2]:152 [ mulf16s::$16 ] ] - score: 1 -Coalescing zero page register [ zp[2]:154 [ mulf16s::$13 ] ] with [ zp[2]:156 [ mulf16s::$17 ] ] - score: 1 -Coalescing zero page register [ zp[4]:162 [ mulf16u::return#0 ] ] with [ zp[4]:203 [ mulf16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:170 [ mul16s::$9 ] ] with [ zp[2]:172 [ mul16s::$16 ] ] - score: 1 -Coalescing zero page register [ zp[2]:174 [ mul16s::$13 ] ] with [ zp[2]:176 [ mul16s::$17 ] ] - score: 1 -Coalescing zero page register [ zp[4]:191 [ mul16u_compare::ms#0 ] ] with [ zp[4]:215 [ mul16u_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:199 [ mul16u_compare::mn#0 ] ] with [ zp[4]:219 [ mul16u_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:207 [ mul16u_compare::mf#0 ] ] with [ zp[4]:223 [ mul16u_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 ] ] with [ zp[2]:209 [ mul16u_error::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 ] ] with [ zp[4]:144 [ mulf16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 ] ] with [ zp[4]:156 [ mulf16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 ] ] with [ zp[2]:62 [ mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 ] ] with [ zp[2]:64 [ mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] ] - score: 1 +Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 ] ] with [ zp[4]:164 [ mul16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 ] ] with [ zp[4]:176 [ mul16s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:193 [ mul16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[4]:55 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 ] ] with [ zp[4]:94 [ muls16s::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 ] ] with [ zp[4]:185 [ muls16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:106 [ mul16s::return#2 ] ] with [ zp[4]:110 [ mul16s_compare::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:118 [ mulf16s::return#2 ] ] with [ zp[4]:122 [ mul16s_compare::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:148 [ mulf16s::$9 ] ] with [ zp[2]:150 [ mulf16s::$16 ] ] - score: 1 +Coalescing zero page register [ zp[2]:152 [ mulf16s::$13 ] ] with [ zp[2]:154 [ mulf16s::$17 ] ] - score: 1 +Coalescing zero page register [ zp[4]:160 [ mulf16u::return#0 ] ] with [ zp[4]:201 [ mulf16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:168 [ mul16s::$9 ] ] with [ zp[2]:170 [ mul16s::$16 ] ] - score: 1 +Coalescing zero page register [ zp[2]:172 [ mul16s::$13 ] ] with [ zp[2]:174 [ mul16s::$17 ] ] - score: 1 +Coalescing zero page register [ zp[4]:189 [ mul16u_compare::ms#0 ] ] with [ zp[4]:213 [ mul16u_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:197 [ mul16u_compare::mn#0 ] ] with [ zp[4]:217 [ mul16u_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:205 [ mul16u_compare::mf#0 ] ] with [ zp[4]:221 [ mul16u_error::mf#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 ] ] with [ zp[2]:22 [ print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 mul16u_error::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 ] ] with [ zp[4]:100 [ mul16s_compare::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 ] ] with [ zp[4]:191 [ mul16u_compare::ms#0 mul16u_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 ] ] with [ zp[4]:120 [ mulf16s::return#2 mul16s_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 ] ] with [ zp[4]:162 [ mulf16u::return#0 mulf16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] ] with [ zp[2]:183 [ muls16u::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] ] with [ zp[2]:43 [ mul16u::b#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 ] ] with [ zp[2]:185 [ muls16u::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 ] ] with [ zp[2]:213 [ mul16u_error::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:47 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:108 [ mul16s::return#2 mul16s_compare::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 ] ] with [ zp[4]:57 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 ] ] with [ zp[4]:72 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 muls16u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 ] ] with [ zp[4]:140 [ mul16s_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 ] ] with [ zp[4]:207 [ mul16u_compare::mf#0 mul16u_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 ] ] with [ zp[4]:136 [ mul16s_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 mul16s_error::mn#0 ] ] with [ zp[4]:199 [ mul16u_compare::mn#0 mul16u_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:41 [ mul16u::b#0 ] ] with [ zp[2]:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] ] -Coalescing zero page register [ zp[4]:51 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] with [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 mul16u_compare::mf#0 mul16u_error::mf#0 ] ] -Coalescing zero page register [ zp[2]:55 [ muls16s::j#2 muls16s::j#1 ] ] with [ zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] ] -Coalescing zero page register [ zp[2]:61 [ muls16s::i#2 muls16s::i#1 ] ] with [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] ] -Coalescing zero page register [ zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 ] ] with [ zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] ] -Coalescing zero page register [ zp[2]:70 [ muls16u::i#2 muls16u::i#1 ] ] with [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 mul16u_error::a#0 ] ] -Coalescing zero page register [ zp[2]:76 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 mul16s_error::b#0 ] ] -Coalescing zero page register [ zp[2]:79 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] ] -Coalescing zero page register [ zp[2]:82 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp[2]:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] ] -Coalescing zero page register [ zp[2]:85 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp[2]:45 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] -Coalescing zero page register [ zp[2]:90 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:88 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] -Coalescing zero page register [ zp[2]:170 [ mul16s::$9 mul16s::$16 ] ] with [ zp[2]:150 [ mulf16s::$9 mulf16s::$16 ] ] -Coalescing zero page register [ zp[2]:174 [ mul16s::$13 mul16s::$17 ] ] with [ zp[2]:154 [ mulf16s::$13 mulf16s::$17 ] ] -Coalescing zero page register [ zp[1]:78 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:63 [ mul16u_compare::i#12 mul16u_compare::i#1 mul16s_compare::i#12 mul16s_compare::i#1 ] ] -Coalescing zero page register [ zp[2]:90 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp[2]:41 [ mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] ] -Coalescing zero page register [ zp[2]:170 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 ] ] with [ zp[2]:55 [ muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] ] -Coalescing zero page register [ zp[2]:174 [ mul16s::$13 mul16s::$17 mulf16s::$13 mulf16s::$17 ] ] with [ zp[2]:61 [ muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] ] +Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 ] ] with [ zp[4]:98 [ mul16s_compare::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 ] ] with [ zp[4]:189 [ mul16u_compare::ms#0 mul16u_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 ] ] with [ zp[4]:118 [ mulf16s::return#2 mul16s_compare::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 ] ] with [ zp[4]:160 [ mulf16u::return#0 mulf16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 ] ] with [ zp[2]:181 [ muls16u::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 ] ] with [ zp[2]:41 [ mul16u::b#2 mul16u::b#0 mul16u::b#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 ] ] with [ zp[2]:183 [ muls16u::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 muls16u::b#0 ] ] with [ zp[2]:211 [ mul16u_error::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:45 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:106 [ mul16s::return#2 mul16s_compare::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 ] ] with [ zp[4]:55 [ muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:13 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 ] ] with [ zp[4]:70 [ muls16u::return#0 muls16u::m#3 muls16u::m#1 muls16u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 ] ] with [ zp[4]:138 [ mul16s_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 ] ] with [ zp[4]:205 [ mul16u_compare::mf#0 mul16u_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 ] ] with [ zp[4]:134 [ mul16s_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[4]:37 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 mul16s_error::mn#0 ] ] with [ zp[4]:197 [ mul16u_compare::mn#0 mul16u_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ] with [ zp[2]:11 [ print_str::str#15 print_str::str#17 print_str::str#0 ] ] +Coalescing zero page register [ zp[4]:49 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] with [ zp[4]:29 [ mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 mul16u_compare::mf#0 mul16u_error::mf#0 ] ] +Coalescing zero page register [ zp[2]:53 [ muls16s::j#2 muls16s::j#1 ] ] with [ zp[2]:33 [ mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] ] +Coalescing zero page register [ zp[2]:59 [ muls16s::i#2 muls16s::i#1 ] ] with [ zp[2]:35 [ mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] ] +Coalescing zero page register [ zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 ] ] with [ zp[1]:2 [ mul16s_compare::i#12 mul16s_compare::i#1 ] ] +Coalescing zero page register [ zp[2]:68 [ muls16u::i#2 muls16u::i#1 ] ] with [ zp[2]:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 mul16u_error::a#0 ] ] +Coalescing zero page register [ zp[2]:74 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 mul16s_error::b#0 ] ] +Coalescing zero page register [ zp[2]:77 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:9 [ print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] ] +Coalescing zero page register [ zp[2]:80 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp[2]:24 [ print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] ] +Coalescing zero page register [ zp[2]:88 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:83 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] +Coalescing zero page register [ zp[2]:148 [ mulf16s::$9 mulf16s::$16 ] ] with [ zp[2]:86 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] +Coalescing zero page register [ zp[2]:168 [ mul16s::$9 mul16s::$16 ] ] with [ zp[2]:152 [ mulf16s::$13 mulf16s::$17 ] ] +Coalescing zero page register [ zp[1]:76 [ mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:61 [ mul16u_compare::i#12 mul16u_compare::i#1 mul16s_compare::i#12 mul16s_compare::i#1 ] ] +Coalescing zero page register [ zp[2]:88 [ memset::dst#2 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp[2]:43 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 print_str::str#15 print_str::str#17 print_str::str#0 ] ] +Coalescing zero page register [ zp[2]:148 [ mulf16s::$9 mulf16s::$16 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp[2]:53 [ muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] ] +Coalescing zero page register [ zp[2]:168 [ mul16s::$9 mul16s::$16 mulf16s::$13 mulf16s::$17 ] ] with [ zp[2]:59 [ muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] ] +Coalescing zero page register [ zp[2]:172 [ mul16s::$13 mul16s::$17 ] ] with [ zp[2]:88 [ memset::dst#2 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 print_str::str#15 print_str::str#17 print_str::str#0 ] ] Allocated (was zp[4]:13) zp[4]:2 [ print_sdword::dw#6 print_sdword::dw#0 print_sdword::dw#4 print_sdword::dw#1 print_sdword::dw#2 print_sdword::dw#3 print_dword::dw#4 print_dword::dw#1 print_dword::dw#2 print_dword::dw#3 print_dword::dw#0 mul16s_error::ms#0 mul16s_compare::ms#0 mul16u_compare::ms#0 mul16u_error::ms#0 muls16s::return#0 muls16s::m#5 muls16s::m#3 muls16s::m#1 muls16s::m#2 muls16s::return#2 muls16u::return#0 muls16u::m#3 muls16u::m#1 muls16u::return#2 ] Allocated (was zp[4]:37) zp[4]:6 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 mul16s_compare::mn#0 mul16s_error::mn#0 mul16u_compare::mn#0 mul16u_error::mn#0 ] -Allocated (was zp[4]:51) zp[4]:10 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 mul16u_compare::mf#0 mul16u_error::mf#0 ] -Allocated (was zp[2]:70) zp[2]:14 [ muls16u::i#2 muls16u::i#1 mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 mul16u_error::a#0 ] -Allocated (was zp[2]:76) zp[2]:16 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 mul16s_error::b#0 ] -Allocated (was zp[1]:78) zp[1]:18 [ mulf_init::c#2 mulf_init::c#1 mul16u_compare::i#12 mul16u_compare::i#1 mul16s_compare::i#12 mul16s_compare::i#1 ] -Allocated (was zp[2]:79) zp[2]:19 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] -Allocated (was zp[2]:82) zp[2]:21 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] -Allocated (was zp[2]:85) zp[2]:23 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -Allocated (was zp[1]:87) zp[1]:25 [ mulf_init::dir#2 mulf_init::dir#4 ] -Allocated (was zp[2]:90) zp[2]:26 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] -Allocated (was zp[2]:170) zp[2]:28 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] -Allocated (was zp[2]:174) zp[2]:30 [ mul16s::$13 mul16s::$17 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] +Allocated (was zp[4]:49) zp[4]:10 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 mulf16s::m#4 mulf16s::m#5 mulf16s::m#1 mulf16s::m#0 mulf16s::m#2 mulf16u::return#2 mulf16s::return#0 mulf16s::return#2 mul16s_compare::mf#0 mulf16u::return#0 mulf16u::return#3 mul16s_error::mf#0 mul16u_compare::mf#0 mul16u_error::mf#0 ] +Allocated (was zp[2]:68) zp[2]:14 [ muls16u::i#2 muls16u::i#1 mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#0 print_sword::w#5 print_sword::w#0 print_sword::w#3 print_sword::w#1 print_sword::w#2 mul16u_error::a#0 ] +Allocated (was zp[2]:74) zp[2]:16 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 mul16s_error::b#0 ] +Allocated (was zp[1]:76) zp[1]:18 [ mulf_init::c#2 mulf_init::c#1 mul16u_compare::i#12 mul16u_compare::i#1 mul16s_compare::i#12 mul16s_compare::i#1 ] +Allocated (was zp[2]:77) zp[2]:19 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_line_cursor#22 print_line_cursor#43 print_line_cursor#1 ] +Allocated (was zp[2]:80) zp[2]:21 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] +Allocated (was zp[1]:85) zp[1]:23 [ mulf_init::dir#2 mulf_init::dir#4 ] +Allocated (was zp[2]:148) zp[2]:24 [ mulf16s::$9 mulf16s::$16 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] +Allocated (was zp[2]:168) zp[2]:26 [ mul16s::$9 mul16s::$16 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] +Allocated (was zp[2]:172) zp[2]:28 [ mul16s::$13 mul16s::$17 memset::dst#2 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 print_str::str#15 print_str::str#17 print_str::str#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -8376,7 +8313,7 @@ main: { lda #5 sta BGCOL // [5] call print_cls - // [307] phi from main to print_cls [phi:main->print_cls] + // [308] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -8385,7 +8322,7 @@ main: { // main::@1 __b1: // [7] call mulf_init - // [278] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [279] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] mulf_init_from___b1: jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -8394,7 +8331,7 @@ main: { // main::@2 __b2: // [9] call mul16u_compare - // [202] phi from main::@2 to mul16u_compare [phi:main::@2->mul16u_compare] + // [203] phi from main::@2 to mul16u_compare [phi:main::@2->mul16u_compare] mul16u_compare_from___b2: jsr mul16u_compare // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] @@ -8697,9 +8634,9 @@ print_ln: { } // print_str // Print a zero-terminated string -// print_str(byte* zp($1a) str) +// print_str(byte* zp($1c) str) print_str: { - .label str = $1a + .label str = $1c // [65] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] __b1_from_print_str: __b1_from___b2: @@ -9167,10 +9104,10 @@ print_sword: { // Fixes offsets introduced by using unsigned multiplication // mulf16s(signed word zp($e) a, signed word zp($10) b) mulf16s: { - .label __9 = $1c - .label __13 = $1e - .label __16 = $1c - .label __17 = $1e + .label __9 = $18 + .label __13 = $1a + .label __16 = $18 + .label __17 = $1a .label m = $a .label return = $a .label a = $e @@ -9268,14 +9205,14 @@ mulf16s: { // mulf16u // Fast multiply two unsigned words to a double word result // Done in assembler to utilize fast addition A+X -// mulf16u(word zp($1c) a, word zp($1e) b) +// mulf16u(word zp($18) a, word zp($1a) b) mulf16u: { .label memA = $f8 .label memB = $fa .label memR = $fc .label return = $a - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a // [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 -- _deref_pwuc1=vwuz1 lda.z a sta memA @@ -9399,10 +9336,10 @@ mulf16u: { // Fixes offsets introduced by using unsigned multiplication // mul16s(signed word zp($e) a, signed word zp($10) b) mul16s: { - .label __9 = $1c - .label __13 = $1e - .label __16 = $1c - .label __17 = $1e + .label __9 = $1a + .label __13 = $1c + .label __16 = $1a + .label __17 = $1c .label m = 6 .label return = 6 .label a = $e @@ -9421,14 +9358,7 @@ mul16s: { // [180] phi from mul16s to mul16u [phi:mul16s->mul16u] mul16u_from_mul16s: // [180] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [180] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [180] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // [166] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b5 @@ -9506,29 +9436,38 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($17) a, word zp($1a) b) +// mul16u(word zp($1c) a, word zp($1a) b) mul16u: { .label mb = $a - .label a = $17 + .label a = $1c .label res = 6 .label b = $1a .label return = 6 - .label b_1 = $1e - // [181] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 + lda #0 + sta.z mb+2 + sta.z mb+3 + // [182] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: - // [181] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [181] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 - lda #0 + // [182] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [182] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 + lda #<0 sta.z res - lda #0 + lda #>0 sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [181] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [182] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: - // [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 @@ -9536,20 +9475,20 @@ mul16u: { jmp __breturn // mul16u::@return __breturn: - // [183] return + // [184] return rts // mul16u::@2 __b2: - // [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a - // [185] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [186] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: - // [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -9563,26 +9502,26 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [187] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [188] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: - // [187] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [188] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: - // [188] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [189] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a - // [189] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [190] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [181] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [182] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: - // [181] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [181] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [181] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [182] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [182] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [182] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // muls16s @@ -9591,34 +9530,36 @@ mul16u: { // muls16s(signed word zp($e) a, signed word zp($10) b) muls16s: { .label m = 2 - .label j = $1c + .label j = $18 .label return = 2 - .label i = $1e + .label i = $1a .label a = $e .label b = $10 - // [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 -- vwsz1_lt_0_then_la1 + // [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 -- vwsz1_lt_0_then_la1 lda.z a+1 bmi __b5_from_muls16s jmp __b2 // muls16s::@2 __b2: - // [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 -- vwsz1_le_0_then_la1 + // [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 -- vwsz1_le_0_then_la1 lda.z a+1 bmi __b1_from___b2 bne !+ lda.z a beq __b1_from___b2 !: - // [192] phi from muls16s::@2 to muls16s::@3 [phi:muls16s::@2->muls16s::@3] + // [193] phi from muls16s::@2 to muls16s::@3 [phi:muls16s::@2->muls16s::@3] __b3_from___b2: - // [192] phi (signed dword) muls16s::m#3 = (signed byte) 0 [phi:muls16s::@2->muls16s::@3#0] -- vdsz1=vbsc1 - lda #0 + // [193] phi (signed dword) muls16s::m#3 = (signed dword) 0 [phi:muls16s::@2->muls16s::@3#0] -- vdsz1=vdsc1 + lda #<0 sta.z m - lda #0 + lda #>0 sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [192] phi (signed word) muls16s::j#2 = (signed byte) 0 [phi:muls16s::@2->muls16s::@3#1] -- vwsz1=vbsc1 + // [193] phi (signed word) muls16s::j#2 = (signed word) 0 [phi:muls16s::@2->muls16s::@3#1] -- vwsz1=vwsc1 lda #<0 sta.z j lda #>0 @@ -9626,26 +9567,28 @@ muls16s: { jmp __b3 // muls16s::@3 __b3: - // [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 -- vwsz1_neq_vwsz2_then_la1 + // [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 -- vwsz1_neq_vwsz2_then_la1 lda.z j+1 cmp.z a+1 bne __b4 lda.z j cmp.z a bne __b4 - // [194] phi from muls16s::@3 muls16s::@5 to muls16s::@1 [phi:muls16s::@3/muls16s::@5->muls16s::@1] + // [195] phi from muls16s::@3 muls16s::@5 to muls16s::@1 [phi:muls16s::@3/muls16s::@5->muls16s::@1] __b1_from___b3: __b1_from___b5: - // [194] phi (signed dword) muls16s::return#0 = (signed dword) muls16s::m#3 [phi:muls16s::@3/muls16s::@5->muls16s::@1#0] -- register_copy + // [195] phi (signed dword) muls16s::return#0 = (signed dword) muls16s::m#3 [phi:muls16s::@3/muls16s::@5->muls16s::@1#0] -- register_copy jmp __b1 - // [194] phi from muls16s::@2 to muls16s::@1 [phi:muls16s::@2->muls16s::@1] + // [195] phi from muls16s::@2 to muls16s::@1 [phi:muls16s::@2->muls16s::@1] __b1_from___b2: - // [194] phi (signed dword) muls16s::return#0 = (signed byte) 0 [phi:muls16s::@2->muls16s::@1#0] -- vdsz1=vbsc1 - lda #0 + // [195] phi (signed dword) muls16s::return#0 = (signed dword) 0 [phi:muls16s::@2->muls16s::@1#0] -- vdsz1=vdsc1 + lda #<0 sta.z return - lda #0 + lda #>0 sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 jmp __b1 // muls16s::@1 @@ -9653,11 +9596,11 @@ muls16s: { jmp __breturn // muls16s::@return __breturn: - // [195] return + // [196] return rts // muls16s::@4 __b4: - // [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 -- vdsz1=vdsz1_plus_vwsz2 + // [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 -- vdsz1=vdsz1_plus_vwsz2 lda.z b+1 ora #$7f bmi !+ @@ -9677,26 +9620,28 @@ muls16s: { lda.z m+3 adc.z $ff sta.z m+3 - // [197] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 -- vwsz1=_inc_vwsz1 + // [198] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 -- vwsz1=_inc_vwsz1 inc.z j bne !+ inc.z j+1 !: - // [192] phi from muls16s::@4 to muls16s::@3 [phi:muls16s::@4->muls16s::@3] + // [193] phi from muls16s::@4 to muls16s::@3 [phi:muls16s::@4->muls16s::@3] __b3_from___b4: - // [192] phi (signed dword) muls16s::m#3 = (signed dword) muls16s::m#1 [phi:muls16s::@4->muls16s::@3#0] -- register_copy - // [192] phi (signed word) muls16s::j#2 = (signed word) muls16s::j#1 [phi:muls16s::@4->muls16s::@3#1] -- register_copy + // [193] phi (signed dword) muls16s::m#3 = (signed dword) muls16s::m#1 [phi:muls16s::@4->muls16s::@3#0] -- register_copy + // [193] phi (signed word) muls16s::j#2 = (signed word) muls16s::j#1 [phi:muls16s::@4->muls16s::@3#1] -- register_copy jmp __b3 - // [198] phi from muls16s to muls16s::@5 [phi:muls16s->muls16s::@5] + // [199] phi from muls16s to muls16s::@5 [phi:muls16s->muls16s::@5] __b5_from_muls16s: - // [198] phi (signed dword) muls16s::m#5 = (signed byte) 0 [phi:muls16s->muls16s::@5#0] -- vdsz1=vbsc1 - lda #0 + // [199] phi (signed dword) muls16s::m#5 = (signed dword) 0 [phi:muls16s->muls16s::@5#0] -- vdsz1=vdsc1 + lda #<0 sta.z m - lda #0 + lda #>0 sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [198] phi (signed word) muls16s::i#2 = (signed byte) 0 [phi:muls16s->muls16s::@5#1] -- vwsz1=vbsc1 + // [199] phi (signed word) muls16s::i#2 = (signed word) 0 [phi:muls16s->muls16s::@5#1] -- vwsz1=vwsc1 lda #<0 sta.z i lda #>0 @@ -9704,7 +9649,7 @@ muls16s: { jmp __b5 // muls16s::@5 __b5: - // [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 -- vwsz1_neq_vwsz2_then_la1 + // [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 -- vwsz1_neq_vwsz2_then_la1 lda.z i+1 cmp.z a+1 bne __b6 @@ -9714,7 +9659,7 @@ muls16s: { jmp __b1_from___b5 // muls16s::@6 __b6: - // [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 -- vdsz1=vdsz1_minus_vwsz2 + // [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 -- vdsz1=vdsz1_minus_vwsz2 lda.z b+1 ora #$7f bmi !+ @@ -9734,58 +9679,58 @@ muls16s: { lda.z m+3 sbc.z $ff sta.z m+3 - // [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 -- vwsz1=_dec_vwsz1 + // [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 -- vwsz1=_dec_vwsz1 lda.z i bne !+ dec.z i+1 !: dec.z i - // [198] phi from muls16s::@6 to muls16s::@5 [phi:muls16s::@6->muls16s::@5] + // [199] phi from muls16s::@6 to muls16s::@5 [phi:muls16s::@6->muls16s::@5] __b5_from___b6: - // [198] phi (signed dword) muls16s::m#5 = (signed dword) muls16s::m#2 [phi:muls16s::@6->muls16s::@5#0] -- register_copy - // [198] phi (signed word) muls16s::i#2 = (signed word) muls16s::i#1 [phi:muls16s::@6->muls16s::@5#1] -- register_copy + // [199] phi (signed dword) muls16s::m#5 = (signed dword) muls16s::m#2 [phi:muls16s::@6->muls16s::@5#0] -- register_copy + // [199] phi (signed word) muls16s::i#2 = (signed word) muls16s::i#1 [phi:muls16s::@6->muls16s::@5#1] -- register_copy jmp __b5 } // mul16u_compare // Perform many possible word multiplications (slow and fast) and compare the results mul16u_compare: { - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a .label ms = 2 .label mn = 6 .label mf = $a .label i = $12 - // [203] phi from mul16u_compare to mul16u_compare::@1 [phi:mul16u_compare->mul16u_compare::@1] + // [204] phi from mul16u_compare to mul16u_compare::@1 [phi:mul16u_compare->mul16u_compare::@1] __b1_from_mul16u_compare: - // [203] phi (byte) mul16u_compare::i#12 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#0] -- vbuz1=vbuc1 + // [204] phi (byte) mul16u_compare::i#12 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [203] phi (word) mul16u_compare::b#6 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#1] -- vwuz1=vbuc1 + // [204] phi (word) mul16u_compare::b#6 = (word) 0 [phi:mul16u_compare->mul16u_compare::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z b lda #>0 sta.z b+1 - // [203] phi (word) mul16u_compare::a#6 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#2] -- vwuz1=vbuc1 + // [204] phi (word) mul16u_compare::a#6 = (word) 0 [phi:mul16u_compare->mul16u_compare::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z a lda #>0 sta.z a+1 - // [203] phi (byte*) print_char_cursor#145 = (byte*) 1024 [phi:mul16u_compare->mul16u_compare::@1#3] -- pbuz1=pbuc1 + // [204] phi (byte*) print_char_cursor#145 = (byte*) 1024 [phi:mul16u_compare->mul16u_compare::@1#3] -- pbuz1=pbuc1 lda #<$400 sta.z print_char_cursor lda #>$400 sta.z print_char_cursor+1 jmp __b1 - // [203] phi from mul16u_compare::@8 to mul16u_compare::@1 [phi:mul16u_compare::@8->mul16u_compare::@1] + // [204] phi from mul16u_compare::@8 to mul16u_compare::@1 [phi:mul16u_compare::@8->mul16u_compare::@1] __b1_from___b8: - // [203] phi (byte) mul16u_compare::i#12 = (byte) mul16u_compare::i#1 [phi:mul16u_compare::@8->mul16u_compare::@1#0] -- register_copy - // [203] phi (word) mul16u_compare::b#6 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@8->mul16u_compare::@1#1] -- register_copy - // [203] phi (word) mul16u_compare::a#6 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@8->mul16u_compare::@1#2] -- register_copy - // [203] phi (byte*) print_char_cursor#145 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@8->mul16u_compare::@1#3] -- register_copy + // [204] phi (byte) mul16u_compare::i#12 = (byte) mul16u_compare::i#1 [phi:mul16u_compare::@8->mul16u_compare::@1#0] -- register_copy + // [204] phi (word) mul16u_compare::b#6 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@8->mul16u_compare::@1#1] -- register_copy + // [204] phi (word) mul16u_compare::a#6 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@8->mul16u_compare::@1#2] -- register_copy + // [204] phi (byte*) print_char_cursor#145 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@8->mul16u_compare::@1#3] -- register_copy jmp __b1 // mul16u_compare::@1 __b1: - // [204] call print_str + // [205] call print_str // [64] phi from mul16u_compare::@1 to print_str [phi:mul16u_compare::@1->print_str] print_str_from___b1: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#145 [phi:mul16u_compare::@1->print_str#0] -- register_copy @@ -9795,22 +9740,22 @@ mul16u_compare: { lda #>str sta.z print_str.str+1 jsr print_str - // [205] phi from mul16u_compare::@1 to mul16u_compare::@2 [phi:mul16u_compare::@1->mul16u_compare::@2] + // [206] phi from mul16u_compare::@1 to mul16u_compare::@2 [phi:mul16u_compare::@1->mul16u_compare::@2] __b2_from___b1: - // [205] phi (byte) mul16u_compare::j#10 = (byte) 0 [phi:mul16u_compare::@1->mul16u_compare::@2#0] -- vbuyy=vbuc1 + // [206] phi (byte) mul16u_compare::j#10 = (byte) 0 [phi:mul16u_compare::@1->mul16u_compare::@2#0] -- vbuyy=vbuc1 ldy #0 - // [205] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#6 [phi:mul16u_compare::@1->mul16u_compare::@2#1] -- register_copy - // [205] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#6 [phi:mul16u_compare::@1->mul16u_compare::@2#2] -- register_copy + // [206] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#6 [phi:mul16u_compare::@1->mul16u_compare::@2#1] -- register_copy + // [206] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#6 [phi:mul16u_compare::@1->mul16u_compare::@2#2] -- register_copy jmp __b2 - // [205] phi from mul16u_compare::@5 to mul16u_compare::@2 [phi:mul16u_compare::@5->mul16u_compare::@2] + // [206] phi from mul16u_compare::@5 to mul16u_compare::@2 [phi:mul16u_compare::@5->mul16u_compare::@2] __b2_from___b5: - // [205] phi (byte) mul16u_compare::j#10 = (byte) mul16u_compare::j#1 [phi:mul16u_compare::@5->mul16u_compare::@2#0] -- register_copy - // [205] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@5->mul16u_compare::@2#1] -- register_copy - // [205] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@5->mul16u_compare::@2#2] -- register_copy + // [206] phi (byte) mul16u_compare::j#10 = (byte) mul16u_compare::j#1 [phi:mul16u_compare::@5->mul16u_compare::@2#0] -- register_copy + // [206] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@5->mul16u_compare::@2#1] -- register_copy + // [206] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@5->mul16u_compare::@2#2] -- register_copy jmp __b2 // mul16u_compare::@2 __b2: - // [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b -- vwuz1=vwuz1_plus_vwuc1 + // [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b -- vwuz1=vwuz1_plus_vwuc1 clc lda.z a adc #<$d2b @@ -9818,7 +9763,7 @@ mul16u_compare: { lda.z a+1 adc #>$d2b sta.z a+1 - // [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd -- vwuz1=vwuz1_plus_vwuc1 + // [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd -- vwuz1=vwuz1_plus_vwuc1 clc lda.z b adc #<$ffd @@ -9826,53 +9771,46 @@ mul16u_compare: { lda.z b+1 adc #>$ffd sta.z b+1 - // [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 - // [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 - // [210] call muls16u + // [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 + // [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 + // [211] call muls16u jsr muls16u - // [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 + // [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 jmp __b10 // mul16u_compare::@10 __b10: - // [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 - // [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 + // [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a lda.z a+1 sta.z mul16u.a+1 - // [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 - // [215] call mul16u + // [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 + // [216] call mul16u // [180] phi from mul16u_compare::@10 to mul16u [phi:mul16u_compare::@10->mul16u] mul16u_from___b10: // [180] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mul16u_compare::@10->mul16u#0] -- register_copy - // [180] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mul16u_compare::@10->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [180] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mul16u_compare::@10->mul16u#1] -- register_copy jsr mul16u - // [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 jmp __b11 // mul16u_compare::@11 __b11: - // [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 - // [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 - // [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 - // [220] call mulf16u + // [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 + // [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 + // [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 + // [221] call mulf16u // [157] phi from mul16u_compare::@11 to mulf16u [phi:mul16u_compare::@11->mulf16u] mulf16u_from___b11: // [157] phi (word) mulf16u::b#2 = (word) mulf16u::b#1 [phi:mul16u_compare::@11->mulf16u#0] -- register_copy // [157] phi (word) mulf16u::a#2 = (word) mulf16u::a#1 [phi:mul16u_compare::@11->mulf16u#1] -- register_copy jsr mulf16u - // [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 + // [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 jmp __b12 // mul16u_compare::@12 __b12: - // [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 - // [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 -- vduz1_eq_vduz2_then_la1 + // [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 + // [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 -- vduz1_eq_vduz2_then_la1 lda.z ms cmp.z mf bne !+ @@ -9886,24 +9824,24 @@ mul16u_compare: { cmp.z mf+3 beq __b3_from___b12 !: - // [224] phi from mul16u_compare::@12 to mul16u_compare::@6 [phi:mul16u_compare::@12->mul16u_compare::@6] + // [225] phi from mul16u_compare::@12 to mul16u_compare::@6 [phi:mul16u_compare::@12->mul16u_compare::@6] __b6_from___b12: jmp __b6 // mul16u_compare::@6 __b6: - // [225] phi from mul16u_compare::@6 to mul16u_compare::@3 [phi:mul16u_compare::@6->mul16u_compare::@3] + // [226] phi from mul16u_compare::@6 to mul16u_compare::@3 [phi:mul16u_compare::@6->mul16u_compare::@3] __b3_from___b6: - // [225] phi (byte) mul16u_compare::ok#4 = (byte) 0 [phi:mul16u_compare::@6->mul16u_compare::@3#0] -- vbuxx=vbuc1 + // [226] phi (byte) mul16u_compare::ok#4 = (byte) 0 [phi:mul16u_compare::@6->mul16u_compare::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [225] phi from mul16u_compare::@12 to mul16u_compare::@3 [phi:mul16u_compare::@12->mul16u_compare::@3] + // [226] phi from mul16u_compare::@12 to mul16u_compare::@3 [phi:mul16u_compare::@12->mul16u_compare::@3] __b3_from___b12: - // [225] phi (byte) mul16u_compare::ok#4 = (byte) 1 [phi:mul16u_compare::@12->mul16u_compare::@3#0] -- vbuxx=vbuc1 + // [226] phi (byte) mul16u_compare::ok#4 = (byte) 1 [phi:mul16u_compare::@12->mul16u_compare::@3#0] -- vbuxx=vbuc1 ldx #1 jmp __b3 // mul16u_compare::@3 __b3: - // [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 -- vduz1_eq_vduz2_then_la1 + // [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 -- vduz1_eq_vduz2_then_la1 lda.z ms cmp.z mn bne !+ @@ -9917,71 +9855,71 @@ mul16u_compare: { cmp.z mn+3 beq __b15_from___b3 !: - // [228] phi from mul16u_compare::@3 to mul16u_compare::@4 [phi:mul16u_compare::@3->mul16u_compare::@4] + // [229] phi from mul16u_compare::@3 to mul16u_compare::@4 [phi:mul16u_compare::@3->mul16u_compare::@4] __b4_from___b3: - // [228] phi (byte) mul16u_compare::ok#3 = (byte) 0 [phi:mul16u_compare::@3->mul16u_compare::@4#0] -- vbuxx=vbuc1 + // [229] phi (byte) mul16u_compare::ok#3 = (byte) 0 [phi:mul16u_compare::@3->mul16u_compare::@4#0] -- vbuxx=vbuc1 ldx #0 jmp __b4 - // [227] phi from mul16u_compare::@3 to mul16u_compare::@15 [phi:mul16u_compare::@3->mul16u_compare::@15] + // [228] phi from mul16u_compare::@3 to mul16u_compare::@15 [phi:mul16u_compare::@3->mul16u_compare::@15] __b15_from___b3: jmp __b15 // mul16u_compare::@15 __b15: - // [228] phi from mul16u_compare::@15 to mul16u_compare::@4 [phi:mul16u_compare::@15->mul16u_compare::@4] + // [229] phi from mul16u_compare::@15 to mul16u_compare::@4 [phi:mul16u_compare::@15->mul16u_compare::@4] __b4_from___b15: - // [228] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@15->mul16u_compare::@4#0] -- register_copy + // [229] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@15->mul16u_compare::@4#0] -- register_copy jmp __b4 // mul16u_compare::@4 __b4: - // [229] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 -- vbuxx_neq_0_then_la1 + // [230] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 -- vbuxx_neq_0_then_la1 cpx #0 bne __b5 jmp __b7 // mul16u_compare::@7 __b7: - // [230] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [231] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mul16u_error.a lda.z a+1 sta.z mul16u_error.a+1 - // [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 - // [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 - // [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 - // [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 - // [236] call mul16u_error - // [248] phi from mul16u_compare::@7 to mul16u_error [phi:mul16u_compare::@7->mul16u_error] + // [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 + // [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 + // [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 + // [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 + // [237] call mul16u_error + // [249] phi from mul16u_compare::@7 to mul16u_error [phi:mul16u_compare::@7->mul16u_error] mul16u_error_from___b7: jsr mul16u_error jmp __breturn // mul16u_compare::@return __breturn: - // [237] return + // [238] return rts // mul16u_compare::@5 __b5: - // [238] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 -- vbuyy=_inc_vbuyy + // [239] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 -- vbuyy=_inc_vbuyy iny - // [239] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 -- vbuyy_neq_vbuc1_then_la1 + // [240] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 -- vbuyy_neq_vbuc1_then_la1 cpy #$10 bne __b2_from___b5 jmp __b8 // mul16u_compare::@8 __b8: - // [240] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 -- vbuz1=_inc_vbuz1 + // [241] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 -- vbuz1=_inc_vbuz1 inc.z i - // [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 -- vbuz1_neq_vbuc1_then_la1 + // [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b8 - // [242] phi from mul16u_compare::@8 to mul16u_compare::@9 [phi:mul16u_compare::@8->mul16u_compare::@9] + // [243] phi from mul16u_compare::@8 to mul16u_compare::@9 [phi:mul16u_compare::@8->mul16u_compare::@9] __b9_from___b8: jmp __b9 // mul16u_compare::@9 __b9: - // [243] call print_ln + // [244] call print_ln // [59] phi from mul16u_compare::@9 to print_ln [phi:mul16u_compare::@9->print_ln] print_ln_from___b9: // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@9->print_ln#0] -- register_copy @@ -9994,12 +9932,12 @@ mul16u_compare: { jmp __b13 // mul16u_compare::@13 __b13: - // [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 - // [245] call print_str + // [246] call print_str // [64] phi from mul16u_compare::@13 to print_str [phi:mul16u_compare::@13->print_str] print_str_from___b13: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#187 [phi:mul16u_compare::@13->print_str#0] -- register_copy @@ -10009,12 +9947,12 @@ mul16u_compare: { lda #>str1 sta.z print_str.str+1 jsr print_str - // [246] phi from mul16u_compare::@13 to mul16u_compare::@14 [phi:mul16u_compare::@13->mul16u_compare::@14] + // [247] phi from mul16u_compare::@13 to mul16u_compare::@14 [phi:mul16u_compare::@13->mul16u_compare::@14] __b14_from___b13: jmp __b14 // mul16u_compare::@14 __b14: - // [247] call print_ln + // [248] call print_ln // [59] phi from mul16u_compare::@14 to print_ln [phi:mul16u_compare::@14->print_ln] print_ln_from___b14: // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@14->print_ln#0] -- register_copy @@ -10025,14 +9963,14 @@ mul16u_compare: { .byte 0 } // mul16u_error -// mul16u_error(word zp($e) a, word zp($1e) b, dword zp(2) ms, dword zp(6) mn, dword zp($a) mf) +// mul16u_error(word zp($e) a, word zp($1a) b, dword zp(2) ms, dword zp(6) mn, dword zp($a) mf) mul16u_error: { .label a = $e - .label b = $1e + .label b = $1a .label ms = 2 .label mn = 6 .label mf = $a - // [249] call print_str + // [250] call print_str // [64] phi from mul16u_error to print_str [phi:mul16u_error->print_str] print_str_from_mul16u_error: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#132 [phi:mul16u_error->print_str#0] -- register_copy @@ -10045,19 +9983,19 @@ mul16u_error: { jmp __b1 // mul16u_error::@1 __b1: - // [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 - // [251] call print_word + // [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 + // [252] call print_word // [115] phi from mul16u_error::@1 to print_word [phi:mul16u_error::@1->print_word] print_word_from___b1: // [115] phi (byte*) print_char_cursor#137 = (byte*) print_char_cursor#132 [phi:mul16u_error::@1->print_word#0] -- register_copy // [115] phi (word) print_word::w#5 = (word) print_word::w#3 [phi:mul16u_error::@1->print_word#1] -- register_copy jsr print_word - // [252] phi from mul16u_error::@1 to mul16u_error::@2 [phi:mul16u_error::@1->mul16u_error::@2] + // [253] phi from mul16u_error::@1 to mul16u_error::@2 [phi:mul16u_error::@1->mul16u_error::@2] __b2_from___b1: jmp __b2 // mul16u_error::@2 __b2: - // [253] call print_str + // [254] call print_str // [64] phi from mul16u_error::@2 to print_str [phi:mul16u_error::@2->print_str] print_str_from___b2: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@2->print_str#0] -- register_copy @@ -10070,23 +10008,23 @@ mul16u_error: { jmp __b3 // mul16u_error::@3 __b3: - // [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 -- vwuz1=vwuz2 + // [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 -- vwuz1=vwuz2 lda.z b sta.z print_word.w lda.z b+1 sta.z print_word.w+1 - // [255] call print_word + // [256] call print_word // [115] phi from mul16u_error::@3 to print_word [phi:mul16u_error::@3->print_word] print_word_from___b3: // [115] phi (byte*) print_char_cursor#137 = (byte*) print_char_cursor#132 [phi:mul16u_error::@3->print_word#0] -- register_copy // [115] phi (word) print_word::w#5 = (word) print_word::w#4 [phi:mul16u_error::@3->print_word#1] -- register_copy jsr print_word - // [256] phi from mul16u_error::@3 to mul16u_error::@4 [phi:mul16u_error::@3->mul16u_error::@4] + // [257] phi from mul16u_error::@3 to mul16u_error::@4 [phi:mul16u_error::@3->mul16u_error::@4] __b4_from___b3: jmp __b4 // mul16u_error::@4 __b4: - // [257] call print_str + // [258] call print_str // [64] phi from mul16u_error::@4 to print_str [phi:mul16u_error::@4->print_str] print_str_from___b4: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@4->print_str#0] -- register_copy @@ -10099,19 +10037,19 @@ mul16u_error: { jmp __b5 // mul16u_error::@5 __b5: - // [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 - // [259] call print_dword + // [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 + // [260] call print_dword // [109] phi from mul16u_error::@5 to print_dword [phi:mul16u_error::@5->print_dword] print_dword_from___b5: // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@5->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#1 [phi:mul16u_error::@5->print_dword#1] -- register_copy jsr print_dword - // [260] phi from mul16u_error::@5 to mul16u_error::@6 [phi:mul16u_error::@5->mul16u_error::@6] + // [261] phi from mul16u_error::@5 to mul16u_error::@6 [phi:mul16u_error::@5->mul16u_error::@6] __b6_from___b5: jmp __b6 // mul16u_error::@6 __b6: - // [261] call print_str + // [262] call print_str // [64] phi from mul16u_error::@6 to print_str [phi:mul16u_error::@6->print_str] print_str_from___b6: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@6->print_str#0] -- register_copy @@ -10124,7 +10062,7 @@ mul16u_error: { jmp __b7 // mul16u_error::@7 __b7: - // [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 -- vduz1=vduz2 + // [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 -- vduz1=vduz2 lda.z mn sta.z print_dword.dw lda.z mn+1 @@ -10133,18 +10071,18 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z mn+3 sta.z print_dword.dw+3 - // [263] call print_dword + // [264] call print_dword // [109] phi from mul16u_error::@7 to print_dword [phi:mul16u_error::@7->print_dword] print_dword_from___b7: // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@7->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#2 [phi:mul16u_error::@7->print_dword#1] -- register_copy jsr print_dword - // [264] phi from mul16u_error::@7 to mul16u_error::@8 [phi:mul16u_error::@7->mul16u_error::@8] + // [265] phi from mul16u_error::@7 to mul16u_error::@8 [phi:mul16u_error::@7->mul16u_error::@8] __b8_from___b7: jmp __b8 // mul16u_error::@8 __b8: - // [265] call print_str + // [266] call print_str // [64] phi from mul16u_error::@8 to print_str [phi:mul16u_error::@8->print_str] print_str_from___b8: // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@8->print_str#0] -- register_copy @@ -10157,7 +10095,7 @@ mul16u_error: { jmp __b9 // mul16u_error::@9 __b9: - // [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 -- vduz1=vduz2 + // [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 -- vduz1=vduz2 lda.z mf sta.z print_dword.dw lda.z mf+1 @@ -10166,18 +10104,18 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z mf+3 sta.z print_dword.dw+3 - // [267] call print_dword + // [268] call print_dword // [109] phi from mul16u_error::@9 to print_dword [phi:mul16u_error::@9->print_dword] print_dword_from___b9: // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@9->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#3 [phi:mul16u_error::@9->print_dword#1] -- register_copy jsr print_dword - // [268] phi from mul16u_error::@9 to mul16u_error::@10 [phi:mul16u_error::@9->mul16u_error::@10] + // [269] phi from mul16u_error::@9 to mul16u_error::@10 [phi:mul16u_error::@9->mul16u_error::@10] __b10_from___b9: jmp __b10 // mul16u_error::@10 __b10: - // [269] call print_ln + // [270] call print_ln // [59] phi from mul16u_error::@10 to print_ln [phi:mul16u_error::@10->print_ln] print_ln_from___b10: // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#22 [phi:mul16u_error::@10->print_ln#0] -- register_copy @@ -10190,7 +10128,7 @@ mul16u_error: { jmp __breturn // mul16u_error::@return __breturn: - // [270] return + // [271] return rts str: .text "multiply mismatch " .byte 0 @@ -10198,29 +10136,31 @@ mul16u_error: { // muls16u // Slow multiplication of unsigned words // Calculate an unsigned multiplication by repeated addition -// muls16u(word zp($1c) a, word zp($1e) b) +// muls16u(word zp($18) a, word zp($1a) b) muls16u: { .label return = 2 .label m = 2 .label i = $e - .label a = $1c - .label b = $1e - // [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 -- vwuz1_eq_0_then_la1 + .label a = $18 + .label b = $1a + // [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 -- vwuz1_eq_0_then_la1 lda.z a bne !+ lda.z a+1 beq __b1_from_muls16u !: - // [272] phi from muls16u to muls16u::@2 [phi:muls16u->muls16u::@2] + // [273] phi from muls16u to muls16u::@2 [phi:muls16u->muls16u::@2] __b2_from_muls16u: - // [272] phi (dword) muls16u::m#3 = (byte) 0 [phi:muls16u->muls16u::@2#0] -- vduz1=vbuc1 - lda #0 + // [273] phi (dword) muls16u::m#3 = (dword) 0 [phi:muls16u->muls16u::@2#0] -- vduz1=vduc1 + lda #<0 sta.z m - lda #0 + lda #>0 sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [272] phi (word) muls16u::i#2 = (byte) 0 [phi:muls16u->muls16u::@2#1] -- vwuz1=vbuc1 + // [273] phi (word) muls16u::i#2 = (word) 0 [phi:muls16u->muls16u::@2#1] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -10228,25 +10168,27 @@ muls16u: { jmp __b2 // muls16u::@2 __b2: - // [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 -- vwuz1_neq_vwuz2_then_la1 + // [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 -- vwuz1_neq_vwuz2_then_la1 lda.z i+1 cmp.z a+1 bne __b3 lda.z i cmp.z a bne __b3 - // [274] phi from muls16u::@2 to muls16u::@1 [phi:muls16u::@2->muls16u::@1] + // [275] phi from muls16u::@2 to muls16u::@1 [phi:muls16u::@2->muls16u::@1] __b1_from___b2: - // [274] phi (dword) muls16u::return#0 = (dword) muls16u::m#3 [phi:muls16u::@2->muls16u::@1#0] -- register_copy + // [275] phi (dword) muls16u::return#0 = (dword) muls16u::m#3 [phi:muls16u::@2->muls16u::@1#0] -- register_copy jmp __b1 - // [274] phi from muls16u to muls16u::@1 [phi:muls16u->muls16u::@1] + // [275] phi from muls16u to muls16u::@1 [phi:muls16u->muls16u::@1] __b1_from_muls16u: - // [274] phi (dword) muls16u::return#0 = (byte) 0 [phi:muls16u->muls16u::@1#0] -- vduz1=vbuc1 - lda #0 + // [275] phi (dword) muls16u::return#0 = (dword) 0 [phi:muls16u->muls16u::@1#0] -- vduz1=vduc1 + lda #<0 sta.z return - lda #0 + lda #>0 sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 jmp __b1 // muls16u::@1 @@ -10254,11 +10196,11 @@ muls16u: { jmp __breturn // muls16u::@return __breturn: - // [275] return + // [276] return rts // muls16u::@3 __b3: - // [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 -- vduz1=vduz1_plus_vwuz2 + // [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 -- vduz1=vduz1_plus_vwuz2 lda.z m clc adc.z b @@ -10272,15 +10214,15 @@ muls16u: { lda.z m+3 adc #0 sta.z m+3 - // [277] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 -- vwuz1=_inc_vwuz1 + // [278] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [272] phi from muls16u::@3 to muls16u::@2 [phi:muls16u::@3->muls16u::@2] + // [273] phi from muls16u::@3 to muls16u::@2 [phi:muls16u::@3->muls16u::@2] __b2_from___b3: - // [272] phi (dword) muls16u::m#3 = (dword) muls16u::m#1 [phi:muls16u::@3->muls16u::@2#0] -- register_copy - // [272] phi (word) muls16u::i#2 = (word) muls16u::i#1 [phi:muls16u::@3->muls16u::@2#1] -- register_copy + // [273] phi (dword) muls16u::m#3 = (dword) muls16u::m#1 [phi:muls16u::@3->muls16u::@2#0] -- register_copy + // [273] phi (word) muls16u::i#2 = (word) muls16u::i#1 [phi:muls16u::@3->muls16u::@2#1] -- register_copy jmp __b2 } // mulf_init @@ -10291,31 +10233,31 @@ mulf_init: { // Counter used for determining x%2==0 .label sqr1_hi = $13 // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $1a + .label sqr = $18 .label sqr1_lo = $10 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = $17 + .label sqr2_hi = $1c .label sqr2_lo = $15 //Start with g(0)=f(255) - .label dir = $19 - // [279] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label dir = $17 + // [280] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [279] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [280] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [279] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [280] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [279] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [280] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [279] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [280] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [279] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [280] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -10323,26 +10265,26 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] + // [282] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [281] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [282] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [281] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [282] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [281] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [282] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [281] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [282] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -10350,7 +10292,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -10360,114 +10302,114 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [285] return + // [286] return rts // mulf_init::@6 __b6: - // [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y - // [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x ldy #0 sta (sqr2_hi),y - // [288] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [289] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax - // [290] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [291] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b9_from___b6 - // [292] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [293] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [292] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [293] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [291] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [292] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] __b9_from___b6: jmp __b9 // mulf_init::@9 __b9: - // [292] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [293] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [292] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [293] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [293] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [294] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [281] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [282] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [281] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [281] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [281] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [281] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [282] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [282] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [282] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [282] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [294] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [295] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c - // [296] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [297] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [297] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [298] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx - // [298] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [299] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [299] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [300] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] __b3_from___b2: __b3_from___b4: - // [299] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [299] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [300] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [300] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [300] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 + // [301] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 lda.z sqr - // [301] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa + // [302] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_lo),y - // [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 - // [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + // [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_hi),y - // [304] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [305] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -10475,31 +10417,31 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [306] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [307] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [279] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [280] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [279] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [279] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [279] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [279] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [279] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [280] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [280] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [280] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [280] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [280] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [308] call memset - // [310] phi from print_cls to memset [phi:print_cls->memset] + // [309] call memset + // [311] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [309] return + // [310] return rts } // memset @@ -10509,10 +10451,10 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $1a - // [311] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $1c + // [312] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [311] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [312] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -10520,7 +10462,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -10530,22 +10472,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [313] return + // [314] return rts // memset::@2 __b2: - // [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [316] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [311] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [312] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [311] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [312] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -10692,22 +10634,19 @@ Removing instruction jmp __b1 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #<0 +Removing instruction lda #>0 +Removing instruction lda #>0 +Removing instruction lda #>0 +Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #<0 Removing instruction lda #>0 Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 -Removing instruction lda #<0 Removing instruction lda #>0 -Removing instruction lda #0 +Removing instruction lda #>0 +Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Removing instruction lda #0 @@ -10975,6 +10914,7 @@ Removing instruction jmp __b2 Removing instruction jmp __b4 Removing instruction jmp __b8 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 Removing instruction lda.z a+1 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: @@ -10988,8 +10928,7 @@ Succesful ASM optimization Pass5DoubleJumpElimination Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination Fixing long branch [109] bne __b1 to beq -Fixing long branch [844] bne __b2 to beq -Fixing long branch [850] bne __b1 to beq +Fixing long branch [849] bne __b1 to beq FINAL SYMBOL TABLE (label) @1 @@ -11012,8 +10951,8 @@ FINAL SYMBOL TABLE (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:26 22.0 -(byte*) memset::dst#2 dst zp[2]:26 14.666666666666666 +(byte*) memset::dst#1 dst zp[2]:28 22.0 +(byte*) memset::dst#2 dst zp[2]:28 14.666666666666666 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -11022,10 +10961,10 @@ FINAL SYMBOL TABLE (void*) memset::str (const void*) memset::str#0 str = (void*)(byte*) 1024 (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) -(word~) mul16s::$13 zp[2]:30 4.0 -(word~) mul16s::$16 zp[2]:28 4.0 -(word~) mul16s::$17 zp[2]:30 4.0 -(word~) mul16s::$9 zp[2]:28 4.0 +(word~) mul16s::$13 zp[2]:28 4.0 +(word~) mul16s::$16 zp[2]:26 4.0 +(word~) mul16s::$17 zp[2]:28 4.0 +(word~) mul16s::$9 zp[2]:26 4.0 (label) mul16s::@1 (label) mul16s::@2 (label) mul16s::@3 @@ -11117,16 +11056,17 @@ FINAL SYMBOL TABLE (label) mul16u::@4 (label) mul16u::@return (word) mul16u::a -(word) mul16u::a#0 a zp[2]:23 1001.0 -(word) mul16u::a#1 a zp[2]:23 2.0 -(word) mul16u::a#2 a zp[2]:23 101.0 -(word) mul16u::a#3 a zp[2]:23 667.6666666666667 -(word) mul16u::a#6 a zp[2]:23 105.0 +(word) mul16u::a#0 a zp[2]:28 1001.0 +(word) mul16u::a#1 a zp[2]:28 2.0 +(word) mul16u::a#2 a zp[2]:28 101.0 +(word) mul16u::a#3 a zp[2]:28 667.6666666666667 +(word) mul16u::a#6 a zp[2]:28 52.5 (word) mul16u::b (word) mul16u::b#0 b zp[2]:26 4.0 -(word) mul16u::b#1 b_1 zp[2]:30 202.0 +(word) mul16u::b#1 b zp[2]:26 202.0 +(word) mul16u::b#2 b zp[2]:26 103.0 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:10 105.0 +(dword) mul16u::mb#0 mb zp[4]:10 4.0 (dword) mul16u::mb#1 mb zp[4]:10 2002.0 (dword) mul16u::mb#2 mb zp[4]:10 429.2857142857143 (dword) mul16u::res @@ -11154,13 +11094,13 @@ FINAL SYMBOL TABLE (label) mul16u_compare::@9 (label) mul16u_compare::@return (word) mul16u_compare::a -(word) mul16u_compare::a#1 a zp[2]:28 17.862068965517242 -(word) mul16u_compare::a#2 a zp[2]:28 213.0 -(word) mul16u_compare::a#6 a zp[2]:28 11.0 +(word) mul16u_compare::a#1 a zp[2]:24 17.862068965517242 +(word) mul16u_compare::a#2 a zp[2]:24 213.0 +(word) mul16u_compare::a#6 a zp[2]:24 11.0 (word) mul16u_compare::b -(word) mul16u_compare::b#1 b zp[2]:30 17.862068965517242 -(word) mul16u_compare::b#2 b zp[2]:30 106.5 -(word) mul16u_compare::b#6 b zp[2]:30 11.0 +(word) mul16u_compare::b#1 b zp[2]:26 17.862068965517242 +(word) mul16u_compare::b#2 b zp[2]:26 106.5 +(word) mul16u_compare::b#6 b zp[2]:26 11.0 (byte) mul16u_compare::i (byte) mul16u_compare::i#1 i zp[1]:18 16.5 (byte) mul16u_compare::i#12 i zp[1]:18 0.7586206896551724 @@ -11192,7 +11132,7 @@ FINAL SYMBOL TABLE (word) mul16u_error::a (word) mul16u_error::a#0 a zp[2]:14 0.5714285714285714 (word) mul16u_error::b -(word) mul16u_error::b#0 b zp[2]:30 0.4 +(word) mul16u_error::b#0 b zp[2]:26 0.4 (dword) mul16u_error::mf (dword) mul16u_error::mf#0 mf zp[4]:10 0.21052631578947367 (dword) mul16u_error::mn @@ -11201,10 +11141,10 @@ FINAL SYMBOL TABLE (dword) mul16u_error::ms#0 ms zp[4]:2 0.3076923076923077 (const string) mul16u_error::str[] = (string) "multiply mismatch " (signed dword()) mulf16s((signed word) mulf16s::a , (signed word) mulf16s::b) -(word~) mulf16s::$13 zp[2]:30 4.0 -(word~) mulf16s::$16 zp[2]:28 4.0 -(word~) mulf16s::$17 zp[2]:30 4.0 -(word~) mulf16s::$9 zp[2]:28 4.0 +(word~) mulf16s::$13 zp[2]:26 4.0 +(word~) mulf16s::$16 zp[2]:24 4.0 +(word~) mulf16s::$17 zp[2]:26 4.0 +(word~) mulf16s::$9 zp[2]:24 4.0 (label) mulf16s::@1 (label) mulf16s::@2 (label) mulf16s::@3 @@ -11227,13 +11167,13 @@ FINAL SYMBOL TABLE (dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b) (label) mulf16u::@return (word) mulf16u::a -(word) mulf16u::a#0 a zp[2]:28 2.0 -(word) mulf16u::a#1 a zp[2]:28 101.0 -(word) mulf16u::a#2 a zp[2]:28 105.0 +(word) mulf16u::a#0 a zp[2]:24 2.0 +(word) mulf16u::a#1 a zp[2]:24 101.0 +(word) mulf16u::a#2 a zp[2]:24 105.0 (word) mulf16u::b -(word) mulf16u::b#0 b zp[2]:30 4.0 -(word) mulf16u::b#1 b zp[2]:30 202.0 -(word) mulf16u::b#2 b zp[2]:30 52.5 +(word) mulf16u::b#0 b zp[2]:26 4.0 +(word) mulf16u::b#1 b zp[2]:26 202.0 +(word) mulf16u::b#2 b zp[2]:26 52.5 (const word*) mulf16u::memA = (word*) 248 (const word*) mulf16u::memB = (word*) 250 (const dword*) mulf16u::memR = (dword*) 252 @@ -11259,13 +11199,13 @@ FINAL SYMBOL TABLE (byte) mulf_init::c#1 c zp[1]:18 2.5384615384615383 (byte) mulf_init::c#2 c zp[1]:18 11.0 (byte) mulf_init::dir -(byte) mulf_init::dir#2 dir zp[1]:25 4.125 -(byte) mulf_init::dir#4 dir zp[1]:25 11.0 +(byte) mulf_init::dir#2 dir zp[1]:23 4.125 +(byte) mulf_init::dir#4 dir zp[1]:23 11.0 (word) mulf_init::sqr -(word) mulf_init::sqr#1 sqr zp[2]:26 11.0 -(word) mulf_init::sqr#2 sqr zp[2]:26 22.0 -(word) mulf_init::sqr#3 sqr zp[2]:26 9.166666666666666 -(word) mulf_init::sqr#4 sqr zp[2]:26 5.5 +(word) mulf_init::sqr#1 sqr zp[2]:24 11.0 +(word) mulf_init::sqr#2 sqr zp[2]:24 22.0 +(word) mulf_init::sqr#3 sqr zp[2]:24 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp[2]:24 5.5 (byte*) mulf_init::sqr1_hi (byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:19 7.333333333333333 (byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:19 2.75 @@ -11273,8 +11213,8 @@ FINAL SYMBOL TABLE (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:16 22.0 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:16 3.142857142857143 (byte*) mulf_init::sqr2_hi -(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:23 3.6666666666666665 -(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:23 8.25 +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:28 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:28 8.25 (byte*) mulf_init::sqr2_lo (byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:21 22.0 (byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:21 4.888888888888889 @@ -11302,11 +11242,11 @@ FINAL SYMBOL TABLE (signed word) muls16s::b (signed word) muls16s::b#0 b zp[2]:16 191.1818181818182 (signed word) muls16s::i -(signed word) muls16s::i#1 i zp[2]:30 2002.0 -(signed word) muls16s::i#2 i zp[2]:30 1001.0 +(signed word) muls16s::i#1 i zp[2]:26 2002.0 +(signed word) muls16s::i#2 i zp[2]:26 1001.0 (signed word) muls16s::j -(signed word) muls16s::j#1 j zp[2]:28 2002.0 -(signed word) muls16s::j#2 j zp[2]:28 1001.0 +(signed word) muls16s::j#1 j zp[2]:24 2002.0 +(signed word) muls16s::j#2 j zp[2]:24 1001.0 (signed dword) muls16s::m (signed dword) muls16s::m#1 m zp[4]:2 1001.0 (signed dword) muls16s::m#2 m zp[4]:2 1001.0 @@ -11321,9 +11261,9 @@ FINAL SYMBOL TABLE (label) muls16u::@3 (label) muls16u::@return (word) muls16u::a -(word) muls16u::a#0 a zp[2]:28 157.71428571428572 +(word) muls16u::a#0 a zp[2]:24 157.71428571428572 (word) muls16u::b -(word) muls16u::b#0 b zp[2]:30 183.66666666666669 +(word) muls16u::b#0 b zp[2]:26 183.66666666666669 (word) muls16u::i (word) muls16u::i#1 i zp[2]:14 2002.0 (word) muls16u::i#2 i zp[2]:14 1001.0 @@ -11401,9 +11341,9 @@ FINAL SYMBOL TABLE (label) print_str::@2 (label) print_str::@return (byte*) print_str::str -(byte*) print_str::str#0 str zp[2]:26 202.0 -(byte*) print_str::str#15 str zp[2]:26 101.5 -(byte*) print_str::str#17 str zp[2]:26 2.0 +(byte*) print_str::str#0 str zp[2]:28 202.0 +(byte*) print_str::str#15 str zp[2]:28 101.5 +(byte*) print_str::str#17 str zp[2]:28 2.0 (void()) print_sword((signed word) print_sword::w) (label) print_sword::@1 (label) print_sword::@2 @@ -11448,13 +11388,12 @@ zp[2]:19 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_line_cursor#22 print_ reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] zp[2]:21 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -zp[2]:23 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -zp[1]:25 [ mulf_init::dir#2 mulf_init::dir#4 ] -zp[2]:26 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] +zp[1]:23 [ mulf_init::dir#2 mulf_init::dir#4 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -zp[2]:28 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] -zp[2]:30 [ mul16s::$13 mul16s::$17 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] +zp[2]:24 [ mulf16s::$9 mulf16s::$16 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] +zp[2]:26 [ mul16s::$9 mul16s::$16 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] +zp[2]:28 [ mul16s::$13 mul16s::$17 memset::dst#2 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 print_str::str#15 print_str::str#17 print_str::str#0 ] reg byte a [ mul16u::$1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] @@ -11462,7 +11401,7 @@ reg byte a [ mulf_init::$5 ] FINAL ASSEMBLER -Score: 449340 +Score: 469028 // File Comments // Test the fast multiplication library @@ -11488,19 +11427,19 @@ main: { sta BGCOL // print_cls() // [5] call print_cls - // [307] phi from main to print_cls [phi:main->print_cls] + // [308] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mulf_init() // [7] call mulf_init - // [278] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [279] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 // mul16u_compare() // [9] call mul16u_compare - // [202] phi from main::@2 to mul16u_compare [phi:main::@2->mul16u_compare] + // [203] phi from main::@2 to mul16u_compare [phi:main::@2->mul16u_compare] jsr mul16u_compare // [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] // main::@3 @@ -11774,9 +11713,9 @@ print_ln: { } // print_str // Print a zero-terminated string -// print_str(byte* zp($1a) str) +// print_str(byte* zp($1c) str) print_str: { - .label str = $1a + .label str = $1c // [65] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1] // [65] phi (byte*) print_char_cursor#132 = (byte*) print_char_cursor#154 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy // [65] phi (byte*) print_str::str#15 = (byte*) print_str::str#17 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy @@ -12192,10 +12131,10 @@ print_sword: { // Fixes offsets introduced by using unsigned multiplication // mulf16s(signed word zp($e) a, signed word zp($10) b) mulf16s: { - .label __9 = $1c - .label __13 = $1e - .label __16 = $1c - .label __17 = $1e + .label __9 = $18 + .label __13 = $1a + .label __16 = $18 + .label __17 = $1a .label m = $a .label return = $a .label a = $e @@ -12289,14 +12228,14 @@ mulf16s: { // mulf16u // Fast multiply two unsigned words to a double word result // Done in assembler to utilize fast addition A+X -// mulf16u(word zp($1c) a, word zp($1e) b) +// mulf16u(word zp($18) a, word zp($1a) b) mulf16u: { .label memA = $f8 .label memB = $fa .label memR = $fc .label return = $a - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a // *memA = a // [158] *((const word*) mulf16u::memA) ← (word) mulf16u::a#2 -- _deref_pwuc1=vwuz1 lda.z a @@ -12423,10 +12362,10 @@ mulf16u: { // Fixes offsets introduced by using unsigned multiplication // mul16s(signed word zp($e) a, signed word zp($10) b) mul16s: { - .label __9 = $1c - .label __13 = $1e - .label __16 = $1c - .label __17 = $1e + .label __9 = $1a + .label __13 = $1c + .label __16 = $1a + .label __17 = $1c .label m = 6 .label return = 6 .label a = $e @@ -12445,14 +12384,7 @@ mul16s: { // [165] call mul16u // [180] phi from mul16s to mul16u [phi:mul16s->mul16u] // [180] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy - // [180] phi (dword) mul16u::mb#0 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b - sta.z mul16u.mb - lda.z mul16u.b+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [180] phi (word) mul16u::b#2 = (word) mul16u::b#0 [phi:mul16s->mul16u#1] -- register_copy jsr mul16u // mul16u((word)a, (word) b) // [166] (dword) mul16u::return#2 ← (dword) mul16u::res#2 @@ -12526,48 +12458,57 @@ mul16s: { } // mul16u // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zp($17) a, word zp($1a) b) +// mul16u(word zp($1c) a, word zp($1a) b) mul16u: { .label mb = $a - .label a = $17 + .label a = $1c .label res = 6 .label b = $1a .label return = 6 - .label b_1 = $1e - // [181] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] - // [181] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy - // [181] phi (dword) mul16u::res#2 = (byte) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 + // mb = b + // [181] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 + lda.z b + sta.z mb + lda.z b+1 + sta.z mb+1 lda #0 + sta.z mb+2 + sta.z mb+3 + // [182] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] + // [182] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy + // [182] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 + lda #<0>>$10 sta.z res+2 + lda #>0>>$10 sta.z res+3 - // [181] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy + // [182] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 __b1: // while(a!=0) - // [182] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 + // [183] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 // mul16u::@return // } - // [183] return + // [184] return rts // mul16u::@2 __b2: // a&1 - // [184] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 + // [185] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // if( (a&1) != 0) - // [185] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 + // [186] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul16u::@4 // res = res + mb - // [186] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 + // [187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb @@ -12581,24 +12522,24 @@ mul16u: { lda.z res+3 adc.z mb+3 sta.z res+3 - // [187] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] - // [187] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy + // [188] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] + // [188] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy // mul16u::@3 __b3: // a = a>>1 - // [188] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 + // [189] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // mb = mb<<1 - // [189] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 + // [190] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 - // [181] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] - // [181] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy - // [181] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy - // [181] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy + // [182] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] + // [182] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy + // [182] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy + // [182] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // muls16s @@ -12607,63 +12548,68 @@ mul16u: { // muls16s(signed word zp($e) a, signed word zp($10) b) muls16s: { .label m = 2 - .label j = $1c + .label j = $18 .label return = 2 - .label i = $1e + .label i = $1a .label a = $e .label b = $10 // if(a<0) - // [190] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 -- vwsz1_lt_0_then_la1 + // [191] if((signed word) muls16s::a#0<(signed byte) 0) goto muls16s::@5 -- vwsz1_lt_0_then_la1 lda.z a+1 bmi b3 // muls16s::@2 // if (a>0) - // [191] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 -- vwsz1_le_0_then_la1 + // [192] if((signed word) muls16s::a#0<=(signed byte) 0) goto muls16s::@1 -- vwsz1_le_0_then_la1 bmi b2 bne !+ lda.z a beq b2 !: - // [192] phi from muls16s::@2 to muls16s::@3 [phi:muls16s::@2->muls16s::@3] - // [192] phi (signed dword) muls16s::m#3 = (signed byte) 0 [phi:muls16s::@2->muls16s::@3#0] -- vdsz1=vbsc1 - lda #0 + // [193] phi from muls16s::@2 to muls16s::@3 [phi:muls16s::@2->muls16s::@3] + // [193] phi (signed dword) muls16s::m#3 = (signed dword) 0 [phi:muls16s::@2->muls16s::@3#0] -- vdsz1=vdsc1 + lda #<0 sta.z m sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [192] phi (signed word) muls16s::j#2 = (signed byte) 0 [phi:muls16s::@2->muls16s::@3#1] -- vwsz1=vbsc1 + // [193] phi (signed word) muls16s::j#2 = (signed word) 0 [phi:muls16s::@2->muls16s::@3#1] -- vwsz1=vwsc1 + lda #<0 sta.z j sta.z j+1 // muls16s::@3 __b3: // for(signed word j = 0; j!=a; j++) - // [193] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 -- vwsz1_neq_vwsz2_then_la1 + // [194] if((signed word) muls16s::j#2!=(signed word) muls16s::a#0) goto muls16s::@4 -- vwsz1_neq_vwsz2_then_la1 lda.z j+1 cmp.z a+1 bne __b4 lda.z j cmp.z a bne __b4 - // [194] phi from muls16s::@3 muls16s::@5 to muls16s::@1 [phi:muls16s::@3/muls16s::@5->muls16s::@1] - // [194] phi (signed dword) muls16s::return#0 = (signed dword) muls16s::m#3 [phi:muls16s::@3/muls16s::@5->muls16s::@1#0] -- register_copy + // [195] phi from muls16s::@3 muls16s::@5 to muls16s::@1 [phi:muls16s::@3/muls16s::@5->muls16s::@1] + // [195] phi (signed dword) muls16s::return#0 = (signed dword) muls16s::m#3 [phi:muls16s::@3/muls16s::@5->muls16s::@1#0] -- register_copy rts - // [194] phi from muls16s::@2 to muls16s::@1 [phi:muls16s::@2->muls16s::@1] + // [195] phi from muls16s::@2 to muls16s::@1 [phi:muls16s::@2->muls16s::@1] b2: - // [194] phi (signed dword) muls16s::return#0 = (signed byte) 0 [phi:muls16s::@2->muls16s::@1#0] -- vdsz1=vbsc1 - lda #0 + // [195] phi (signed dword) muls16s::return#0 = (signed dword) 0 [phi:muls16s::@2->muls16s::@1#0] -- vdsz1=vdsc1 + lda #<0 sta.z return sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 // muls16s::@1 // muls16s::@return // } - // [195] return + // [196] return rts // muls16s::@4 __b4: // m = m + b - // [196] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 -- vdsz1=vdsz1_plus_vwsz2 + // [197] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0 -- vdsz1=vdsz1_plus_vwsz2 lda.z b+1 ora #$7f bmi !+ @@ -12684,30 +12630,33 @@ muls16s: { adc.z $ff sta.z m+3 // for(signed word j = 0; j!=a; j++) - // [197] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 -- vwsz1=_inc_vwsz1 + // [198] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2 -- vwsz1=_inc_vwsz1 inc.z j bne !+ inc.z j+1 !: - // [192] phi from muls16s::@4 to muls16s::@3 [phi:muls16s::@4->muls16s::@3] - // [192] phi (signed dword) muls16s::m#3 = (signed dword) muls16s::m#1 [phi:muls16s::@4->muls16s::@3#0] -- register_copy - // [192] phi (signed word) muls16s::j#2 = (signed word) muls16s::j#1 [phi:muls16s::@4->muls16s::@3#1] -- register_copy + // [193] phi from muls16s::@4 to muls16s::@3 [phi:muls16s::@4->muls16s::@3] + // [193] phi (signed dword) muls16s::m#3 = (signed dword) muls16s::m#1 [phi:muls16s::@4->muls16s::@3#0] -- register_copy + // [193] phi (signed word) muls16s::j#2 = (signed word) muls16s::j#1 [phi:muls16s::@4->muls16s::@3#1] -- register_copy jmp __b3 - // [198] phi from muls16s to muls16s::@5 [phi:muls16s->muls16s::@5] + // [199] phi from muls16s to muls16s::@5 [phi:muls16s->muls16s::@5] b3: - // [198] phi (signed dword) muls16s::m#5 = (signed byte) 0 [phi:muls16s->muls16s::@5#0] -- vdsz1=vbsc1 - lda #0 + // [199] phi (signed dword) muls16s::m#5 = (signed dword) 0 [phi:muls16s->muls16s::@5#0] -- vdsz1=vdsc1 + lda #<0 sta.z m sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [198] phi (signed word) muls16s::i#2 = (signed byte) 0 [phi:muls16s->muls16s::@5#1] -- vwsz1=vbsc1 + // [199] phi (signed word) muls16s::i#2 = (signed word) 0 [phi:muls16s->muls16s::@5#1] -- vwsz1=vwsc1 + lda #<0 sta.z i sta.z i+1 // muls16s::@5 __b5: // for(signed word i = 0; i!=a; i--) - // [199] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 -- vwsz1_neq_vwsz2_then_la1 + // [200] if((signed word) muls16s::i#2!=(signed word) muls16s::a#0) goto muls16s::@6 -- vwsz1_neq_vwsz2_then_la1 lda.z i+1 cmp.z a+1 bne __b6 @@ -12718,7 +12667,7 @@ muls16s: { // muls16s::@6 __b6: // m = m - b - // [200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 -- vdsz1=vdsz1_minus_vwsz2 + // [201] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0 -- vdsz1=vdsz1_minus_vwsz2 lda.z b+1 ora #$7f bmi !+ @@ -12739,50 +12688,50 @@ muls16s: { sbc.z $ff sta.z m+3 // for(signed word i = 0; i!=a; i--) - // [201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 -- vwsz1=_dec_vwsz1 + // [202] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2 -- vwsz1=_dec_vwsz1 lda.z i bne !+ dec.z i+1 !: dec.z i - // [198] phi from muls16s::@6 to muls16s::@5 [phi:muls16s::@6->muls16s::@5] - // [198] phi (signed dword) muls16s::m#5 = (signed dword) muls16s::m#2 [phi:muls16s::@6->muls16s::@5#0] -- register_copy - // [198] phi (signed word) muls16s::i#2 = (signed word) muls16s::i#1 [phi:muls16s::@6->muls16s::@5#1] -- register_copy + // [199] phi from muls16s::@6 to muls16s::@5 [phi:muls16s::@6->muls16s::@5] + // [199] phi (signed dword) muls16s::m#5 = (signed dword) muls16s::m#2 [phi:muls16s::@6->muls16s::@5#0] -- register_copy + // [199] phi (signed word) muls16s::i#2 = (signed word) muls16s::i#1 [phi:muls16s::@6->muls16s::@5#1] -- register_copy jmp __b5 } // mul16u_compare // Perform many possible word multiplications (slow and fast) and compare the results mul16u_compare: { - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a .label ms = 2 .label mn = 6 .label mf = $a .label i = $12 - // [203] phi from mul16u_compare to mul16u_compare::@1 [phi:mul16u_compare->mul16u_compare::@1] - // [203] phi (byte) mul16u_compare::i#12 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#0] -- vbuz1=vbuc1 + // [204] phi from mul16u_compare to mul16u_compare::@1 [phi:mul16u_compare->mul16u_compare::@1] + // [204] phi (byte) mul16u_compare::i#12 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [203] phi (word) mul16u_compare::b#6 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#1] -- vwuz1=vbuc1 + // [204] phi (word) mul16u_compare::b#6 = (word) 0 [phi:mul16u_compare->mul16u_compare::@1#1] -- vwuz1=vwuc1 sta.z b sta.z b+1 - // [203] phi (word) mul16u_compare::a#6 = (byte) 0 [phi:mul16u_compare->mul16u_compare::@1#2] -- vwuz1=vbuc1 + // [204] phi (word) mul16u_compare::a#6 = (word) 0 [phi:mul16u_compare->mul16u_compare::@1#2] -- vwuz1=vwuc1 sta.z a sta.z a+1 - // [203] phi (byte*) print_char_cursor#145 = (byte*) 1024 [phi:mul16u_compare->mul16u_compare::@1#3] -- pbuz1=pbuc1 + // [204] phi (byte*) print_char_cursor#145 = (byte*) 1024 [phi:mul16u_compare->mul16u_compare::@1#3] -- pbuz1=pbuc1 lda #<$400 sta.z print_char_cursor lda #>$400 sta.z print_char_cursor+1 - // [203] phi from mul16u_compare::@8 to mul16u_compare::@1 [phi:mul16u_compare::@8->mul16u_compare::@1] - // [203] phi (byte) mul16u_compare::i#12 = (byte) mul16u_compare::i#1 [phi:mul16u_compare::@8->mul16u_compare::@1#0] -- register_copy - // [203] phi (word) mul16u_compare::b#6 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@8->mul16u_compare::@1#1] -- register_copy - // [203] phi (word) mul16u_compare::a#6 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@8->mul16u_compare::@1#2] -- register_copy - // [203] phi (byte*) print_char_cursor#145 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@8->mul16u_compare::@1#3] -- register_copy + // [204] phi from mul16u_compare::@8 to mul16u_compare::@1 [phi:mul16u_compare::@8->mul16u_compare::@1] + // [204] phi (byte) mul16u_compare::i#12 = (byte) mul16u_compare::i#1 [phi:mul16u_compare::@8->mul16u_compare::@1#0] -- register_copy + // [204] phi (word) mul16u_compare::b#6 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@8->mul16u_compare::@1#1] -- register_copy + // [204] phi (word) mul16u_compare::a#6 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@8->mul16u_compare::@1#2] -- register_copy + // [204] phi (byte*) print_char_cursor#145 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@8->mul16u_compare::@1#3] -- register_copy // mul16u_compare::@1 __b1: // print_str(".") - // [204] call print_str + // [205] call print_str // [64] phi from mul16u_compare::@1 to print_str [phi:mul16u_compare::@1->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#145 [phi:mul16u_compare::@1->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) str [phi:mul16u_compare::@1->print_str#1] -- pbuz1=pbuc1 @@ -12791,19 +12740,19 @@ mul16u_compare: { lda #>str sta.z print_str.str+1 jsr print_str - // [205] phi from mul16u_compare::@1 to mul16u_compare::@2 [phi:mul16u_compare::@1->mul16u_compare::@2] - // [205] phi (byte) mul16u_compare::j#10 = (byte) 0 [phi:mul16u_compare::@1->mul16u_compare::@2#0] -- vbuyy=vbuc1 + // [206] phi from mul16u_compare::@1 to mul16u_compare::@2 [phi:mul16u_compare::@1->mul16u_compare::@2] + // [206] phi (byte) mul16u_compare::j#10 = (byte) 0 [phi:mul16u_compare::@1->mul16u_compare::@2#0] -- vbuyy=vbuc1 ldy #0 - // [205] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#6 [phi:mul16u_compare::@1->mul16u_compare::@2#1] -- register_copy - // [205] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#6 [phi:mul16u_compare::@1->mul16u_compare::@2#2] -- register_copy - // [205] phi from mul16u_compare::@5 to mul16u_compare::@2 [phi:mul16u_compare::@5->mul16u_compare::@2] - // [205] phi (byte) mul16u_compare::j#10 = (byte) mul16u_compare::j#1 [phi:mul16u_compare::@5->mul16u_compare::@2#0] -- register_copy - // [205] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@5->mul16u_compare::@2#1] -- register_copy - // [205] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@5->mul16u_compare::@2#2] -- register_copy + // [206] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#6 [phi:mul16u_compare::@1->mul16u_compare::@2#1] -- register_copy + // [206] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#6 [phi:mul16u_compare::@1->mul16u_compare::@2#2] -- register_copy + // [206] phi from mul16u_compare::@5 to mul16u_compare::@2 [phi:mul16u_compare::@5->mul16u_compare::@2] + // [206] phi (byte) mul16u_compare::j#10 = (byte) mul16u_compare::j#1 [phi:mul16u_compare::@5->mul16u_compare::@2#0] -- register_copy + // [206] phi (word) mul16u_compare::b#2 = (word) mul16u_compare::b#1 [phi:mul16u_compare::@5->mul16u_compare::@2#1] -- register_copy + // [206] phi (word) mul16u_compare::a#2 = (word) mul16u_compare::a#1 [phi:mul16u_compare::@5->mul16u_compare::@2#2] -- register_copy // mul16u_compare::@2 __b2: // a=a+3371 - // [206] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b -- vwuz1=vwuz1_plus_vwuc1 + // [207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word) $d2b -- vwuz1=vwuz1_plus_vwuc1 clc lda.z a adc #<$d2b @@ -12812,7 +12761,7 @@ mul16u_compare: { adc #>$d2b sta.z a+1 // b=b+4093 - // [207] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd -- vwuz1=vwuz1_plus_vwuc1 + // [208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word) $ffd -- vwuz1=vwuz1_plus_vwuc1 clc lda.z b adc #<$ffd @@ -12821,53 +12770,46 @@ mul16u_compare: { adc #>$ffd sta.z b+1 // muls16u(a, b) - // [208] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 - // [209] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 - // [210] call muls16u + // [209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1 + // [210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1 + // [211] call muls16u jsr muls16u - // [211] (dword) muls16u::return#2 ← (dword) muls16u::return#0 + // [212] (dword) muls16u::return#2 ← (dword) muls16u::return#0 // mul16u_compare::@10 // ms = muls16u(a, b) - // [212] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 + // [213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2 // mul16u(a,b) - // [213] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mul16u.a lda.z a+1 sta.z mul16u.a+1 - // [214] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 - // [215] call mul16u + // [215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1 + // [216] call mul16u // [180] phi from mul16u_compare::@10 to mul16u [phi:mul16u_compare::@10->mul16u] // [180] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mul16u_compare::@10->mul16u#0] -- register_copy - // [180] phi (dword) mul16u::mb#0 = (word) mul16u::b#1 [phi:mul16u_compare::@10->mul16u#1] -- vduz1=vwuz2 - lda.z mul16u.b_1 - sta.z mul16u.mb - lda.z mul16u.b_1+1 - sta.z mul16u.mb+1 - lda #0 - sta.z mul16u.mb+2 - sta.z mul16u.mb+3 + // [180] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mul16u_compare::@10->mul16u#1] -- register_copy jsr mul16u // mul16u(a,b) - // [216] (dword) mul16u::return#3 ← (dword) mul16u::res#2 + // [217] (dword) mul16u::return#3 ← (dword) mul16u::res#2 // mul16u_compare::@11 // mn = mul16u(a,b) - // [217] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 + // [218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3 // mulf16u(a,b) - // [218] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 - // [219] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 - // [220] call mulf16u + // [219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1 + // [220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1 + // [221] call mulf16u // [157] phi from mul16u_compare::@11 to mulf16u [phi:mul16u_compare::@11->mulf16u] // [157] phi (word) mulf16u::b#2 = (word) mulf16u::b#1 [phi:mul16u_compare::@11->mulf16u#0] -- register_copy // [157] phi (word) mulf16u::a#2 = (word) mulf16u::a#1 [phi:mul16u_compare::@11->mulf16u#1] -- register_copy jsr mulf16u // mulf16u(a,b) - // [221] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 + // [222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0 // mul16u_compare::@12 // mf = mulf16u(a,b) - // [222] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 + // [223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3 // if(ms!=mf) - // [223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 -- vduz1_eq_vduz2_then_la1 + // [224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3 -- vduz1_eq_vduz2_then_la1 lda.z ms cmp.z mf bne !+ @@ -12881,20 +12823,20 @@ mul16u_compare: { cmp.z mf+3 beq b1 !: - // [224] phi from mul16u_compare::@12 to mul16u_compare::@6 [phi:mul16u_compare::@12->mul16u_compare::@6] + // [225] phi from mul16u_compare::@12 to mul16u_compare::@6 [phi:mul16u_compare::@12->mul16u_compare::@6] // mul16u_compare::@6 - // [225] phi from mul16u_compare::@6 to mul16u_compare::@3 [phi:mul16u_compare::@6->mul16u_compare::@3] - // [225] phi (byte) mul16u_compare::ok#4 = (byte) 0 [phi:mul16u_compare::@6->mul16u_compare::@3#0] -- vbuxx=vbuc1 + // [226] phi from mul16u_compare::@6 to mul16u_compare::@3 [phi:mul16u_compare::@6->mul16u_compare::@3] + // [226] phi (byte) mul16u_compare::ok#4 = (byte) 0 [phi:mul16u_compare::@6->mul16u_compare::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [225] phi from mul16u_compare::@12 to mul16u_compare::@3 [phi:mul16u_compare::@12->mul16u_compare::@3] + // [226] phi from mul16u_compare::@12 to mul16u_compare::@3 [phi:mul16u_compare::@12->mul16u_compare::@3] b1: - // [225] phi (byte) mul16u_compare::ok#4 = (byte) 1 [phi:mul16u_compare::@12->mul16u_compare::@3#0] -- vbuxx=vbuc1 + // [226] phi (byte) mul16u_compare::ok#4 = (byte) 1 [phi:mul16u_compare::@12->mul16u_compare::@3#0] -- vbuxx=vbuc1 ldx #1 // mul16u_compare::@3 __b3: // if(ms!=mn) - // [226] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 -- vduz1_eq_vduz2_then_la1 + // [227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@15 -- vduz1_eq_vduz2_then_la1 lda.z ms cmp.z mn bne !+ @@ -12908,65 +12850,63 @@ mul16u_compare: { cmp.z mn+3 beq __b4 !: - // [228] phi from mul16u_compare::@3 to mul16u_compare::@4 [phi:mul16u_compare::@3->mul16u_compare::@4] - // [228] phi (byte) mul16u_compare::ok#3 = (byte) 0 [phi:mul16u_compare::@3->mul16u_compare::@4#0] -- vbuxx=vbuc1 + // [229] phi from mul16u_compare::@3 to mul16u_compare::@4 [phi:mul16u_compare::@3->mul16u_compare::@4] + // [229] phi (byte) mul16u_compare::ok#3 = (byte) 0 [phi:mul16u_compare::@3->mul16u_compare::@4#0] -- vbuxx=vbuc1 ldx #0 - // [227] phi from mul16u_compare::@3 to mul16u_compare::@15 [phi:mul16u_compare::@3->mul16u_compare::@15] + // [228] phi from mul16u_compare::@3 to mul16u_compare::@15 [phi:mul16u_compare::@3->mul16u_compare::@15] // mul16u_compare::@15 - // [228] phi from mul16u_compare::@15 to mul16u_compare::@4 [phi:mul16u_compare::@15->mul16u_compare::@4] - // [228] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@15->mul16u_compare::@4#0] -- register_copy + // [229] phi from mul16u_compare::@15 to mul16u_compare::@4 [phi:mul16u_compare::@15->mul16u_compare::@4] + // [229] phi (byte) mul16u_compare::ok#3 = (byte) mul16u_compare::ok#4 [phi:mul16u_compare::@15->mul16u_compare::@4#0] -- register_copy // mul16u_compare::@4 __b4: // if(ok==0) - // [229] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 -- vbuxx_neq_0_then_la1 + // [230] if((byte) mul16u_compare::ok#3!=(byte) 0) goto mul16u_compare::@5 -- vbuxx_neq_0_then_la1 cpx #0 bne __b5 // mul16u_compare::@7 // *BGCOL = 2 - // [230] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [231] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL // mul16u_error(a,b, ms, mn, mf) - // [231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 + // [232] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1 -- vwuz1=vwuz2 lda.z a sta.z mul16u_error.a lda.z a+1 sta.z mul16u_error.a+1 - // [232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 - // [233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 - // [234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 - // [235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 - // [236] call mul16u_error - // [248] phi from mul16u_compare::@7 to mul16u_error [phi:mul16u_compare::@7->mul16u_error] + // [233] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1 + // [234] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0 + // [235] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0 + // [236] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0 + // [237] call mul16u_error + // [249] phi from mul16u_compare::@7 to mul16u_error [phi:mul16u_compare::@7->mul16u_error] jsr mul16u_error // mul16u_compare::@return // } - // [237] return + // [238] return rts // mul16u_compare::@5 __b5: // for(byte j: 0..15) - // [238] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 -- vbuyy=_inc_vbuyy + // [239] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10 -- vbuyy=_inc_vbuyy iny - // [239] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 -- vbuyy_neq_vbuc1_then_la1 + // [240] if((byte) mul16u_compare::j#1!=(byte) $10) goto mul16u_compare::@2 -- vbuyy_neq_vbuc1_then_la1 cpy #$10 - beq !__b2+ - jmp __b2 - !__b2: + bne __b2 // mul16u_compare::@8 // for(byte i: 0..15) - // [240] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 -- vbuz1=_inc_vbuz1 + // [241] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12 -- vbuz1=_inc_vbuz1 inc.z i - // [241] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 -- vbuz1_neq_vbuc1_then_la1 + // [242] if((byte) mul16u_compare::i#1!=(byte) $10) goto mul16u_compare::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i beq !__b1+ jmp __b1 !__b1: - // [242] phi from mul16u_compare::@8 to mul16u_compare::@9 [phi:mul16u_compare::@8->mul16u_compare::@9] + // [243] phi from mul16u_compare::@8 to mul16u_compare::@9 [phi:mul16u_compare::@8->mul16u_compare::@9] // mul16u_compare::@9 // print_ln() - // [243] call print_ln + // [244] call print_ln // [59] phi from mul16u_compare::@9 to print_ln [phi:mul16u_compare::@9->print_ln] // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@9->print_ln#0] -- register_copy // [59] phi (byte*) print_line_cursor#43 = (byte*) 1024 [phi:mul16u_compare::@9->print_ln#1] -- pbuz1=pbuc1 @@ -12976,13 +12916,13 @@ mul16u_compare: { sta.z print_line_cursor+1 jsr print_ln // mul16u_compare::@13 - // [244] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [245] (byte*) print_char_cursor#187 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 // print_str("word multiply results match!") - // [245] call print_str + // [246] call print_str // [64] phi from mul16u_compare::@13 to print_str [phi:mul16u_compare::@13->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#187 [phi:mul16u_compare::@13->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) mul16u_compare::str1 [phi:mul16u_compare::@13->print_str#1] -- pbuz1=pbuc1 @@ -12991,10 +12931,10 @@ mul16u_compare: { lda #>str1 sta.z print_str.str+1 jsr print_str - // [246] phi from mul16u_compare::@13 to mul16u_compare::@14 [phi:mul16u_compare::@13->mul16u_compare::@14] + // [247] phi from mul16u_compare::@13 to mul16u_compare::@14 [phi:mul16u_compare::@13->mul16u_compare::@14] // mul16u_compare::@14 // print_ln() - // [247] call print_ln + // [248] call print_ln // [59] phi from mul16u_compare::@14 to print_ln [phi:mul16u_compare::@14->print_ln] // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#132 [phi:mul16u_compare::@14->print_ln#0] -- register_copy // [59] phi (byte*) print_line_cursor#43 = (byte*) print_line_cursor#1 [phi:mul16u_compare::@14->print_ln#1] -- register_copy @@ -13004,15 +12944,15 @@ mul16u_compare: { .byte 0 } // mul16u_error -// mul16u_error(word zp($e) a, word zp($1e) b, dword zp(2) ms, dword zp(6) mn, dword zp($a) mf) +// mul16u_error(word zp($e) a, word zp($1a) b, dword zp(2) ms, dword zp(6) mn, dword zp($a) mf) mul16u_error: { .label a = $e - .label b = $1e + .label b = $1a .label ms = 2 .label mn = 6 .label mf = $a // print_str("multiply mismatch ") - // [249] call print_str + // [250] call print_str // [64] phi from mul16u_error to print_str [phi:mul16u_error->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#132 [phi:mul16u_error->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) mul16u_error::str [phi:mul16u_error->print_str#1] -- pbuz1=pbuc1 @@ -13023,16 +12963,16 @@ mul16u_error: { jsr print_str // mul16u_error::@1 // print_word(a) - // [250] (word) print_word::w#3 ← (word) mul16u_error::a#0 - // [251] call print_word + // [251] (word) print_word::w#3 ← (word) mul16u_error::a#0 + // [252] call print_word // [115] phi from mul16u_error::@1 to print_word [phi:mul16u_error::@1->print_word] // [115] phi (byte*) print_char_cursor#137 = (byte*) print_char_cursor#132 [phi:mul16u_error::@1->print_word#0] -- register_copy // [115] phi (word) print_word::w#5 = (word) print_word::w#3 [phi:mul16u_error::@1->print_word#1] -- register_copy jsr print_word - // [252] phi from mul16u_error::@1 to mul16u_error::@2 [phi:mul16u_error::@1->mul16u_error::@2] + // [253] phi from mul16u_error::@1 to mul16u_error::@2 [phi:mul16u_error::@1->mul16u_error::@2] // mul16u_error::@2 // print_str("*") - // [253] call print_str + // [254] call print_str // [64] phi from mul16u_error::@2 to print_str [phi:mul16u_error::@2->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@2->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) str1 [phi:mul16u_error::@2->print_str#1] -- pbuz1=pbuc1 @@ -13043,20 +12983,20 @@ mul16u_error: { jsr print_str // mul16u_error::@3 // print_word(b) - // [254] (word) print_word::w#4 ← (word) mul16u_error::b#0 -- vwuz1=vwuz2 + // [255] (word) print_word::w#4 ← (word) mul16u_error::b#0 -- vwuz1=vwuz2 lda.z b sta.z print_word.w lda.z b+1 sta.z print_word.w+1 - // [255] call print_word + // [256] call print_word // [115] phi from mul16u_error::@3 to print_word [phi:mul16u_error::@3->print_word] // [115] phi (byte*) print_char_cursor#137 = (byte*) print_char_cursor#132 [phi:mul16u_error::@3->print_word#0] -- register_copy // [115] phi (word) print_word::w#5 = (word) print_word::w#4 [phi:mul16u_error::@3->print_word#1] -- register_copy jsr print_word - // [256] phi from mul16u_error::@3 to mul16u_error::@4 [phi:mul16u_error::@3->mul16u_error::@4] + // [257] phi from mul16u_error::@3 to mul16u_error::@4 [phi:mul16u_error::@3->mul16u_error::@4] // mul16u_error::@4 // print_str(" slow:") - // [257] call print_str + // [258] call print_str // [64] phi from mul16u_error::@4 to print_str [phi:mul16u_error::@4->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@4->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) str2 [phi:mul16u_error::@4->print_str#1] -- pbuz1=pbuc1 @@ -13067,16 +13007,16 @@ mul16u_error: { jsr print_str // mul16u_error::@5 // print_dword(ms) - // [258] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 - // [259] call print_dword + // [259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0 + // [260] call print_dword // [109] phi from mul16u_error::@5 to print_dword [phi:mul16u_error::@5->print_dword] // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@5->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#1 [phi:mul16u_error::@5->print_dword#1] -- register_copy jsr print_dword - // [260] phi from mul16u_error::@5 to mul16u_error::@6 [phi:mul16u_error::@5->mul16u_error::@6] + // [261] phi from mul16u_error::@5 to mul16u_error::@6 [phi:mul16u_error::@5->mul16u_error::@6] // mul16u_error::@6 // print_str(" / normal:") - // [261] call print_str + // [262] call print_str // [64] phi from mul16u_error::@6 to print_str [phi:mul16u_error::@6->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@6->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) str3 [phi:mul16u_error::@6->print_str#1] -- pbuz1=pbuc1 @@ -13087,7 +13027,7 @@ mul16u_error: { jsr print_str // mul16u_error::@7 // print_dword(mn) - // [262] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 -- vduz1=vduz2 + // [263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0 -- vduz1=vduz2 lda.z mn sta.z print_dword.dw lda.z mn+1 @@ -13096,15 +13036,15 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z mn+3 sta.z print_dword.dw+3 - // [263] call print_dword + // [264] call print_dword // [109] phi from mul16u_error::@7 to print_dword [phi:mul16u_error::@7->print_dword] // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@7->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#2 [phi:mul16u_error::@7->print_dword#1] -- register_copy jsr print_dword - // [264] phi from mul16u_error::@7 to mul16u_error::@8 [phi:mul16u_error::@7->mul16u_error::@8] + // [265] phi from mul16u_error::@7 to mul16u_error::@8 [phi:mul16u_error::@7->mul16u_error::@8] // mul16u_error::@8 // print_str(" / fast:") - // [265] call print_str + // [266] call print_str // [64] phi from mul16u_error::@8 to print_str [phi:mul16u_error::@8->print_str] // [64] phi (byte*) print_char_cursor#154 = (byte*) print_char_cursor#22 [phi:mul16u_error::@8->print_str#0] -- register_copy // [64] phi (byte*) print_str::str#17 = (const string) str4 [phi:mul16u_error::@8->print_str#1] -- pbuz1=pbuc1 @@ -13115,7 +13055,7 @@ mul16u_error: { jsr print_str // mul16u_error::@9 // print_dword(mf) - // [266] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 -- vduz1=vduz2 + // [267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0 -- vduz1=vduz2 lda.z mf sta.z print_dword.dw lda.z mf+1 @@ -13124,15 +13064,15 @@ mul16u_error: { sta.z print_dword.dw+2 lda.z mf+3 sta.z print_dword.dw+3 - // [267] call print_dword + // [268] call print_dword // [109] phi from mul16u_error::@9 to print_dword [phi:mul16u_error::@9->print_dword] // [109] phi (byte*) print_char_cursor#138 = (byte*) print_char_cursor#132 [phi:mul16u_error::@9->print_dword#0] -- register_copy // [109] phi (dword) print_dword::dw#4 = (dword) print_dword::dw#3 [phi:mul16u_error::@9->print_dword#1] -- register_copy jsr print_dword - // [268] phi from mul16u_error::@9 to mul16u_error::@10 [phi:mul16u_error::@9->mul16u_error::@10] + // [269] phi from mul16u_error::@9 to mul16u_error::@10 [phi:mul16u_error::@9->mul16u_error::@10] // mul16u_error::@10 // print_ln() - // [269] call print_ln + // [270] call print_ln // [59] phi from mul16u_error::@10 to print_ln [phi:mul16u_error::@10->print_ln] // [59] phi (byte*) print_char_cursor#133 = (byte*) print_char_cursor#22 [phi:mul16u_error::@10->print_ln#0] -- register_copy // [59] phi (byte*) print_line_cursor#43 = (byte*) 1024 [phi:mul16u_error::@10->print_ln#1] -- pbuz1=pbuc1 @@ -13143,7 +13083,7 @@ mul16u_error: { jsr print_ln // mul16u_error::@return // } - // [270] return + // [271] return rts str: .text "multiply mismatch " .byte 0 @@ -13151,60 +13091,65 @@ mul16u_error: { // muls16u // Slow multiplication of unsigned words // Calculate an unsigned multiplication by repeated addition -// muls16u(word zp($1c) a, word zp($1e) b) +// muls16u(word zp($18) a, word zp($1a) b) muls16u: { .label return = 2 .label m = 2 .label i = $e - .label a = $1c - .label b = $1e + .label a = $18 + .label b = $1a // if(a!=0) - // [271] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 -- vwuz1_eq_0_then_la1 + // [272] if((word) muls16u::a#0==(byte) 0) goto muls16u::@1 -- vwuz1_eq_0_then_la1 lda.z a bne !+ lda.z a+1 beq b1 !: - // [272] phi from muls16u to muls16u::@2 [phi:muls16u->muls16u::@2] - // [272] phi (dword) muls16u::m#3 = (byte) 0 [phi:muls16u->muls16u::@2#0] -- vduz1=vbuc1 - lda #0 + // [273] phi from muls16u to muls16u::@2 [phi:muls16u->muls16u::@2] + // [273] phi (dword) muls16u::m#3 = (dword) 0 [phi:muls16u->muls16u::@2#0] -- vduz1=vduc1 + lda #<0 sta.z m sta.z m+1 + lda #<0>>$10 sta.z m+2 + lda #>0>>$10 sta.z m+3 - // [272] phi (word) muls16u::i#2 = (byte) 0 [phi:muls16u->muls16u::@2#1] -- vwuz1=vbuc1 + // [273] phi (word) muls16u::i#2 = (word) 0 [phi:muls16u->muls16u::@2#1] -- vwuz1=vwuc1 + lda #<0 sta.z i sta.z i+1 // muls16u::@2 __b2: // for(word i = 0; i!=a; i++) - // [273] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 -- vwuz1_neq_vwuz2_then_la1 + // [274] if((word) muls16u::i#2!=(word) muls16u::a#0) goto muls16u::@3 -- vwuz1_neq_vwuz2_then_la1 lda.z i+1 cmp.z a+1 bne __b3 lda.z i cmp.z a bne __b3 - // [274] phi from muls16u::@2 to muls16u::@1 [phi:muls16u::@2->muls16u::@1] - // [274] phi (dword) muls16u::return#0 = (dword) muls16u::m#3 [phi:muls16u::@2->muls16u::@1#0] -- register_copy + // [275] phi from muls16u::@2 to muls16u::@1 [phi:muls16u::@2->muls16u::@1] + // [275] phi (dword) muls16u::return#0 = (dword) muls16u::m#3 [phi:muls16u::@2->muls16u::@1#0] -- register_copy rts - // [274] phi from muls16u to muls16u::@1 [phi:muls16u->muls16u::@1] + // [275] phi from muls16u to muls16u::@1 [phi:muls16u->muls16u::@1] b1: - // [274] phi (dword) muls16u::return#0 = (byte) 0 [phi:muls16u->muls16u::@1#0] -- vduz1=vbuc1 - lda #0 + // [275] phi (dword) muls16u::return#0 = (dword) 0 [phi:muls16u->muls16u::@1#0] -- vduz1=vduc1 + lda #<0 sta.z return sta.z return+1 + lda #<0>>$10 sta.z return+2 + lda #>0>>$10 sta.z return+3 // muls16u::@1 // muls16u::@return // } - // [275] return + // [276] return rts // muls16u::@3 __b3: // m = m + b - // [276] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 -- vduz1=vduz1_plus_vwuz2 + // [277] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0 -- vduz1=vduz1_plus_vwuz2 lda.z m clc adc.z b @@ -13219,14 +13164,14 @@ muls16u: { adc #0 sta.z m+3 // for(word i = 0; i!=a; i++) - // [277] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 -- vwuz1=_inc_vwuz1 + // [278] (word) muls16u::i#1 ← ++ (word) muls16u::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [272] phi from muls16u::@3 to muls16u::@2 [phi:muls16u::@3->muls16u::@2] - // [272] phi (dword) muls16u::m#3 = (dword) muls16u::m#1 [phi:muls16u::@3->muls16u::@2#0] -- register_copy - // [272] phi (word) muls16u::i#2 = (word) muls16u::i#1 [phi:muls16u::@3->muls16u::@2#1] -- register_copy + // [273] phi from muls16u::@3 to muls16u::@2 [phi:muls16u::@3->muls16u::@2] + // [273] phi (dword) muls16u::m#3 = (dword) muls16u::m#1 [phi:muls16u::@3->muls16u::@2#0] -- register_copy + // [273] phi (word) muls16u::i#2 = (word) muls16u::i#1 [phi:muls16u::@3->muls16u::@2#1] -- register_copy jmp __b2 } // mulf_init @@ -13237,28 +13182,28 @@ mulf_init: { // Counter used for determining x%2==0 .label sqr1_hi = $13 // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $1a + .label sqr = $18 .label sqr1_lo = $10 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = $17 + .label sqr2_hi = $1c .label sqr2_lo = $15 //Start with g(0)=f(255) - .label dir = $19 - // [279] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] - // [279] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + .label dir = $17 + // [280] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [280] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [279] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [280] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [279] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [280] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 - // [279] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [280] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 sta.z c - // [279] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [280] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -13266,25 +13211,25 @@ mulf_init: { // mulf_init::@1 __b1: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [280] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [281] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] - // [281] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [282] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] + // [282] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [281] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [282] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [281] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [282] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [281] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [282] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -13292,7 +13237,7 @@ mulf_init: { // mulf_init::@5 __b5: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [282] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [283] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -13301,116 +13246,116 @@ mulf_init: { bne __b6 // mulf_init::@7 // *(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256) - // [283] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [284] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff // *(mulf_sqr2_hi+511) = *(mulf_sqr1_hi+256) - // [284] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [285] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff // mulf_init::@return // } - // [285] return + // [286] return rts // mulf_init::@6 __b6: // *sqr2_lo = mulf_sqr1_lo[x_255] - // [286] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [287] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y // *sqr2_hi++ = mulf_sqr1_hi[x_255] - // [287] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [288] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x sta (sqr2_hi),y // *sqr2_hi++ = mulf_sqr1_hi[x_255]; - // [288] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [289] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: // x_255 = x_255 + dir - // [289] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [290] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax // if(x_255==0) - // [290] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [291] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b8 - // [292] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] - // [292] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [293] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [293] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir - // [291] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [292] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] // mulf_init::@9 - // [292] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] - // [292] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [293] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [293] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy // mulf_init::@8 __b8: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [293] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [294] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [281] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] - // [281] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [281] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [281] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [281] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [282] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [282] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [282] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [282] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [282] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: // if((++c&1)==0) - // [294] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [295] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c // ++c&1 - // [295] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [296] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c // if((++c&1)==0) - // [296] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [297] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3 // mulf_init::@4 // x_2++; - // [297] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [298] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx // sqr++; - // [298] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [299] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [299] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] - // [299] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [299] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [300] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [300] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [300] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy // mulf_init::@3 __b3: // sqr - // [302] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [303] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 // *sqr1_hi++ = >sqr - // [303] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + // [304] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa sta (sqr1_hi),y // *sqr1_hi++ = >sqr; - // [304] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [305] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: // sqr = sqr + x_2 - // [305] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [306] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -13419,29 +13364,29 @@ mulf_init: { inc.z sqr+1 !: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [306] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [307] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [279] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] - // [279] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [279] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [279] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [279] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [279] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [280] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [280] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [280] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [280] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [280] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [280] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [308] call memset - // [310] phi from print_cls to memset [phi:print_cls->memset] + // [309] call memset + // [311] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [309] return + // [310] return rts } // memset @@ -13451,9 +13396,9 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $1a - // [311] phi from memset to memset::@1 [phi:memset->memset::@1] - // [311] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + .label dst = $1c + // [312] phi from memset to memset::@1 [phi:memset->memset::@1] + // [312] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -13461,7 +13406,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [312] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [313] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -13470,23 +13415,23 @@ memset: { bne __b2 // memset::@return // } - // [313] return + // [314] return rts // memset::@2 __b2: // *dst = c - // [314] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [315] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [315] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [316] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [311] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [311] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [312] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [312] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data diff --git a/src/test/ref/test-multiply-16bit.sym b/src/test/ref/test-multiply-16bit.sym index c2482200c..299a125ba 100644 --- a/src/test/ref/test-multiply-16bit.sym +++ b/src/test/ref/test-multiply-16bit.sym @@ -18,8 +18,8 @@ (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst -(byte*) memset::dst#1 dst zp[2]:26 22.0 -(byte*) memset::dst#2 dst zp[2]:26 14.666666666666666 +(byte*) memset::dst#1 dst zp[2]:28 22.0 +(byte*) memset::dst#2 dst zp[2]:28 14.666666666666666 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num @@ -28,10 +28,10 @@ (void*) memset::str (const void*) memset::str#0 str = (void*)(byte*) 1024 (signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b) -(word~) mul16s::$13 zp[2]:30 4.0 -(word~) mul16s::$16 zp[2]:28 4.0 -(word~) mul16s::$17 zp[2]:30 4.0 -(word~) mul16s::$9 zp[2]:28 4.0 +(word~) mul16s::$13 zp[2]:28 4.0 +(word~) mul16s::$16 zp[2]:26 4.0 +(word~) mul16s::$17 zp[2]:28 4.0 +(word~) mul16s::$9 zp[2]:26 4.0 (label) mul16s::@1 (label) mul16s::@2 (label) mul16s::@3 @@ -123,16 +123,17 @@ (label) mul16u::@4 (label) mul16u::@return (word) mul16u::a -(word) mul16u::a#0 a zp[2]:23 1001.0 -(word) mul16u::a#1 a zp[2]:23 2.0 -(word) mul16u::a#2 a zp[2]:23 101.0 -(word) mul16u::a#3 a zp[2]:23 667.6666666666667 -(word) mul16u::a#6 a zp[2]:23 105.0 +(word) mul16u::a#0 a zp[2]:28 1001.0 +(word) mul16u::a#1 a zp[2]:28 2.0 +(word) mul16u::a#2 a zp[2]:28 101.0 +(word) mul16u::a#3 a zp[2]:28 667.6666666666667 +(word) mul16u::a#6 a zp[2]:28 52.5 (word) mul16u::b (word) mul16u::b#0 b zp[2]:26 4.0 -(word) mul16u::b#1 b_1 zp[2]:30 202.0 +(word) mul16u::b#1 b zp[2]:26 202.0 +(word) mul16u::b#2 b zp[2]:26 103.0 (dword) mul16u::mb -(dword) mul16u::mb#0 mb zp[4]:10 105.0 +(dword) mul16u::mb#0 mb zp[4]:10 4.0 (dword) mul16u::mb#1 mb zp[4]:10 2002.0 (dword) mul16u::mb#2 mb zp[4]:10 429.2857142857143 (dword) mul16u::res @@ -160,13 +161,13 @@ (label) mul16u_compare::@9 (label) mul16u_compare::@return (word) mul16u_compare::a -(word) mul16u_compare::a#1 a zp[2]:28 17.862068965517242 -(word) mul16u_compare::a#2 a zp[2]:28 213.0 -(word) mul16u_compare::a#6 a zp[2]:28 11.0 +(word) mul16u_compare::a#1 a zp[2]:24 17.862068965517242 +(word) mul16u_compare::a#2 a zp[2]:24 213.0 +(word) mul16u_compare::a#6 a zp[2]:24 11.0 (word) mul16u_compare::b -(word) mul16u_compare::b#1 b zp[2]:30 17.862068965517242 -(word) mul16u_compare::b#2 b zp[2]:30 106.5 -(word) mul16u_compare::b#6 b zp[2]:30 11.0 +(word) mul16u_compare::b#1 b zp[2]:26 17.862068965517242 +(word) mul16u_compare::b#2 b zp[2]:26 106.5 +(word) mul16u_compare::b#6 b zp[2]:26 11.0 (byte) mul16u_compare::i (byte) mul16u_compare::i#1 i zp[1]:18 16.5 (byte) mul16u_compare::i#12 i zp[1]:18 0.7586206896551724 @@ -198,7 +199,7 @@ (word) mul16u_error::a (word) mul16u_error::a#0 a zp[2]:14 0.5714285714285714 (word) mul16u_error::b -(word) mul16u_error::b#0 b zp[2]:30 0.4 +(word) mul16u_error::b#0 b zp[2]:26 0.4 (dword) mul16u_error::mf (dword) mul16u_error::mf#0 mf zp[4]:10 0.21052631578947367 (dword) mul16u_error::mn @@ -207,10 +208,10 @@ (dword) mul16u_error::ms#0 ms zp[4]:2 0.3076923076923077 (const string) mul16u_error::str[] = (string) "multiply mismatch " (signed dword()) mulf16s((signed word) mulf16s::a , (signed word) mulf16s::b) -(word~) mulf16s::$13 zp[2]:30 4.0 -(word~) mulf16s::$16 zp[2]:28 4.0 -(word~) mulf16s::$17 zp[2]:30 4.0 -(word~) mulf16s::$9 zp[2]:28 4.0 +(word~) mulf16s::$13 zp[2]:26 4.0 +(word~) mulf16s::$16 zp[2]:24 4.0 +(word~) mulf16s::$17 zp[2]:26 4.0 +(word~) mulf16s::$9 zp[2]:24 4.0 (label) mulf16s::@1 (label) mulf16s::@2 (label) mulf16s::@3 @@ -233,13 +234,13 @@ (dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b) (label) mulf16u::@return (word) mulf16u::a -(word) mulf16u::a#0 a zp[2]:28 2.0 -(word) mulf16u::a#1 a zp[2]:28 101.0 -(word) mulf16u::a#2 a zp[2]:28 105.0 +(word) mulf16u::a#0 a zp[2]:24 2.0 +(word) mulf16u::a#1 a zp[2]:24 101.0 +(word) mulf16u::a#2 a zp[2]:24 105.0 (word) mulf16u::b -(word) mulf16u::b#0 b zp[2]:30 4.0 -(word) mulf16u::b#1 b zp[2]:30 202.0 -(word) mulf16u::b#2 b zp[2]:30 52.5 +(word) mulf16u::b#0 b zp[2]:26 4.0 +(word) mulf16u::b#1 b zp[2]:26 202.0 +(word) mulf16u::b#2 b zp[2]:26 52.5 (const word*) mulf16u::memA = (word*) 248 (const word*) mulf16u::memB = (word*) 250 (const dword*) mulf16u::memR = (dword*) 252 @@ -265,13 +266,13 @@ (byte) mulf_init::c#1 c zp[1]:18 2.5384615384615383 (byte) mulf_init::c#2 c zp[1]:18 11.0 (byte) mulf_init::dir -(byte) mulf_init::dir#2 dir zp[1]:25 4.125 -(byte) mulf_init::dir#4 dir zp[1]:25 11.0 +(byte) mulf_init::dir#2 dir zp[1]:23 4.125 +(byte) mulf_init::dir#4 dir zp[1]:23 11.0 (word) mulf_init::sqr -(word) mulf_init::sqr#1 sqr zp[2]:26 11.0 -(word) mulf_init::sqr#2 sqr zp[2]:26 22.0 -(word) mulf_init::sqr#3 sqr zp[2]:26 9.166666666666666 -(word) mulf_init::sqr#4 sqr zp[2]:26 5.5 +(word) mulf_init::sqr#1 sqr zp[2]:24 11.0 +(word) mulf_init::sqr#2 sqr zp[2]:24 22.0 +(word) mulf_init::sqr#3 sqr zp[2]:24 9.166666666666666 +(word) mulf_init::sqr#4 sqr zp[2]:24 5.5 (byte*) mulf_init::sqr1_hi (byte*) mulf_init::sqr1_hi#1 sqr1_hi zp[2]:19 7.333333333333333 (byte*) mulf_init::sqr1_hi#2 sqr1_hi zp[2]:19 2.75 @@ -279,8 +280,8 @@ (byte*) mulf_init::sqr1_lo#1 sqr1_lo zp[2]:16 22.0 (byte*) mulf_init::sqr1_lo#2 sqr1_lo zp[2]:16 3.142857142857143 (byte*) mulf_init::sqr2_hi -(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:23 3.6666666666666665 -(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:23 8.25 +(byte*) mulf_init::sqr2_hi#1 sqr2_hi zp[2]:28 3.6666666666666665 +(byte*) mulf_init::sqr2_hi#2 sqr2_hi zp[2]:28 8.25 (byte*) mulf_init::sqr2_lo (byte*) mulf_init::sqr2_lo#1 sqr2_lo zp[2]:21 22.0 (byte*) mulf_init::sqr2_lo#2 sqr2_lo zp[2]:21 4.888888888888889 @@ -308,11 +309,11 @@ (signed word) muls16s::b (signed word) muls16s::b#0 b zp[2]:16 191.1818181818182 (signed word) muls16s::i -(signed word) muls16s::i#1 i zp[2]:30 2002.0 -(signed word) muls16s::i#2 i zp[2]:30 1001.0 +(signed word) muls16s::i#1 i zp[2]:26 2002.0 +(signed word) muls16s::i#2 i zp[2]:26 1001.0 (signed word) muls16s::j -(signed word) muls16s::j#1 j zp[2]:28 2002.0 -(signed word) muls16s::j#2 j zp[2]:28 1001.0 +(signed word) muls16s::j#1 j zp[2]:24 2002.0 +(signed word) muls16s::j#2 j zp[2]:24 1001.0 (signed dword) muls16s::m (signed dword) muls16s::m#1 m zp[4]:2 1001.0 (signed dword) muls16s::m#2 m zp[4]:2 1001.0 @@ -327,9 +328,9 @@ (label) muls16u::@3 (label) muls16u::@return (word) muls16u::a -(word) muls16u::a#0 a zp[2]:28 157.71428571428572 +(word) muls16u::a#0 a zp[2]:24 157.71428571428572 (word) muls16u::b -(word) muls16u::b#0 b zp[2]:30 183.66666666666669 +(word) muls16u::b#0 b zp[2]:26 183.66666666666669 (word) muls16u::i (word) muls16u::i#1 i zp[2]:14 2002.0 (word) muls16u::i#2 i zp[2]:14 1001.0 @@ -407,9 +408,9 @@ (label) print_str::@2 (label) print_str::@return (byte*) print_str::str -(byte*) print_str::str#0 str zp[2]:26 202.0 -(byte*) print_str::str#15 str zp[2]:26 101.5 -(byte*) print_str::str#17 str zp[2]:26 2.0 +(byte*) print_str::str#0 str zp[2]:28 202.0 +(byte*) print_str::str#15 str zp[2]:28 101.5 +(byte*) print_str::str#17 str zp[2]:28 2.0 (void()) print_sword((signed word) print_sword::w) (label) print_sword::@1 (label) print_sword::@2 @@ -454,13 +455,12 @@ zp[2]:19 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_line_cursor#22 print_ reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] zp[2]:21 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_char_cursor#137 print_char_cursor#138 print_char_cursor#88 print_char_cursor#142 print_char_cursor#154 print_char_cursor#133 print_char_cursor#149 print_char_cursor#219 print_char_cursor#132 print_char_cursor#22 print_char_cursor#180 print_char_cursor#145 print_char_cursor#187 print_char_cursor#1 ] reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -zp[2]:23 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] -zp[1]:25 [ mulf_init::dir#2 mulf_init::dir#4 ] -zp[2]:26 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul16u::b#0 print_str::str#15 print_str::str#17 print_str::str#0 ] +zp[1]:23 [ mulf_init::dir#2 mulf_init::dir#4 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -zp[2]:28 [ mul16s::$9 mul16s::$16 mulf16s::$9 mulf16s::$16 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] -zp[2]:30 [ mul16s::$13 mul16s::$17 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] +zp[2]:24 [ mulf16s::$9 mulf16s::$16 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 muls16s::j#2 muls16s::j#1 mulf16u::a#2 mulf16u::a#1 mulf16u::a#0 mul16u_compare::a#2 mul16u_compare::a#6 mul16u_compare::a#1 muls16u::a#0 ] +zp[2]:26 [ mul16s::$9 mul16s::$16 mulf16s::$13 mulf16s::$17 muls16s::i#2 muls16s::i#1 mulf16u::b#2 mulf16u::b#1 mulf16u::b#0 mul16u_compare::b#2 mul16u_compare::b#6 mul16u_compare::b#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 muls16u::b#0 mul16u_error::b#0 ] +zp[2]:28 [ mul16s::$13 mul16s::$17 memset::dst#2 memset::dst#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 print_str::str#15 print_str::str#17 print_str::str#0 ] reg byte a [ mul16u::$1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] diff --git a/src/test/ref/test-multiply-8bit.asm b/src/test/ref/test-multiply-8bit.asm index bff25f4e6..581293851 100644 --- a/src/test/ref/test-multiply-8bit.asm +++ b/src/test/ref/test-multiply-8bit.asm @@ -280,9 +280,6 @@ mul8s: { .label a = $c ldx.z a tya - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 jsr mul8u lda.z a cmp #0 @@ -308,7 +305,9 @@ mul8u: { .label mb = $d .label res = 8 .label return = 8 - lda #<0 + sta.z mb + lda #0 + sta.z mb+1 sta.z res sta.z res+1 __b1: @@ -496,9 +495,6 @@ mul8u_compare: { jsr mulf8u ldx.z a lda.z b - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 jsr mul8u lda.z ms cmp.z mf diff --git a/src/test/ref/test-multiply-8bit.cfg b/src/test/ref/test-multiply-8bit.cfg index f5bd6603f..42120acb7 100644 --- a/src/test/ref/test-multiply-8bit.cfg +++ b/src/test/ref/test-multiply-8bit.cfg @@ -323,437 +323,438 @@ mul8s::@return: scope:[mul8s] from mul8s::@2 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mul8s mul8u_compare::@11 [148] (byte) mul8u::a#6 ← phi( mul8s/(byte) mul8u::a#1 mul8u_compare::@11/(byte) mul8u::a#2 ) - [148] (word) mul8u::mb#0 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@11/(byte) mul8u::b#1 ) + [148] (byte) mul8u::b#2 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@11/(byte) mul8u::b#1 ) + [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [149] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [149] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) - [149] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) - [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 + [150] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [150] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) + [150] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) + [151] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return mul8u::@return: scope:[mul8u] from mul8u::@1 - [151] return + [152] return to:@return mul8u::@2: scope:[mul8u] from mul8u::@1 - [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 - [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 + [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 + [154] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 to:mul8u::@4 mul8u::@4: scope:[mul8u] from mul8u::@2 - [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 + [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 to:mul8u::@3 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 - [155] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) - [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 - [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 + [156] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) + [157] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 + [158] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 to:mul8u::@1 (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) mulf8s: scope:[mulf8s] from mul8s_compare::@12 - [158] phi() + [159] phi() to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - [160] call mulf8u_prepare + [160] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 + [161] call mulf8u_prepare to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 - [162] call mulf8s_prepared + [162] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 + [163] call mulf8s_prepared to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 to:mulf8s::@return mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [164] return + [165] return to:@return (signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 - [166] call mulf8u_prepared - [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 + [166] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 + [167] call mulf8u_prepared + [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 to:mulf8s_prepared::@5 mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 + [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 + [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 to:mulf8s_prepared::@3 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 - [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 - [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 + [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 + [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 + [173] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 to:mulf8s_prepared::@1 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [173] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) - [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 + [174] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) + [175] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 to:mulf8s_prepared::@4 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 - [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) - [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) + [178] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 to:mulf8s_prepared::@2 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [178] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + [179] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) to:mulf8s_prepared::@return mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [179] return + [180] return to:@return (word()) mulf8u_prepared((byte) mulf8u_prepared::b) mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared mulf8u::@1 - [180] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#1 mulf8u::@1/(byte) mulf8u_prepared::b#0 ) - [181] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 + [181] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#1 mulf8u::@1/(byte) mulf8u_prepared::b#0 ) + [182] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } - [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) + [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [184] return + [185] return to:@return (void()) mulf8u_prepare((byte) mulf8u_prepare::a) mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 mulf8u - [185] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#1 mulf8u/(byte) mulf8u_prepare::a#0 ) - [186] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 + [186] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#1 mulf8u/(byte) mulf8u_prepare::a#0 ) + [187] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } to:mulf8u_prepare::@return mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare - [188] return + [189] return to:@return (signed word()) muls8s((signed byte) muls8s::a , (signed byte) muls8s::b) muls8s: scope:[muls8s] from mul8s_compare::@4 - [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 + [190] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 to:muls8s::@2 muls8s::@2: scope:[muls8s] from muls8s - [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 + [191] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 to:muls8s::@3 muls8s::@3: scope:[muls8s] from muls8s::@2 muls8s::@4 - [191] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed word) muls8s::m#1 ) - [191] (signed byte) muls8s::j#2 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed byte) muls8s::j#1 ) - [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 + [192] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed word) 0 muls8s::@4/(signed word) muls8s::m#1 ) + [192] (signed byte) muls8s::j#2 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed byte) muls8s::j#1 ) + [193] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 to:muls8s::@1 muls8s::@1: scope:[muls8s] from muls8s::@2 muls8s::@3 muls8s::@5 - [193] (signed word) muls8s::return#0 ← phi( muls8s::@5/(signed word) muls8s::m#5 muls8s::@2/(signed byte) 0 muls8s::@3/(signed word) muls8s::m#3 ) + [194] (signed word) muls8s::return#0 ← phi( muls8s::@5/(signed word) muls8s::m#5 muls8s::@2/(signed word) 0 muls8s::@3/(signed word) muls8s::m#3 ) to:muls8s::@return muls8s::@return: scope:[muls8s] from muls8s::@1 - [194] return + [195] return to:@return muls8s::@4: scope:[muls8s] from muls8s::@3 - [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 - [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 + [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 + [197] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 to:muls8s::@3 muls8s::@5: scope:[muls8s] from muls8s muls8s::@6 - [197] (signed word) muls8s::m#5 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed word) muls8s::m#2 ) - [197] (signed byte) muls8s::i#2 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed byte) muls8s::i#1 ) - [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 + [198] (signed word) muls8s::m#5 ← phi( muls8s/(signed word) 0 muls8s::@6/(signed word) muls8s::m#2 ) + [198] (signed byte) muls8s::i#2 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed byte) muls8s::i#1 ) + [199] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 to:muls8s::@1 muls8s::@6: scope:[muls8s] from muls8s::@5 - [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 - [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 + [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 + [201] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 to:muls8s::@5 (void()) mul8u_compare() mul8u_compare: scope:[mul8u_compare] from main::@4 - [201] phi() + [202] phi() to:mul8u_compare::@1 mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@8 - [202] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) + [203] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) to:mul8u_compare::@2 mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 - [203] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) - [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 - [206] call muls8u - [207] (word) muls8u::return#2 ← (word) muls8u::return#0 + [204] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) + [205] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + [206] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 + [207] call muls8u + [208] (word) muls8u::return#2 ← (word) muls8u::return#0 to:mul8u_compare::@10 mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@2 - [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 - [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 - [211] call mulf8u - [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + [210] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 + [211] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 + [212] call mulf8u + [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 to:mul8u_compare::@11 mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10 - [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 - [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 - [216] call mul8u - [217] (word) mul8u::return#3 ← (word) mul8u::res#2 + [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + [215] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 + [216] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 + [217] call mul8u + [218] (word) mul8u::return#3 ← (word) mul8u::res#2 to:mul8u_compare::@12 mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@11 - [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 + [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 to:mul8u_compare::@6 mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@12 - [220] phi() + [221] phi() to:mul8u_compare::@3 mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@12 mul8u_compare::@6 - [221] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) - [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 + [222] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) + [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 to:mul8u_compare::@4 mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@3 - [223] phi() + [224] phi() to:mul8u_compare::@4 mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@3 - [224] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) - [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 + [225] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) + [226] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 to:mul8u_compare::@7 mul8u_compare::@7: scope:[mul8u_compare] from mul8u_compare::@4 - [226] *((const byte*) BGCOL) ← (byte) 2 - [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 - [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - [232] call mul8u_error + [227] *((const byte*) BGCOL) ← (byte) 2 + [228] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 + [229] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + [233] call mul8u_error to:mul8u_compare::@return mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@13 mul8u_compare::@7 - [233] return + [234] return to:@return mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4 - [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 - [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 + [235] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 + [236] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 to:mul8u_compare::@8 mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@5 - [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 - [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 + [237] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 + [238] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 to:mul8u_compare::@9 mul8u_compare::@9: scope:[mul8u_compare] from mul8u_compare::@8 - [238] phi() - [239] call print_str + [239] phi() + [240] call print_str to:mul8u_compare::@13 mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@9 - [240] phi() - [241] call print_ln + [241] phi() + [242] call print_ln to:mul8u_compare::@return (void()) mul8u_error((byte) mul8u_error::a , (byte) mul8u_error::b , (word) mul8u_error::ms , (word) mul8u_error::mn , (word) mul8u_error::mf) mul8u_error: scope:[mul8u_error] from mul8u_compare::@7 - [242] phi() - [243] call print_str + [243] phi() + [244] call print_str to:mul8u_error::@1 mul8u_error::@1: scope:[mul8u_error] from mul8u_error - [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - [245] call print_byte + [245] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + [246] call print_byte to:mul8u_error::@2 mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1 - [246] phi() - [247] call print_str + [247] phi() + [248] call print_str to:mul8u_error::@3 mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2 - [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 - [249] call print_byte + [249] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 + [250] call print_byte to:mul8u_error::@4 mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3 - [250] phi() - [251] call print_str + [251] phi() + [252] call print_str to:mul8u_error::@5 mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4 - [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - [253] call print_word + [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + [254] call print_word to:mul8u_error::@6 mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5 - [254] phi() - [255] call print_str + [255] phi() + [256] call print_str to:mul8u_error::@7 mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6 - [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 - [257] call print_word + [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 + [258] call print_word to:mul8u_error::@8 mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7 - [258] phi() - [259] call print_str + [259] phi() + [260] call print_str to:mul8u_error::@9 mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8 - [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 - [261] call print_word + [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 + [262] call print_word to:mul8u_error::@10 mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9 - [262] phi() - [263] call print_ln + [263] phi() + [264] call print_ln to:mul8u_error::@return mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10 - [264] return + [265] return to:@return (word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b) mulf8u: scope:[mulf8u] from mul8u_compare::@10 - [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - [266] call mulf8u_prepare + [266] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + [267] call mulf8u_prepare to:mulf8u::@1 mulf8u::@1: scope:[mulf8u] from mulf8u - [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - [268] call mulf8u_prepared - [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + [268] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + [269] call mulf8u_prepared + [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 to:mulf8u::@2 mulf8u::@2: scope:[mulf8u] from mulf8u::@1 - [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 to:mulf8u::@return mulf8u::@return: scope:[mulf8u] from mulf8u::@2 - [271] return + [272] return to:@return (word()) muls8u((byte) muls8u::a , (byte) muls8u::b) muls8u: scope:[muls8u] from mul8u_compare::@2 - [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 + [273] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 to:muls8u::@2 muls8u::@2: scope:[muls8u] from muls8u muls8u::@3 - [273] (word) muls8u::m#3 ← phi( muls8u/(byte) 0 muls8u::@3/(word) muls8u::m#1 ) - [273] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) - [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 + [274] (word) muls8u::m#3 ← phi( muls8u/(word) 0 muls8u::@3/(word) muls8u::m#1 ) + [274] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) + [275] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 to:muls8u::@1 muls8u::@1: scope:[muls8u] from muls8u muls8u::@2 - [275] (word) muls8u::return#0 ← phi( muls8u/(byte) 0 muls8u::@2/(word) muls8u::m#3 ) + [276] (word) muls8u::return#0 ← phi( muls8u/(word) 0 muls8u::@2/(word) muls8u::m#3 ) to:muls8u::@return muls8u::@return: scope:[muls8u] from muls8u::@1 - [276] return + [277] return to:@return muls8u::@3: scope:[muls8u] from muls8u::@2 - [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 - [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 + [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 + [279] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 to:muls8u::@2 (void()) mulf_tables_cmp() mulf_tables_cmp: scope:[mulf_tables_cmp] from main::@3 - [279] phi() + [280] phi() to:mulf_tables_cmp::@1 mulf_tables_cmp::@1: scope:[mulf_tables_cmp] from mulf_tables_cmp mulf_tables_cmp::@4 - [280] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mula_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) - [280] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mulf_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) - [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 + [281] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mula_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) + [281] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mulf_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) + [282] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 to:mulf_tables_cmp::@3 mulf_tables_cmp::@3: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [282] phi() - [283] call print_str + [283] phi() + [284] call print_str to:mulf_tables_cmp::@6 mulf_tables_cmp::@6: scope:[mulf_tables_cmp] from mulf_tables_cmp::@3 - [284] phi() - [285] call print_ln + [285] phi() + [286] call print_ln to:mulf_tables_cmp::@7 mulf_tables_cmp::@7: scope:[mulf_tables_cmp] from mulf_tables_cmp::@6 - [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 + [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 to:mulf_tables_cmp::@return mulf_tables_cmp::@return: scope:[mulf_tables_cmp] from mulf_tables_cmp::@10 mulf_tables_cmp::@7 - [287] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) - [287] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*) print_char_cursor#226 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) - [288] return + [288] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) + [288] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*) print_char_cursor#226 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) + [289] return to:@return mulf_tables_cmp::@2: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 + [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 to:mulf_tables_cmp::@5 mulf_tables_cmp::@5: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [290] *((const byte*) BGCOL) ← (byte) 2 - [291] call print_str + [291] *((const byte*) BGCOL) ← (byte) 2 + [292] call print_str to:mulf_tables_cmp::@8 mulf_tables_cmp::@8: scope:[mulf_tables_cmp] from mulf_tables_cmp::@5 - [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - [293] call print_word + [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + [294] call print_word to:mulf_tables_cmp::@9 mulf_tables_cmp::@9: scope:[mulf_tables_cmp] from mulf_tables_cmp::@8 - [294] phi() - [295] call print_str + [295] phi() + [296] call print_str to:mulf_tables_cmp::@10 mulf_tables_cmp::@10: scope:[mulf_tables_cmp] from mulf_tables_cmp::@9 - [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 - [297] call print_word + [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 + [298] call print_word to:mulf_tables_cmp::@return mulf_tables_cmp::@4: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 - [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 + [299] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 + [300] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 to:mulf_tables_cmp::@1 (void()) mulf_init_asm() mulf_init_asm: scope:[mulf_init_asm] from main::@2 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } - [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) - [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) - [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) - [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) + [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) + [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) + [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) + [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) to:mulf_init_asm::@return mulf_init_asm::@return: scope:[mulf_init_asm] from mulf_init_asm - [305] return + [306] return to:@return (void()) mulf_init() mulf_init: scope:[mulf_init] from main::@1 - [306] phi() + [307] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [307] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [307] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [307] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [307] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [307] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + [308] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [308] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [308] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [308] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [308] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [309] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [309] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) - [309] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [309] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) - [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + [310] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [310] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [310] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [310] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) - [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [313] return + [314] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) - [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) - [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [317] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [319] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [319] phi() + [320] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [320] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [321] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [322] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 - [324] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + [323] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [325] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [326] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [327] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [327] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [327] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [328] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 - [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 - [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 - [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 - [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [328] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [328] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [329] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [330] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [333] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [335] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 (void()) print_cls() print_cls: scope:[print_cls] from main - [335] phi() - [336] call memset + [336] phi() + [337] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [337] return + [338] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls - [338] phi() + [339] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [339] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [340] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [341] return + [342] return to:@return memset::@2: scope:[memset] from memset::@1 - [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [344] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 diff --git a/src/test/ref/test-multiply-8bit.log b/src/test/ref/test-multiply-8bit.log index 4454340d8..a08c8d2b8 100644 --- a/src/test/ref/test-multiply-8bit.log +++ b/src/test/ref/test-multiply-8bit.log @@ -417,8 +417,8 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 mul8u: scope:[mul8u] from mul8s mul8u_compare::@13 (byte) mul8u::a#6 ← phi( mul8s/(byte) mul8u::a#1 mul8u_compare::@13/(byte) mul8u::a#2 ) (byte) mul8u::b#2 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@13/(byte) mul8u::b#1 ) - (word) mul8u::res#0 ← (number) 0 - (word) mul8u::mb#0 ← (byte) mul8u::b#2 + (word) mul8u::res#0 ← (word) 0 + (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@4 (word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 ) @@ -523,9 +523,9 @@ mul8s::@return: scope:[mul8s] from mul8s::@2 (void()) mulf_init() mulf_init: scope:[mulf_init] from main::@1 - (word) mulf_init::sqr#0 ← (number) 0 - (byte) mulf_init::x_2#0 ← (number) 0 - (byte) mulf_init::c#0 ← (number) 0 + (word) mulf_init::sqr#0 ← (word) 0 + (byte) mulf_init::x_2#0 ← (byte) 0 + (byte) mulf_init::c#0 ← (byte) 0 (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 to:mulf_init::@1 @@ -552,7 +552,7 @@ mulf_init::@2: scope:[mulf_init] from mulf_init::@1 to:mulf_init::@7 mulf_init::@3: scope:[mulf_init] from mulf_init::@1 (byte) mulf_init::x_255#0 ← (byte)(number) -1 - (byte) mulf_init::dir#0 ← (number) $ff + (byte) mulf_init::dir#0 ← (byte) $ff (byte*) mulf_init::sqr2_hi#0 ← (const byte*) mulf_sqr2_hi (byte*) mulf_init::sqr2_lo#0 ← (const byte*) mulf_sqr2_lo to:mulf_init::@9 @@ -812,7 +812,7 @@ main::@return: scope:[main] from main::@6 muls8u: scope:[muls8u] from mul8u_compare::@2 (byte) muls8u::b#4 ← phi( mul8u_compare::@2/(byte) muls8u::b#0 ) (byte) muls8u::a#1 ← phi( mul8u_compare::@2/(byte) muls8u::a#0 ) - (word) muls8u::m#0 ← (number) 0 + (word) muls8u::m#0 ← (word) 0 (bool~) muls8u::$0 ← (byte) muls8u::a#1 != (number) 0 (bool~) muls8u::$1 ← ! (bool~) muls8u::$0 if((bool~) muls8u::$1) goto muls8u::@1 @@ -825,7 +825,7 @@ muls8u::@2: scope:[muls8u] from muls8u (byte) muls8u::b#3 ← phi( muls8u/(byte) muls8u::b#4 ) (word) muls8u::m#5 ← phi( muls8u/(word) muls8u::m#0 ) (byte) muls8u::a#3 ← phi( muls8u/(byte) muls8u::a#1 ) - (byte) muls8u::i#0 ← (number) 0 + (byte) muls8u::i#0 ← (byte) 0 to:muls8u::@4 muls8u::@4: scope:[muls8u] from muls8u::@2 muls8u::@5 (byte) muls8u::b#2 ← phi( muls8u::@2/(byte) muls8u::b#3 muls8u::@5/(byte) muls8u::b#1 ) @@ -854,7 +854,7 @@ muls8u::@return: scope:[muls8u] from muls8u::@1 muls8s: scope:[muls8s] from mul8s_compare::@5 (signed byte) muls8s::b#7 ← phi( mul8s_compare::@5/(signed byte) muls8s::b#0 ) (signed byte) muls8s::a#1 ← phi( mul8s_compare::@5/(signed byte) muls8s::a#0 ) - (signed word) muls8s::m#0 ← (number) 0 + (signed word) muls8s::m#0 ← (signed word) 0 (bool~) muls8s::$0 ← (signed byte) muls8s::a#1 < (number) 0 if((bool~) muls8s::$0) goto muls8s::@1 to:muls8s::@4 @@ -862,7 +862,7 @@ muls8s::@1: scope:[muls8s] from muls8s (signed byte) muls8s::b#6 ← phi( muls8s/(signed byte) muls8s::b#7 ) (signed word) muls8s::m#10 ← phi( muls8s/(signed word) muls8s::m#0 ) (signed byte) muls8s::a#7 ← phi( muls8s/(signed byte) muls8s::a#1 ) - (signed byte) muls8s::i#0 ← (number) 0 + (signed byte) muls8s::i#0 ← (signed byte) 0 to:muls8s::@14 muls8s::@4: scope:[muls8s] from muls8s (signed byte) muls8s::b#8 ← phi( muls8s/(signed byte) muls8s::b#7 ) @@ -876,7 +876,7 @@ muls8s::@5: scope:[muls8s] from muls8s::@4 (signed byte) muls8s::b#5 ← phi( muls8s::@4/(signed byte) muls8s::b#8 ) (signed word) muls8s::m#9 ← phi( muls8s::@4/(signed word) muls8s::m#8 ) (signed byte) muls8s::a#5 ← phi( muls8s::@4/(signed byte) muls8s::a#2 ) - (signed byte) muls8s::j#0 ← (number) 0 + (signed byte) muls8s::j#0 ← (signed byte) 0 to:muls8s::@8 muls8s::@8: scope:[muls8s] from muls8s::@5 muls8s::@9 (signed byte) muls8s::b#3 ← phi( muls8s::@5/(signed byte) muls8s::b#5 muls8s::@9/(signed byte) muls8s::b#1 ) @@ -1092,7 +1092,7 @@ mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@13 (word) mul8u::return#6 ← phi( mul8u_compare::@13/(word) mul8u::return#3 ) (word~) mul8u_compare::$4 ← (word) mul8u::return#6 (word) mul8u_compare::mn#0 ← (word~) mul8u_compare::$4 - (byte) mul8u_compare::ok#0 ← (number) 1 + (byte) mul8u_compare::ok#0 ← (byte) 1 (bool~) mul8u_compare::$5 ← (word) mul8u_compare::ms#1 != (word) mul8u_compare::mf#1 (bool~) mul8u_compare::$6 ← ! (bool~) mul8u_compare::$5 if((bool~) mul8u_compare::$6) goto mul8u_compare::@3 @@ -1332,7 +1332,7 @@ mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@11 mul8s_compare: scope:[mul8s_compare] from main::@5 (byte*) print_line_cursor#83 ← phi( main::@5/(byte*) print_line_cursor#7 ) (byte*) print_char_cursor#170 ← phi( main::@5/(byte*) print_char_cursor#25 ) - (signed byte) mul8s_compare::a#0 ← (number) -$80 + (signed byte) mul8s_compare::a#0 ← (signed byte) -$80 to:mul8s_compare::@1 mul8s_compare::@1: scope:[mul8s_compare] from mul8s_compare mul8s_compare::@6 (byte*) print_line_cursor#72 ← phi( mul8s_compare/(byte*) print_line_cursor#83 mul8s_compare::@6/(byte*) print_line_cursor#84 ) @@ -1345,7 +1345,7 @@ mul8s_compare::@2: scope:[mul8s_compare] from mul8s_compare::@1 (byte*) print_line_cursor#97 ← phi( mul8s_compare::@1/(byte*) print_line_cursor#72 ) (byte*) print_char_cursor#180 ← phi( mul8s_compare::@1/(byte*) print_char_cursor#163 ) (signed byte) mul8s_compare::a#10 ← phi( mul8s_compare::@1/(signed byte) mul8s_compare::a#2 ) - (signed byte) mul8s_compare::b#0 ← (number) -$80 + (signed byte) mul8s_compare::b#0 ← (signed byte) -$80 to:mul8s_compare::@4 mul8s_compare::@3: scope:[mul8s_compare] from mul8s_compare::@1 (byte*) print_line_cursor#63 ← phi( mul8s_compare::@1/(byte*) print_line_cursor#72 ) @@ -1420,7 +1420,7 @@ mul8s_compare::@24: scope:[mul8s_compare] from mul8s_compare::@23 (signed word) mul8s::return#4 ← phi( mul8s_compare::@23/(signed word) mul8s::return#2 ) (signed word~) mul8s_compare::$6 ← (signed word) mul8s::return#4 (signed word) mul8s_compare::mn#0 ← (signed word~) mul8s_compare::$6 - (byte) mul8s_compare::ok#0 ← (number) 1 + (byte) mul8s_compare::ok#0 ← (byte) 1 (bool~) mul8s_compare::$7 ← (signed word) mul8s_compare::ms#1 != (signed word) mul8s_compare::mf#1 (bool~) mul8s_compare::$8 ← ! (bool~) mul8s_compare::$7 if((bool~) mul8s_compare::$8) goto mul8s_compare::@7 @@ -2897,7 +2897,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#6 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#6 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#3 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (number) 1 Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (unumber)(number) 1 @@ -2906,16 +2905,12 @@ Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u: Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 Adding number conversion cast (snumber) 0 in (bool~) mul8s::$3 ← (signed byte) mul8s::a#2 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mul8s::$5 ← (signed byte) mul8s::b#2 < (number) 0 -Adding number conversion cast (unumber) 0 in (word) mulf_init::sqr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::x_2#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::c#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_hi#0 ← (const byte*) mulf_sqr1_hi+(number) 1 Adding number conversion cast (unumber) 1 in (byte*) mulf_init::sqr1_lo#0 ← (const byte*) mulf_sqr1_lo+(number) 1 Adding number conversion cast (unumber) $200 in (bool~) mulf_init::$0 ← (byte*) mulf_init::sqr1_lo#2 != (const byte*) mulf_sqr1_lo+(number) $200 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (number) 1 Adding number conversion cast (unumber) mulf_init::$1 in (number~) mulf_init::$1 ← (byte) mulf_init::c#1 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$2 ← (unumber~) mulf_init::$1 == (number) 0 -Adding number conversion cast (unumber) $ff in (byte) mulf_init::dir#0 ← (number) $ff Adding number conversion cast (unumber) $1ff in (bool~) mulf_init::$7 ← (byte*) mulf_init::sqr2_lo#2 != (const byte*) mulf_sqr2_lo+(number) $1ff Adding number conversion cast (unumber) 0 in (bool~) mulf_init::$9 ← (byte) mulf_init::x_255#1 == (number) 0 Adding number conversion cast (unumber) $100 in *((const byte*) mulf_sqr2_lo+(number) $1ff) ← *((const byte*) mulf_sqr1_lo+(number) $100) @@ -2926,26 +2921,17 @@ Adding number conversion cast (unumber) 1 in (byte) mulf_init::dir#1 ← (number Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$2 ← *((const signed byte*) mulf8s_prepared::memA) < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$4 ← (signed byte) mulf8s_prepared::b#2 < (number) 0 Adding number conversion cast (unumber) 5 in *((const byte*) BGCOL) ← (number) 5 -Adding number conversion cast (unumber) 0 in (word) muls8u::m#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) muls8u::$0 ← (byte) muls8u::a#1 != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) muls8u::i#0 ← (number) 0 -Adding number conversion cast (snumber) 0 in (signed word) muls8s::m#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) muls8s::$0 ← (signed byte) muls8s::a#1 < (number) 0 -Adding number conversion cast (snumber) 0 in (signed byte) muls8s::i#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) muls8s::$1 ← (signed byte) muls8s::a#2 > (number) 0 -Adding number conversion cast (snumber) 0 in (signed byte) muls8s::j#0 ← (number) 0 Adding number conversion cast (unumber) $200*4 in (bool~) mulf_tables_cmp::$2 ← (byte*) mulf_tables_cmp::kc_sqr#2 < (const byte*) mulf_sqr1_lo+(number) $200*(number) 4 Adding number conversion cast (unumber) 2 in *((const byte*) BGCOL) ← (number) 2 -Adding number conversion cast (unumber) 1 in (byte) mul8u_compare::ok#0 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mul8u_compare::ok#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u_compare::$9 ← (byte) mul8u_compare::ok#3 == (number) 0 Adding number conversion cast (unumber) 0 in (byte) mul8u_compare::ok#2 ← (number) 0 Adding number conversion cast (unumber) 2 in *((const byte*) BGCOL) ← (number) 2 -Adding number conversion cast (snumber) -$80 in (signed byte) mul8s_compare::a#0 ← (number) -$80 Adding number conversion cast (snumber) -$80 in (bool~) mul8s_compare::$2 ← (signed byte) mul8s_compare::a#2 != (number) -$80 -Adding number conversion cast (snumber) -$80 in (signed byte) mul8s_compare::b#0 ← (number) -$80 Adding number conversion cast (snumber) -$80 in (bool~) mul8s_compare::$3 ← (signed byte) mul8s_compare::b#2 != (number) -$80 -Adding number conversion cast (unumber) 1 in (byte) mul8s_compare::ok#0 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mul8s_compare::ok#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8s_compare::$11 ← (byte) mul8s_compare::ok#3 == (number) 0 Adding number conversion cast (unumber) 0 in (byte) mul8s_compare::ok#2 ← (number) 0 @@ -2956,16 +2942,11 @@ Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#6 Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#5 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (byte~) mul8s::$0 ← (byte)(signed byte) mul8s::a#1 Inlining cast (byte~) mul8s::$1 ← (byte)(signed byte) mul8s::b#1 Inlining cast (byte~) mul8s::$10 ← (byte)(signed byte) mul8s::b#3 Inlining cast (signed word~) mul8s::$7 ← (signed word)(word) mul8s::m#4 Inlining cast (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#3 -Inlining cast (word) mulf_init::sqr#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::x_2#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::c#0 ← (unumber)(number) 0 -Inlining cast (byte) mulf_init::dir#0 ← (unumber)(number) $ff Inlining cast (byte) mulf_init::dir#1 ← (unumber)(number) 1 Inlining cast (byte~) mulf8s_prepared::$0 ← (byte)(signed byte) mulf8s_prepared::b#1 Inlining cast (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#3 @@ -2973,21 +2954,12 @@ Inlining cast (signed word~) mulf8s_prepared::$6 ← (signed word)(word) mulf8s_ Inlining cast (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf8s_prepared::memA) Inlining cast (byte~) mulf8s::mulf8s_prepare1_$0 ← (byte)(signed byte) mulf8s::mulf8s_prepare1_a#1 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 5 -Inlining cast (word) muls8u::m#0 ← (unumber)(number) 0 -Inlining cast (byte) muls8u::i#0 ← (unumber)(number) 0 -Inlining cast (signed word) muls8s::m#0 ← (snumber)(number) 0 -Inlining cast (signed byte) muls8s::i#0 ← (snumber)(number) 0 -Inlining cast (signed byte) muls8s::j#0 ← (snumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 2 Inlining cast (word~) mulf_tables_cmp::$6 ← (word)(byte*) mulf_tables_cmp::asm_sqr#4 Inlining cast (word~) mulf_tables_cmp::$9 ← (word)(byte*) mulf_tables_cmp::kc_sqr#5 -Inlining cast (byte) mul8u_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul8u_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul8u_compare::ok#2 ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 2 -Inlining cast (signed byte) mul8s_compare::a#0 ← (snumber)(number) -$80 -Inlining cast (signed byte) mul8s_compare::b#0 ← (snumber)(number) -$80 -Inlining cast (byte) mul8s_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul8s_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul8s_compare::ok#2 ← (unumber)(number) 0 Inlining cast *((const byte*) BGCOL) ← (unumber)(number) 2 @@ -3008,23 +2980,18 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $200 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast -1 -Simplifying constant integer cast $ff Simplifying constant integer cast $1ff Simplifying constant integer cast 0 Simplifying constant integer cast $100 @@ -3040,22 +3007,13 @@ Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast -$80 Simplifying constant integer cast -$80 -Simplifying constant integer cast -$80 -Simplifying constant integer cast -$80 -Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -3070,22 +3028,17 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $1ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 @@ -3097,24 +3050,15 @@ Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed byte) -$80 Finalized signed number type (signed byte) -$80 -Finalized signed number type (signed byte) -$80 -Finalized signed number type (signed byte) -$80 -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -3178,7 +3122,6 @@ Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#83 Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#84 (byte*) print_char_cursor#85 (byte*) print_char_cursor#18 Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#87 (byte*) print_char_cursor#20 Alias (byte*) print_line_cursor#26 = (byte*) print_screen#2 (byte*) print_screen#1 (byte*) print_line_cursor#3 (byte*) print_char_cursor#21 (byte*) print_char_cursor#88 (byte*) print_line_cursor#4 (byte*) print_char_cursor#22 -Alias (word) mul8u::mb#0 = (byte) mul8u::b#2 Alias (byte) mul8u::a#3 = (byte) mul8u::a#4 (byte) mul8u::a#7 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#4 (word) mul8u::return#1 @@ -3648,15 +3591,15 @@ Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memse Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$2+memset::num#0 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [74] (byte~) mul8s::$10 ← (byte)(signed byte) mul8s::b#0 keeping mul8s::b#0 -Inlining Noop Cast [78] (signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 -Inlining Noop Cast [80] (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#0 keeping mul8s::a#0 -Inlining Noop Cast [135] (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#0 keeping mulf8s_prepared::b#0 -Inlining Noop Cast [139] (signed word) mulf8s_prepared::return#0 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 -Inlining Noop Cast [141] (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf8s_prepared::memA) keeping *(mulf8s_prepared::memA) +Inlining Noop Cast [75] (byte~) mul8s::$10 ← (byte)(signed byte) mul8s::b#0 keeping mul8s::b#0 +Inlining Noop Cast [79] (signed word) mul8s::return#0 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 +Inlining Noop Cast [81] (byte~) mul8s::$14 ← (byte)(signed byte) mul8s::a#0 keeping mul8s::a#0 +Inlining Noop Cast [136] (byte~) mulf8s_prepared::$9 ← (byte)(signed byte) mulf8s_prepared::b#0 keeping mulf8s_prepared::b#0 +Inlining Noop Cast [140] (signed word) mulf8s_prepared::return#0 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 +Inlining Noop Cast [142] (byte~) mulf8s_prepared::$13 ← (byte)*((const signed byte*) mulf8s_prepared::memA) keeping *(mulf8s_prepared::memA) Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [149] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 -Inlining Noop Cast [273] (signed word) mul8s::return#2 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 +Inlining Noop Cast [150] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4 keeping mulf8s_prepared::m#4 +Inlining Noop Cast [274] (signed word) mul8s::return#2 ← (signed word)(word) mul8s::m#4 keeping mul8s::m#4 Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte*) print_str::str#1 @@ -3722,10 +3665,10 @@ Constant inlined mulf_init::x_2#0 = (byte) 0 Constant inlined print_line_cursor#0 = (byte*) 1024 Constant inlined mul8s_compare::ok#0 = (byte) 1 Constant inlined mul8s_compare::ok#1 = (byte) 0 -Constant inlined muls8s::m#0 = (signed byte) 0 +Constant inlined muls8s::m#0 = (signed word) 0 Constant inlined muls8s::i#0 = (signed byte) 0 Constant inlined print_str::str#9 = (const string) str4 -Constant inlined mul8u::res#0 = (byte) 0 +Constant inlined mul8u::res#0 = (word) 0 Constant inlined mulf_init::sqr1_hi#0 = (const byte*) mulf_sqr1_hi+(byte) 1 Constant inlined mul8s_compare::ok#2 = (byte) 0 Constant inlined mulf_init::sqr1_lo#0 = (const byte*) mulf_sqr1_lo+(byte) 1 @@ -3748,12 +3691,12 @@ Constant inlined print_str::str#14 = (const string) str3 Constant inlined mul8u_compare::a#0 = (byte) 0 Constant inlined memset::$2 = (byte*)(const void*) memset::str#0 Constant inlined mul8s_compare::a#0 = (signed byte) -$80 -Constant inlined mulf_init::sqr#0 = (byte) 0 +Constant inlined mulf_init::sqr#0 = (word) 0 Constant inlined muls8u::i#0 = (byte) 0 Constant inlined mul8s_error::str1 = (const string) str1 Constant inlined mul8s_error::str2 = (const string) str2 Constant inlined mul8s_error::str3 = (const string) str3 -Constant inlined muls8u::m#0 = (byte) 0 +Constant inlined muls8u::m#0 = (word) 0 Constant inlined mul8s_error::str4 = (const string) str4 Constant inlined print_char::ch#3 = (byte) ' ' Constant inlined print_char::ch#2 = (byte) '-' @@ -3836,13 +3779,13 @@ Calls in [print_word] to print_byte:129 print_byte:133 Calls in [print_byte] to print_char:141 print_char:146 Calls in [print_sbyte] to print_char:163 print_byte:169 print_char:173 Calls in [mul8s] to mul8u:180 -Calls in [mulf8s] to mulf8u_prepare:219 mulf8s_prepared:222 -Calls in [mulf8s_prepared] to mulf8u_prepared:227 -Calls in [mul8u_compare] to muls8u:279 mulf8u:284 mul8u:291 mul8u_error:307 print_str:315 print_ln:318 -Calls in [mul8u_error] to print_str:324 print_byte:328 print_str:330 print_byte:334 print_str:336 print_word:340 print_str:342 print_word:346 print_str:348 print_word:352 print_ln:355 -Calls in [mulf8u] to mulf8u_prepare:360 mulf8u_prepared:363 -Calls in [mulf_tables_cmp] to print_str:382 print_ln:384 print_str:391 print_word:395 print_str:397 print_word:401 -Calls in [print_cls] to memset:458 +Calls in [mulf8s] to mulf8u_prepare:220 mulf8s_prepared:223 +Calls in [mulf8s_prepared] to mulf8u_prepared:228 +Calls in [mul8u_compare] to muls8u:280 mulf8u:285 mul8u:292 mul8u_error:308 print_str:316 print_ln:319 +Calls in [mul8u_error] to print_str:325 print_byte:329 print_str:331 print_byte:335 print_str:337 print_word:341 print_str:343 print_word:347 print_str:349 print_word:353 print_ln:356 +Calls in [mulf8u] to mulf8u_prepare:361 mulf8u_prepared:364 +Calls in [mulf_tables_cmp] to print_str:383 print_ln:385 print_str:392 print_word:396 print_str:398 print_word:402 +Calls in [print_cls] to memset:459 Created 62 initial phi equivalence classes Not coalescing [23] print_char_cursor#189 ← print_line_cursor#1 @@ -3889,88 +3832,88 @@ Coalesced [167] print_byte::b#9 ← print_byte::b#0 Coalesced (already) [168] print_char_cursor#217 ← print_char_cursor#19 Coalesced (already) [172] print_char_cursor#222 ← print_char_cursor#134 Coalesced [175] print_sbyte::b#11 ← print_sbyte::b#0 -Coalesced [178] mul8u::mb#6 ← mul8u::b#0 +Coalesced [178] mul8u::b#3 ← mul8u::b#0 Coalesced [179] mul8u::a#8 ← mul8u::a#1 Coalesced [187] mul8s::m#7 ← mul8s::m#1 Coalesced [193] mul8s::m#10 ← mul8s::m#2 Coalesced [196] mul8s::m#9 ← mul8s::m#5 Coalesced [197] mul8s::m#8 ← mul8s::m#0 -Coalesced [199] mul8u::a#10 ← mul8u::a#6 -Coalesced [200] mul8u::mb#8 ← mul8u::mb#0 -Coalesced [208] mul8u::res#9 ← mul8u::res#1 -Coalesced [212] mul8u::a#11 ← mul8u::a#0 -Coalesced [213] mul8u::res#7 ← mul8u::res#6 -Coalesced [214] mul8u::mb#9 ← mul8u::mb#1 -Coalesced (already) [215] mul8u::res#8 ← mul8u::res#2 -Coalesced [218] mulf8u_prepare::a#3 ← mulf8u_prepare::a#1 -Coalesced [226] mulf8u_prepared::b#3 ← mulf8u_prepared::b#1 -Coalesced [234] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1 -Coalesced [240] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2 -Coalesced [243] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5 -Coalesced [244] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0 -Coalesced [259] muls8s::return#6 ← muls8s::m#3 -Coalesced [264] muls8s::j#4 ← muls8s::j#1 -Coalesced [265] muls8s::m#11 ← muls8s::m#1 -Coalesced [269] muls8s::return#5 ← muls8s::m#5 -Coalesced [272] muls8s::i#4 ← muls8s::i#1 -Coalesced [273] muls8s::m#12 ← muls8s::m#2 -Coalesced [289] mul8u::mb#7 ← mul8u::b#1 -Coalesced [290] mul8u::a#9 ← mul8u::a#2 -Coalesced [314] print_char_cursor#195 ← print_char_cursor#100 -Coalesced [316] print_line_cursor#117 ← print_line_cursor#11 -Coalesced (already) [317] print_char_cursor#206 ← print_char_cursor#134 -Coalesced [320] mul8u_compare::a#14 ← mul8u_compare::a#1 -Coalesced [321] mul8u_compare::b#12 ← mul8u_compare::b#1 -Coalesced [322] mul8u_compare::ok#5 ← mul8u_compare::ok#4 -Coalesced (already) [323] print_char_cursor#196 ← print_char_cursor#100 -Coalesced [326] print_byte::b#7 ← print_byte::b#3 -Coalesced (already) [327] print_char_cursor#215 ← print_char_cursor#134 -Coalesced (already) [329] print_char_cursor#197 ← print_char_cursor#19 -Coalesced [332] print_byte::b#8 ← print_byte::b#4 -Coalesced (already) [333] print_char_cursor#216 ← print_char_cursor#134 -Coalesced (already) [335] print_char_cursor#198 ← print_char_cursor#19 -Coalesced [338] print_word::w#8 ← print_word::w#3 -Coalesced (already) [339] print_char_cursor#209 ← print_char_cursor#134 -Coalesced (already) [341] print_char_cursor#199 ← print_char_cursor#19 -Coalesced [344] print_word::w#9 ← print_word::w#4 -Coalesced (already) [345] print_char_cursor#210 ← print_char_cursor#134 -Coalesced (already) [347] print_char_cursor#200 ← print_char_cursor#19 -Coalesced [350] print_word::w#10 ← print_word::w#5 -Coalesced (already) [351] print_char_cursor#211 ← print_char_cursor#134 -Coalesced (already) [353] print_line_cursor#118 ← print_line_cursor#11 -Coalesced (already) [354] print_char_cursor#207 ← print_char_cursor#19 -Coalesced [359] mulf8u_prepare::a#4 ← mulf8u_prepare::a#0 -Coalesced [362] mulf8u_prepared::b#4 ← mulf8u_prepared::b#0 -Coalesced [371] muls8u::return#5 ← muls8u::m#3 -Coalesced [376] muls8u::i#4 ← muls8u::i#1 -Coalesced [377] muls8u::m#6 ← muls8u::m#1 -Coalesced (already) [383] print_char_cursor#208 ← print_char_cursor#134 -Not coalescing [385] print_char_cursor#226 ← print_line_cursor#1 -Coalesced (already) [386] print_line_cursor#121 ← print_line_cursor#1 -Coalesced [393] print_word::w#11 ← print_word::w#1 -Coalesced (already) [394] print_char_cursor#212 ← print_char_cursor#134 -Coalesced (already) [396] print_char_cursor#201 ← print_char_cursor#19 -Coalesced [399] print_word::w#12 ← print_word::w#2 -Coalesced (already) [400] print_char_cursor#213 ← print_char_cursor#134 -Coalesced (already) [402] print_char_cursor#227 ← print_char_cursor#19 -Coalesced [405] mulf_tables_cmp::kc_sqr#9 ← mulf_tables_cmp::kc_sqr#1 -Coalesced [406] mulf_tables_cmp::asm_sqr#7 ← mulf_tables_cmp::asm_sqr#1 -Coalesced [430] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 -Coalesced [431] mulf_init::x_255#6 ← mulf_init::x_255#1 -Coalesced [432] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 -Coalesced [433] mulf_init::dir#5 ← mulf_init::dir#4 -Coalesced (already) [434] mulf_init::dir#6 ← mulf_init::dir#2 -Coalesced [440] mulf_init::sqr#9 ← mulf_init::sqr#2 -Coalesced [441] mulf_init::x_2#8 ← mulf_init::x_2#1 -Coalesced [450] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 -Coalesced [451] mulf_init::c#6 ← mulf_init::c#1 -Coalesced [452] mulf_init::sqr#7 ← mulf_init::sqr#1 -Coalesced [453] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 -Coalesced [454] mulf_init::x_2#6 ← mulf_init::x_2#2 -Coalesced [455] mulf_init::sqr#8 ← mulf_init::sqr#4 -Coalesced (already) [456] mulf_init::x_2#7 ← mulf_init::x_2#3 -Coalesced [469] memset::dst#4 ← memset::dst#1 -Coalesced down to 38 phi equivalence classes +Coalesced [200] mul8u::a#10 ← mul8u::a#6 +Coalesced [201] mul8u::mb#6 ← mul8u::mb#0 +Coalesced [209] mul8u::res#9 ← mul8u::res#1 +Coalesced [213] mul8u::a#11 ← mul8u::a#0 +Coalesced [214] mul8u::res#7 ← mul8u::res#6 +Coalesced [215] mul8u::mb#7 ← mul8u::mb#1 +Coalesced (already) [216] mul8u::res#8 ← mul8u::res#2 +Coalesced [219] mulf8u_prepare::a#3 ← mulf8u_prepare::a#1 +Coalesced [227] mulf8u_prepared::b#3 ← mulf8u_prepared::b#1 +Coalesced [235] mulf8s_prepared::m#7 ← mulf8s_prepared::m#1 +Coalesced [241] mulf8s_prepared::m#10 ← mulf8s_prepared::m#2 +Coalesced [244] mulf8s_prepared::m#9 ← mulf8s_prepared::m#5 +Coalesced [245] mulf8s_prepared::m#8 ← mulf8s_prepared::m#0 +Coalesced [260] muls8s::return#6 ← muls8s::m#3 +Coalesced [265] muls8s::j#4 ← muls8s::j#1 +Coalesced [266] muls8s::m#11 ← muls8s::m#1 +Coalesced [270] muls8s::return#5 ← muls8s::m#5 +Coalesced [273] muls8s::i#4 ← muls8s::i#1 +Coalesced [274] muls8s::m#12 ← muls8s::m#2 +Coalesced [290] mul8u::b#4 ← mul8u::b#1 +Coalesced [291] mul8u::a#9 ← mul8u::a#2 +Coalesced [315] print_char_cursor#195 ← print_char_cursor#100 +Coalesced [317] print_line_cursor#117 ← print_line_cursor#11 +Coalesced (already) [318] print_char_cursor#206 ← print_char_cursor#134 +Coalesced [321] mul8u_compare::a#14 ← mul8u_compare::a#1 +Coalesced [322] mul8u_compare::b#12 ← mul8u_compare::b#1 +Coalesced [323] mul8u_compare::ok#5 ← mul8u_compare::ok#4 +Coalesced (already) [324] print_char_cursor#196 ← print_char_cursor#100 +Coalesced [327] print_byte::b#7 ← print_byte::b#3 +Coalesced (already) [328] print_char_cursor#215 ← print_char_cursor#134 +Coalesced (already) [330] print_char_cursor#197 ← print_char_cursor#19 +Coalesced [333] print_byte::b#8 ← print_byte::b#4 +Coalesced (already) [334] print_char_cursor#216 ← print_char_cursor#134 +Coalesced (already) [336] print_char_cursor#198 ← print_char_cursor#19 +Coalesced [339] print_word::w#8 ← print_word::w#3 +Coalesced (already) [340] print_char_cursor#209 ← print_char_cursor#134 +Coalesced (already) [342] print_char_cursor#199 ← print_char_cursor#19 +Coalesced [345] print_word::w#9 ← print_word::w#4 +Coalesced (already) [346] print_char_cursor#210 ← print_char_cursor#134 +Coalesced (already) [348] print_char_cursor#200 ← print_char_cursor#19 +Coalesced [351] print_word::w#10 ← print_word::w#5 +Coalesced (already) [352] print_char_cursor#211 ← print_char_cursor#134 +Coalesced (already) [354] print_line_cursor#118 ← print_line_cursor#11 +Coalesced (already) [355] print_char_cursor#207 ← print_char_cursor#19 +Coalesced [360] mulf8u_prepare::a#4 ← mulf8u_prepare::a#0 +Coalesced [363] mulf8u_prepared::b#4 ← mulf8u_prepared::b#0 +Coalesced [372] muls8u::return#5 ← muls8u::m#3 +Coalesced [377] muls8u::i#4 ← muls8u::i#1 +Coalesced [378] muls8u::m#6 ← muls8u::m#1 +Coalesced (already) [384] print_char_cursor#208 ← print_char_cursor#134 +Not coalescing [386] print_char_cursor#226 ← print_line_cursor#1 +Coalesced (already) [387] print_line_cursor#121 ← print_line_cursor#1 +Coalesced [394] print_word::w#11 ← print_word::w#1 +Coalesced (already) [395] print_char_cursor#212 ← print_char_cursor#134 +Coalesced (already) [397] print_char_cursor#201 ← print_char_cursor#19 +Coalesced [400] print_word::w#12 ← print_word::w#2 +Coalesced (already) [401] print_char_cursor#213 ← print_char_cursor#134 +Coalesced (already) [403] print_char_cursor#227 ← print_char_cursor#19 +Coalesced [406] mulf_tables_cmp::kc_sqr#9 ← mulf_tables_cmp::kc_sqr#1 +Coalesced [407] mulf_tables_cmp::asm_sqr#7 ← mulf_tables_cmp::asm_sqr#1 +Coalesced [431] mulf_init::sqr2_lo#6 ← mulf_init::sqr2_lo#1 +Coalesced [432] mulf_init::x_255#6 ← mulf_init::x_255#1 +Coalesced [433] mulf_init::sqr2_hi#6 ← mulf_init::sqr2_hi#1 +Coalesced [434] mulf_init::dir#5 ← mulf_init::dir#4 +Coalesced (already) [435] mulf_init::dir#6 ← mulf_init::dir#2 +Coalesced [441] mulf_init::sqr#9 ← mulf_init::sqr#2 +Coalesced [442] mulf_init::x_2#8 ← mulf_init::x_2#1 +Coalesced [451] mulf_init::sqr1_lo#6 ← mulf_init::sqr1_lo#1 +Coalesced [452] mulf_init::c#6 ← mulf_init::c#1 +Coalesced [453] mulf_init::sqr#7 ← mulf_init::sqr#1 +Coalesced [454] mulf_init::sqr1_hi#6 ← mulf_init::sqr1_hi#1 +Coalesced [455] mulf_init::x_2#6 ← mulf_init::x_2#2 +Coalesced [456] mulf_init::sqr#8 ← mulf_init::sqr#4 +Coalesced (already) [457] mulf_init::x_2#7 ← mulf_init::x_2#3 +Coalesced [470] memset::dst#4 ← memset::dst#1 +Coalesced down to 39 phi equivalence classes Culled Empty Block (label) @13 Culled Empty Block (label) @61 Culled Empty Block (label) main::@6 @@ -4437,439 +4380,440 @@ mul8s::@return: scope:[mul8s] from mul8s::@2 (word()) mul8u((byte) mul8u::a , (byte) mul8u::b) mul8u: scope:[mul8u] from mul8s mul8u_compare::@11 [148] (byte) mul8u::a#6 ← phi( mul8s/(byte) mul8u::a#1 mul8u_compare::@11/(byte) mul8u::a#2 ) - [148] (word) mul8u::mb#0 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@11/(byte) mul8u::b#1 ) + [148] (byte) mul8u::b#2 ← phi( mul8s/(byte) mul8u::b#0 mul8u_compare::@11/(byte) mul8u::b#1 ) + [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 to:mul8u::@1 mul8u::@1: scope:[mul8u] from mul8u mul8u::@3 - [149] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) - [149] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 ) - [149] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) - [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 + [150] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 ) + [150] (word) mul8u::res#2 ← phi( mul8u/(word) 0 mul8u::@3/(word) mul8u::res#6 ) + [150] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 ) + [151] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 to:mul8u::@return mul8u::@return: scope:[mul8u] from mul8u::@1 - [151] return + [152] return to:@return mul8u::@2: scope:[mul8u] from mul8u::@1 - [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 - [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 + [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 + [154] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 to:mul8u::@4 mul8u::@4: scope:[mul8u] from mul8u::@2 - [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 + [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 to:mul8u::@3 mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4 - [155] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) - [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 - [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 + [156] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 ) + [157] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 + [158] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 to:mul8u::@1 (signed word()) mulf8s((signed byte) mulf8s::a , (signed byte) mulf8s::b) mulf8s: scope:[mulf8s] from mul8s_compare::@12 - [158] phi() + [159] phi() to:mulf8s::mulf8s_prepare1 mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s - [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - [160] call mulf8u_prepare + [160] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 + [161] call mulf8u_prepare to:mulf8s::@1 mulf8s::@1: scope:[mulf8s] from mulf8s::mulf8s_prepare1 - [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 - [162] call mulf8s_prepared + [162] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 + [163] call mulf8s_prepared to:mulf8s::@2 mulf8s::@2: scope:[mulf8s] from mulf8s::@1 - [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 to:mulf8s::@return mulf8s::@return: scope:[mulf8s] from mulf8s::@2 - [164] return + [165] return to:@return (signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b) mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@1 - [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 - [166] call mulf8u_prepared - [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 + [166] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 + [167] call mulf8u_prepared + [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 to:mulf8s_prepared::@5 mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared - [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 + [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 + [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 to:mulf8s_prepared::@3 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 - [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 - [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 - [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 + [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 + [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 + [173] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 to:mulf8s_prepared::@1 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 - [173] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) - [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 + [174] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) + [175] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 to:mulf8s_prepared::@4 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 - [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 - [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) - [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 + [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 + [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) + [178] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 to:mulf8s_prepared::@2 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 - [178] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) + [179] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) to:mulf8s_prepared::@return mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 - [179] return + [180] return to:@return (word()) mulf8u_prepared((byte) mulf8u_prepared::b) mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared mulf8u::@1 - [180] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#1 mulf8u::@1/(byte) mulf8u_prepared::b#0 ) - [181] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 + [181] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte) mulf8u_prepared::b#1 mulf8u::@1/(byte) mulf8u_prepared::b#0 ) + [182] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } - [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) + [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) to:mulf8u_prepared::@return mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared - [184] return + [185] return to:@return (void()) mulf8u_prepare((byte) mulf8u_prepare::a) mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 mulf8u - [185] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#1 mulf8u/(byte) mulf8u_prepare::a#0 ) - [186] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 + [186] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte) mulf8u_prepare::a#1 mulf8u/(byte) mulf8u_prepare::a#0 ) + [187] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } to:mulf8u_prepare::@return mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare - [188] return + [189] return to:@return (signed word()) muls8s((signed byte) muls8s::a , (signed byte) muls8s::b) muls8s: scope:[muls8s] from mul8s_compare::@4 - [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 + [190] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 to:muls8s::@2 muls8s::@2: scope:[muls8s] from muls8s - [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 + [191] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 to:muls8s::@3 muls8s::@3: scope:[muls8s] from muls8s::@2 muls8s::@4 - [191] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed word) muls8s::m#1 ) - [191] (signed byte) muls8s::j#2 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed byte) muls8s::j#1 ) - [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 + [192] (signed word) muls8s::m#3 ← phi( muls8s::@2/(signed word) 0 muls8s::@4/(signed word) muls8s::m#1 ) + [192] (signed byte) muls8s::j#2 ← phi( muls8s::@2/(signed byte) 0 muls8s::@4/(signed byte) muls8s::j#1 ) + [193] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 to:muls8s::@1 muls8s::@1: scope:[muls8s] from muls8s::@2 muls8s::@3 muls8s::@5 - [193] (signed word) muls8s::return#0 ← phi( muls8s::@5/(signed word) muls8s::m#5 muls8s::@2/(signed byte) 0 muls8s::@3/(signed word) muls8s::m#3 ) + [194] (signed word) muls8s::return#0 ← phi( muls8s::@5/(signed word) muls8s::m#5 muls8s::@2/(signed word) 0 muls8s::@3/(signed word) muls8s::m#3 ) to:muls8s::@return muls8s::@return: scope:[muls8s] from muls8s::@1 - [194] return + [195] return to:@return muls8s::@4: scope:[muls8s] from muls8s::@3 - [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 - [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 + [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 + [197] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 to:muls8s::@3 muls8s::@5: scope:[muls8s] from muls8s muls8s::@6 - [197] (signed word) muls8s::m#5 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed word) muls8s::m#2 ) - [197] (signed byte) muls8s::i#2 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed byte) muls8s::i#1 ) - [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 + [198] (signed word) muls8s::m#5 ← phi( muls8s/(signed word) 0 muls8s::@6/(signed word) muls8s::m#2 ) + [198] (signed byte) muls8s::i#2 ← phi( muls8s/(signed byte) 0 muls8s::@6/(signed byte) muls8s::i#1 ) + [199] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 to:muls8s::@1 muls8s::@6: scope:[muls8s] from muls8s::@5 - [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 - [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 + [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 + [201] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 to:muls8s::@5 (void()) mul8u_compare() mul8u_compare: scope:[mul8u_compare] from main::@4 - [201] phi() + [202] phi() to:mul8u_compare::@1 mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@8 - [202] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) + [203] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) 0 mul8u_compare::@8/(byte) mul8u_compare::a#1 ) to:mul8u_compare::@2 mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 - [203] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) - [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 - [206] call muls8u - [207] (word) muls8u::return#2 ← (word) muls8u::return#0 + [204] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 ) + [205] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + [206] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 + [207] call muls8u + [208] (word) muls8u::return#2 ← (word) muls8u::return#0 to:mul8u_compare::@10 mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@2 - [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 - [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 - [211] call mulf8u - [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + [210] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 + [211] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 + [212] call mulf8u + [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 to:mul8u_compare::@11 mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10 - [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 - [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 - [216] call mul8u - [217] (word) mul8u::return#3 ← (word) mul8u::res#2 + [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + [215] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 + [216] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 + [217] call mul8u + [218] (word) mul8u::return#3 ← (word) mul8u::res#2 to:mul8u_compare::@12 mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@11 - [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 + [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 to:mul8u_compare::@6 mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@12 - [220] phi() + [221] phi() to:mul8u_compare::@3 mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@12 mul8u_compare::@6 - [221] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) - [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 + [222] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@12/(byte) 1 mul8u_compare::@6/(byte) 0 ) + [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 to:mul8u_compare::@4 mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@3 - [223] phi() + [224] phi() to:mul8u_compare::@4 mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@3 - [224] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) - [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 + [225] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@14/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte) 0 ) + [226] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 to:mul8u_compare::@7 mul8u_compare::@7: scope:[mul8u_compare] from mul8u_compare::@4 - [226] *((const byte*) BGCOL) ← (byte) 2 - [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 - [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - [232] call mul8u_error + [227] *((const byte*) BGCOL) ← (byte) 2 + [228] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 + [229] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + [233] call mul8u_error to:mul8u_compare::@return mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@13 mul8u_compare::@7 - [233] return + [234] return to:@return mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4 - [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 - [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 + [235] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 + [236] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 to:mul8u_compare::@8 mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@5 - [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 - [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 + [237] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 + [238] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 to:mul8u_compare::@9 mul8u_compare::@9: scope:[mul8u_compare] from mul8u_compare::@8 - [238] phi() - [239] call print_str + [239] phi() + [240] call print_str to:mul8u_compare::@13 mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@9 - [240] phi() - [241] call print_ln + [241] phi() + [242] call print_ln to:mul8u_compare::@return (void()) mul8u_error((byte) mul8u_error::a , (byte) mul8u_error::b , (word) mul8u_error::ms , (word) mul8u_error::mn , (word) mul8u_error::mf) mul8u_error: scope:[mul8u_error] from mul8u_compare::@7 - [242] phi() - [243] call print_str + [243] phi() + [244] call print_str to:mul8u_error::@1 mul8u_error::@1: scope:[mul8u_error] from mul8u_error - [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - [245] call print_byte + [245] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + [246] call print_byte to:mul8u_error::@2 mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1 - [246] phi() - [247] call print_str + [247] phi() + [248] call print_str to:mul8u_error::@3 mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2 - [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 - [249] call print_byte + [249] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 + [250] call print_byte to:mul8u_error::@4 mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3 - [250] phi() - [251] call print_str + [251] phi() + [252] call print_str to:mul8u_error::@5 mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4 - [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - [253] call print_word + [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + [254] call print_word to:mul8u_error::@6 mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5 - [254] phi() - [255] call print_str + [255] phi() + [256] call print_str to:mul8u_error::@7 mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6 - [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 - [257] call print_word + [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 + [258] call print_word to:mul8u_error::@8 mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7 - [258] phi() - [259] call print_str + [259] phi() + [260] call print_str to:mul8u_error::@9 mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8 - [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 - [261] call print_word + [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 + [262] call print_word to:mul8u_error::@10 mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9 - [262] phi() - [263] call print_ln + [263] phi() + [264] call print_ln to:mul8u_error::@return mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10 - [264] return + [265] return to:@return (word()) mulf8u((byte) mulf8u::a , (byte) mulf8u::b) mulf8u: scope:[mulf8u] from mul8u_compare::@10 - [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - [266] call mulf8u_prepare + [266] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + [267] call mulf8u_prepare to:mulf8u::@1 mulf8u::@1: scope:[mulf8u] from mulf8u - [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - [268] call mulf8u_prepared - [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + [268] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + [269] call mulf8u_prepared + [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 to:mulf8u::@2 mulf8u::@2: scope:[mulf8u] from mulf8u::@1 - [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 to:mulf8u::@return mulf8u::@return: scope:[mulf8u] from mulf8u::@2 - [271] return + [272] return to:@return (word()) muls8u((byte) muls8u::a , (byte) muls8u::b) muls8u: scope:[muls8u] from mul8u_compare::@2 - [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 + [273] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 to:muls8u::@2 muls8u::@2: scope:[muls8u] from muls8u muls8u::@3 - [273] (word) muls8u::m#3 ← phi( muls8u/(byte) 0 muls8u::@3/(word) muls8u::m#1 ) - [273] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) - [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 + [274] (word) muls8u::m#3 ← phi( muls8u/(word) 0 muls8u::@3/(word) muls8u::m#1 ) + [274] (byte) muls8u::i#2 ← phi( muls8u/(byte) 0 muls8u::@3/(byte) muls8u::i#1 ) + [275] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 to:muls8u::@1 muls8u::@1: scope:[muls8u] from muls8u muls8u::@2 - [275] (word) muls8u::return#0 ← phi( muls8u/(byte) 0 muls8u::@2/(word) muls8u::m#3 ) + [276] (word) muls8u::return#0 ← phi( muls8u/(word) 0 muls8u::@2/(word) muls8u::m#3 ) to:muls8u::@return muls8u::@return: scope:[muls8u] from muls8u::@1 - [276] return + [277] return to:@return muls8u::@3: scope:[muls8u] from muls8u::@2 - [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 - [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 + [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 + [279] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 to:muls8u::@2 (void()) mulf_tables_cmp() mulf_tables_cmp: scope:[mulf_tables_cmp] from main::@3 - [279] phi() + [280] phi() to:mulf_tables_cmp::@1 mulf_tables_cmp::@1: scope:[mulf_tables_cmp] from mulf_tables_cmp mulf_tables_cmp::@4 - [280] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mula_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) - [280] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mulf_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) - [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 + [281] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mula_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::asm_sqr#1 ) + [281] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte*) mulf_sqr1_lo mulf_tables_cmp::@4/(byte*) mulf_tables_cmp::kc_sqr#1 ) + [282] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 to:mulf_tables_cmp::@3 mulf_tables_cmp::@3: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [282] phi() - [283] call print_str + [283] phi() + [284] call print_str to:mulf_tables_cmp::@6 mulf_tables_cmp::@6: scope:[mulf_tables_cmp] from mulf_tables_cmp::@3 - [284] phi() - [285] call print_ln + [285] phi() + [286] call print_ln to:mulf_tables_cmp::@7 mulf_tables_cmp::@7: scope:[mulf_tables_cmp] from mulf_tables_cmp::@6 - [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 + [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 to:mulf_tables_cmp::@return mulf_tables_cmp::@return: scope:[mulf_tables_cmp] from mulf_tables_cmp::@10 mulf_tables_cmp::@7 - [287] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) - [287] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*) print_char_cursor#226 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) - [288] return + [288] (byte*) print_line_cursor#11 ← phi( mulf_tables_cmp::@7/(byte*) print_line_cursor#1 mulf_tables_cmp::@10/(byte*) 1024 ) + [288] (byte*) print_char_cursor#100 ← phi( mulf_tables_cmp::@7/(byte*) print_char_cursor#226 mulf_tables_cmp::@10/(byte*) print_char_cursor#19 ) + [289] return to:@return mulf_tables_cmp::@2: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1 - [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 + [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 to:mulf_tables_cmp::@5 mulf_tables_cmp::@5: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [290] *((const byte*) BGCOL) ← (byte) 2 - [291] call print_str + [291] *((const byte*) BGCOL) ← (byte) 2 + [292] call print_str to:mulf_tables_cmp::@8 mulf_tables_cmp::@8: scope:[mulf_tables_cmp] from mulf_tables_cmp::@5 - [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - [293] call print_word + [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + [294] call print_word to:mulf_tables_cmp::@9 mulf_tables_cmp::@9: scope:[mulf_tables_cmp] from mulf_tables_cmp::@8 - [294] phi() - [295] call print_str + [295] phi() + [296] call print_str to:mulf_tables_cmp::@10 mulf_tables_cmp::@10: scope:[mulf_tables_cmp] from mulf_tables_cmp::@9 - [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 - [297] call print_word + [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 + [298] call print_word to:mulf_tables_cmp::@return mulf_tables_cmp::@4: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2 - [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 - [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 + [299] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 + [300] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 to:mulf_tables_cmp::@1 (void()) mulf_init_asm() mulf_init_asm: scope:[mulf_init_asm] from main::@2 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } - [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) - [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) - [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) - [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) + [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) + [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) + [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) + [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) to:mulf_init_asm::@return mulf_init_asm::@return: scope:[mulf_init_asm] from mulf_init_asm - [305] return + [306] return to:@return (void()) mulf_init() mulf_init: scope:[mulf_init] from main::@1 - [306] phi() + [307] phi() to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@3 - [307] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) - [307] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) - [307] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) - [307] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) - [307] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) - [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 + [308] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::x_2#2 ) + [308] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte*) mulf_sqr1_hi+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_hi#1 ) + [308] (word) mulf_init::sqr#4 ← phi( mulf_init/(word) 0 mulf_init::@3/(word) mulf_init::sqr#1 ) + [308] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@3/(byte) mulf_init::c#1 ) + [308] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte*) mulf_sqr1_lo+(byte) 1 mulf_init::@3/(byte*) mulf_init::sqr1_lo#1 ) + [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 to:mulf_init::@5 mulf_init::@5: scope:[mulf_init] from mulf_init::@1 mulf_init::@8 - [309] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) - [309] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) - [309] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) - [309] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) - [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 + [310] (byte) mulf_init::dir#2 ← phi( mulf_init::@8/(byte) mulf_init::dir#4 mulf_init::@1/(byte) $ff ) + [310] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_hi#1 mulf_init::@1/(const byte*) mulf_sqr2_hi ) + [310] (byte) mulf_init::x_255#2 ← phi( mulf_init::@8/(byte) mulf_init::x_255#1 mulf_init::@1/(byte) -1 ) + [310] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@8/(byte*) mulf_init::sqr2_lo#1 mulf_init::@1/(const byte*) mulf_sqr2_lo ) + [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 to:mulf_init::@7 mulf_init::@7: scope:[mulf_init] from mulf_init::@5 - [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) - [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) + [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) + [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) to:mulf_init::@return mulf_init::@return: scope:[mulf_init] from mulf_init::@7 - [313] return + [314] return to:@return mulf_init::@6: scope:[mulf_init] from mulf_init::@5 - [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) - [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) - [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 - [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 - [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 + [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) + [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) + [317] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 + [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 + [319] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 to:mulf_init::@8 mulf_init::@9: scope:[mulf_init] from mulf_init::@6 - [319] phi() + [320] phi() to:mulf_init::@8 mulf_init::@8: scope:[mulf_init] from mulf_init::@6 mulf_init::@9 - [320] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) - [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 + [321] (byte) mulf_init::dir#4 ← phi( mulf_init::@9/(byte) mulf_init::dir#2 mulf_init::@6/(byte) 1 ) + [322] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 to:mulf_init::@5 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 - [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 - [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 - [324] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 + [323] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 + [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 + [325] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 to:mulf_init::@4 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 - [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 - [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 + [326] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 + [327] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 to:mulf_init::@3 mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4 - [327] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) - [327] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) - [328] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 - [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 - [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 - [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 - [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 - [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 - [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 + [328] (byte) mulf_init::x_2#2 ← phi( mulf_init::@2/(byte) mulf_init::x_2#3 mulf_init::@4/(byte) mulf_init::x_2#1 ) + [328] (word) mulf_init::sqr#3 ← phi( mulf_init::@2/(word) mulf_init::sqr#4 mulf_init::@4/(word) mulf_init::sqr#2 ) + [329] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 + [330] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 + [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 + [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 + [333] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 + [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 + [335] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 to:mulf_init::@1 (void()) print_cls() print_cls: scope:[print_cls] from main - [335] phi() - [336] call memset + [336] phi() + [337] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls - [337] return + [338] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls - [338] phi() + [339] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 - [339] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) - [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 + [340] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) + [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 - [341] return + [342] return to:@return memset::@2: scope:[memset] from memset::@1 - [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 - [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 + [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 + [344] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 @@ -4934,12 +4878,13 @@ VARIABLE REGISTER WEIGHTS (byte) mul8u::a#1 2.0 (byte) mul8u::a#2 101.0 (byte) mul8u::a#3 667.6666666666667 -(byte) mul8u::a#6 105.0 +(byte) mul8u::a#6 52.5 (byte) mul8u::b (byte) mul8u::b#0 4.0 (byte) mul8u::b#1 202.0 +(byte) mul8u::b#2 103.0 (word) mul8u::mb -(word) mul8u::mb#0 105.0 +(word) mul8u::mb#0 4.0 (word) mul8u::mb#1 2002.0 (word) mul8u::mb#2 429.2857142857143 (word) mul8u::res @@ -5162,8 +5107,6 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w#5 4.0 (word) print_word::w#6 5.333333333333333 -Not consolidating phi with different size mul8u::mb#0 mul8u::b#0 -Not consolidating phi with different size mul8u::mb#0 mul8u::b#1 Initial phi equivalence classes [ mul8s_compare::a#10 mul8s_compare::a#1 ] [ mul8s_compare::b#10 mul8s_compare::b#1 ] @@ -5177,8 +5120,7 @@ Initial phi equivalence classes [ print_str::str#16 print_str::str#18 print_str::str#0 ] [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] -[ mul8u::b#0 ] -[ mul8u::b#1 ] +[ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] @@ -5270,8 +5212,7 @@ Complete equivalence classes [ print_str::str#16 print_str::str#18 print_str::str#0 ] [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] -[ mul8u::b#0 ] -[ mul8u::b#1 ] +[ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] @@ -5362,86 +5303,85 @@ Allocated zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print_char_curs Allocated zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] Allocated zp[1]:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] Allocated zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] -Allocated zp[1]:20 [ mul8u::b#0 ] -Allocated zp[1]:21 [ mul8u::b#1 ] -Allocated zp[1]:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -Allocated zp[2]:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] -Allocated zp[2]:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -Allocated zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] -Allocated zp[1]:29 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] -Allocated zp[1]:30 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -Allocated zp[1]:31 [ muls8s::j#2 muls8s::j#1 ] -Allocated zp[2]:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] -Allocated zp[1]:34 [ muls8s::i#2 muls8s::i#1 ] -Allocated zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Allocated zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Allocated zp[1]:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] -Allocated zp[1]:38 [ muls8u::i#2 muls8u::i#1 ] -Allocated zp[2]:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] -Allocated zp[2]:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] -Allocated zp[2]:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] -Allocated zp[2]:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] -Allocated zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] -Allocated zp[2]:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] -Allocated zp[1]:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Allocated zp[2]:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] -Allocated zp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Allocated zp[2]:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] -Allocated zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Allocated zp[2]:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] -Allocated zp[2]:59 [ memset::dst#2 memset::dst#1 ] -Allocated zp[1]:61 [ muls8s::a#0 ] -Allocated zp[1]:62 [ muls8s::b#0 ] -Allocated zp[2]:63 [ muls8s::return#2 ] -Allocated zp[2]:65 [ mul8s_compare::ms#0 ] -Allocated zp[1]:67 [ mulf8s::a#0 ] -Allocated zp[1]:68 [ mulf8s::b#0 ] -Allocated zp[2]:69 [ mulf8s::return#2 ] -Allocated zp[2]:71 [ mul8s_compare::mf#0 ] -Allocated zp[1]:73 [ mul8s::a#0 ] -Allocated zp[1]:74 [ mul8s::b#0 ] -Allocated zp[2]:75 [ mul8s_compare::mn#0 ] -Allocated zp[1]:77 [ mul8s_error::a#0 ] -Allocated zp[1]:78 [ mul8s_error::b#0 ] -Allocated zp[2]:79 [ mul8s_error::ms#0 ] -Allocated zp[2]:81 [ mul8s_error::mn#0 ] -Allocated zp[2]:83 [ mul8s_error::mf#0 ] -Allocated zp[1]:85 [ print_byte::$0 ] -Allocated zp[1]:86 [ print_byte::$2 ] -Allocated zp[2]:87 [ mul8u::return#2 ] -Allocated zp[1]:89 [ mul8s::$9 ] -Allocated zp[1]:90 [ mul8s::$16 ] -Allocated zp[1]:91 [ mul8s::$13 ] -Allocated zp[1]:92 [ mul8s::$17 ] -Allocated zp[1]:93 [ mul8u::$1 ] -Allocated zp[1]:94 [ mulf8s_prepared::b#0 ] -Allocated zp[2]:95 [ mulf8s::return#0 ] -Allocated zp[2]:97 [ mulf8u_prepared::return#3 ] -Allocated zp[1]:99 [ mulf8s_prepared::$8 ] -Allocated zp[1]:100 [ mulf8s_prepared::$15 ] -Allocated zp[1]:101 [ mulf8s_prepared::$12 ] -Allocated zp[1]:102 [ mulf8s_prepared::$16 ] -Allocated zp[2]:103 [ mulf8u_prepared::return#0 ] -Allocated zp[1]:105 [ muls8u::a#0 ] -Allocated zp[1]:106 [ muls8u::b#0 ] -Allocated zp[2]:107 [ muls8u::return#2 ] -Allocated zp[2]:109 [ mul8u_compare::ms#0 ] -Allocated zp[1]:111 [ mulf8u::a#0 ] -Allocated zp[1]:112 [ mulf8u::b#0 ] -Allocated zp[2]:113 [ mulf8u::return#2 ] -Allocated zp[2]:115 [ mul8u_compare::mf#0 ] -Allocated zp[2]:117 [ mul8u::return#3 ] -Allocated zp[2]:119 [ mul8u_compare::mn#0 ] -Allocated zp[1]:121 [ mul8u_error::a#0 ] -Allocated zp[1]:122 [ mul8u_error::b#0 ] -Allocated zp[2]:123 [ mul8u_error::ms#0 ] -Allocated zp[2]:125 [ mul8u_error::mn#0 ] -Allocated zp[2]:127 [ mul8u_error::mf#0 ] -Allocated zp[2]:129 [ mulf8u_prepared::return#2 ] -Allocated zp[2]:131 [ mulf8u::return#0 ] -Allocated zp[1]:133 [ mulf_init::$1 ] -Allocated zp[1]:134 [ mulf_init::$4 ] -Allocated zp[1]:135 [ mulf_init::$5 ] +Allocated zp[1]:20 [ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] +Allocated zp[1]:21 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] +Allocated zp[2]:22 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] +Allocated zp[2]:24 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] +Allocated zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] +Allocated zp[1]:28 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] +Allocated zp[1]:29 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] +Allocated zp[1]:30 [ muls8s::j#2 muls8s::j#1 ] +Allocated zp[2]:31 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] +Allocated zp[1]:33 [ muls8s::i#2 muls8s::i#1 ] +Allocated zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Allocated zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Allocated zp[1]:36 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +Allocated zp[1]:37 [ muls8u::i#2 muls8u::i#1 ] +Allocated zp[2]:38 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] +Allocated zp[2]:40 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] +Allocated zp[2]:42 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] +Allocated zp[2]:44 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] +Allocated zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] +Allocated zp[2]:47 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Allocated zp[1]:49 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Allocated zp[2]:50 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] +Allocated zp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Allocated zp[2]:53 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] +Allocated zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] +Allocated zp[2]:56 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] +Allocated zp[2]:58 [ memset::dst#2 memset::dst#1 ] +Allocated zp[1]:60 [ muls8s::a#0 ] +Allocated zp[1]:61 [ muls8s::b#0 ] +Allocated zp[2]:62 [ muls8s::return#2 ] +Allocated zp[2]:64 [ mul8s_compare::ms#0 ] +Allocated zp[1]:66 [ mulf8s::a#0 ] +Allocated zp[1]:67 [ mulf8s::b#0 ] +Allocated zp[2]:68 [ mulf8s::return#2 ] +Allocated zp[2]:70 [ mul8s_compare::mf#0 ] +Allocated zp[1]:72 [ mul8s::a#0 ] +Allocated zp[1]:73 [ mul8s::b#0 ] +Allocated zp[2]:74 [ mul8s_compare::mn#0 ] +Allocated zp[1]:76 [ mul8s_error::a#0 ] +Allocated zp[1]:77 [ mul8s_error::b#0 ] +Allocated zp[2]:78 [ mul8s_error::ms#0 ] +Allocated zp[2]:80 [ mul8s_error::mn#0 ] +Allocated zp[2]:82 [ mul8s_error::mf#0 ] +Allocated zp[1]:84 [ print_byte::$0 ] +Allocated zp[1]:85 [ print_byte::$2 ] +Allocated zp[2]:86 [ mul8u::return#2 ] +Allocated zp[1]:88 [ mul8s::$9 ] +Allocated zp[1]:89 [ mul8s::$16 ] +Allocated zp[1]:90 [ mul8s::$13 ] +Allocated zp[1]:91 [ mul8s::$17 ] +Allocated zp[1]:92 [ mul8u::$1 ] +Allocated zp[1]:93 [ mulf8s_prepared::b#0 ] +Allocated zp[2]:94 [ mulf8s::return#0 ] +Allocated zp[2]:96 [ mulf8u_prepared::return#3 ] +Allocated zp[1]:98 [ mulf8s_prepared::$8 ] +Allocated zp[1]:99 [ mulf8s_prepared::$15 ] +Allocated zp[1]:100 [ mulf8s_prepared::$12 ] +Allocated zp[1]:101 [ mulf8s_prepared::$16 ] +Allocated zp[2]:102 [ mulf8u_prepared::return#0 ] +Allocated zp[1]:104 [ muls8u::a#0 ] +Allocated zp[1]:105 [ muls8u::b#0 ] +Allocated zp[2]:106 [ muls8u::return#2 ] +Allocated zp[2]:108 [ mul8u_compare::ms#0 ] +Allocated zp[1]:110 [ mulf8u::a#0 ] +Allocated zp[1]:111 [ mulf8u::b#0 ] +Allocated zp[2]:112 [ mulf8u::return#2 ] +Allocated zp[2]:114 [ mul8u_compare::mf#0 ] +Allocated zp[2]:116 [ mul8u::return#3 ] +Allocated zp[2]:118 [ mul8u_compare::mn#0 ] +Allocated zp[1]:120 [ mul8u_error::a#0 ] +Allocated zp[1]:121 [ mul8u_error::b#0 ] +Allocated zp[2]:122 [ mul8u_error::ms#0 ] +Allocated zp[2]:124 [ mul8u_error::mn#0 ] +Allocated zp[2]:126 [ mul8u_error::mf#0 ] +Allocated zp[2]:128 [ mulf8u_prepared::return#2 ] +Allocated zp[2]:130 [ mulf8u::return#0 ] +Allocated zp[1]:132 [ mulf_init::$1 ] +Allocated zp[1]:133 [ mulf_init::$4 ] +Allocated zp[1]:134 [ mulf_init::$5 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -5475,7 +5415,7 @@ main: { lda #5 sta BGCOL // [5] call print_cls - // [335] phi from main to print_cls [phi:main->print_cls] + // [336] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -5484,7 +5424,7 @@ main: { // main::@1 __b1: // [7] call mulf_init - // [306] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [307] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] mulf_init_from___b1: jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -5500,7 +5440,7 @@ main: { // main::@3 __b3: // [11] call mulf_tables_cmp - // [279] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] + // [280] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] mulf_tables_cmp_from___b3: jsr mulf_tables_cmp // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -5509,7 +5449,7 @@ main: { // main::@4 __b4: // [13] call mul8u_compare - // [201] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] + // [202] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] mul8u_compare_from___b4: jsr mul8u_compare // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -5530,9 +5470,9 @@ main: { // mul8s_compare // Perform all possible signed byte multiplications (slow and fast) and compare the results mul8s_compare: { - .label ms = $41 - .label mf = $47 - .label mn = $4b + .label ms = $40 + .label mf = $46 + .label mn = $4a .label a = 2 .label b = 3 .label ok = 4 @@ -5633,7 +5573,7 @@ mul8s_compare: { lda.z b sta.z mulf8s.b // [35] call mulf8s - // [158] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] + // [159] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] mulf8s_from___b12: jsr mulf8s // [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 -- vwsz1=vwsz2 @@ -5763,13 +5703,13 @@ mul8s_compare: { .byte 0 } // mul8s_error -// mul8s_error(signed byte zp($4d) a, signed byte zp($4e) b, signed word zp($4f) ms, signed word zp($51) mn, signed word zp($53) mf) +// mul8s_error(signed byte zp($4c) a, signed byte zp($4d) b, signed word zp($4e) ms, signed word zp($50) mn, signed word zp($52) mf) mul8s_error: { - .label a = $4d - .label b = $4e - .label ms = $4f - .label mn = $51 - .label mf = $53 + .label a = $4c + .label b = $4d + .label ms = $4e + .label mn = $50 + .label mf = $52 // [57] (byte*) print_char_cursor#190 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor @@ -6084,8 +6024,8 @@ print_word: { // Print a byte as HEX // print_byte(byte zp($c) b) print_byte: { - .label __0 = $55 - .label __2 = $56 + .label __0 = $54 + .label __2 = $55 .label b = $c // [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b @@ -6238,15 +6178,15 @@ print_sbyte: { // mul8s // Multiply of two signed bytes to a signed word // Fixes offsets introduced by using unsigned multiplication -// mul8s(signed byte zp($49) a, signed byte zp($4a) b) +// mul8s(signed byte zp($48) a, signed byte zp($49) b) mul8s: { - .label __9 = $59 - .label __13 = $5b - .label __16 = $5a - .label __17 = $5c + .label __9 = $58 + .label __13 = $5a + .label __16 = $59 + .label __17 = $5b .label m = $12 - .label a = $49 - .label b = $4a + .label a = $48 + .label b = $49 // [132] (byte) mul8u::a#1 ← (byte)(signed byte) mul8s::a#0 -- vbuz1=vbuz2 lda.z a sta.z mul8u.a @@ -6257,11 +6197,7 @@ mul8s: { // [148] phi from mul8s to mul8u [phi:mul8s->mul8u] mul8u_from_mul8s: // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8s->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- vwuz1=vbuz2 - lda.z mul8u.b - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [148] phi (byte) mul8u::b#2 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- register_copy jsr mul8u // [135] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res @@ -6334,51 +6270,55 @@ mul8s: { } // mul8u // Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word -// mul8u(byte zp($16) a, byte zp($14) b) +// mul8u(byte zp($15) a, byte zp($14) b) mul8u: { - .label __1 = $5d - .label mb = $19 - .label a = $16 - .label res = $17 + .label __1 = $5c + .label mb = $18 + .label a = $15 + .label res = $16 .label b = $14 - .label return = $57 - .label b_1 = $15 - .label return_1 = $75 - // [149] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + .label return = $56 + .label return_1 = $74 + // [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 -- vwuz1=_word_vbuz2 + lda.z b + sta.z mb + lda #0 + sta.z mb+1 + // [150] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [150] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [150] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 sta.z res+1 - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [150] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy jmp __b1 // mul8u::@1 __b1: - // [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 + // [151] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1 lda.z a cmp #0 bne __b2 jmp __breturn // mul8u::@return __breturn: - // [151] return + // [152] return rts // mul8u::@2 __b2: - // [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and.z a sta.z __1 - // [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 + // [154] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul8u::@4 __b4: - // [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda.z res clc adc.z mb @@ -6386,56 +6326,56 @@ mul8u: { lda.z res+1 adc.z mb+1 sta.z res+1 - // [155] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [156] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] __b3_from___b2: __b3_from___b4: - // [155] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [156] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy jmp __b3 // mul8u::@3 __b3: - // [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 + // [157] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z a - // [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [158] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z mb rol.z mb+1 - // [149] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [150] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] __b1_from___b3: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [150] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [150] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [150] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp __b1 } // mulf8s // Fast multiply two signed bytes to a word result -// mulf8s(signed byte zp($43) a, signed byte zp($44) b) +// mulf8s(signed byte zp($42) a, signed byte zp($43) b) mulf8s: { - .label return = $5f - .label a = $43 - .label b = $44 - .label return_1 = $45 + .label return = $5e + .label a = $42 + .label b = $43 + .label return_1 = $44 jmp mulf8s_prepare1 // mulf8s::mulf8s_prepare1 mulf8s_prepare1: - // [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 -- vbuz1=vbuz2 + // [160] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 -- vbuz1=vbuz2 lda.z a sta.z mulf8u_prepare.a - // [160] call mulf8u_prepare - // [185] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] + // [161] call mulf8u_prepare + // [186] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] mulf8u_prepare_from_mulf8s_prepare1: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy + // [186] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy jsr mulf8u_prepare jmp __b1 // mulf8s::@1 __b1: - // [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsz2 + // [162] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsz2 lda.z b sta.z mulf8s_prepared.b - // [162] call mulf8s_prepared + // [163] call mulf8s_prepared jsr mulf8s_prepared jmp __b2 // mulf8s::@2 __b2: - // [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 + // [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 -- vwsz1=vwsz2 lda.z mulf8s_prepared.m sta.z return lda.z mulf8s_prepared.m+1 @@ -6443,30 +6383,30 @@ mulf8s: { jmp __breturn // mulf8s::@return __breturn: - // [164] return + // [165] return rts } // mulf8s_prepared // Calculate fast multiply with a prepared unsigned byte to a word result // The prepared number is set by calling mulf8s_prepare(byte a) -// mulf8s_prepared(signed byte zp($5e) b) +// mulf8s_prepared(signed byte zp($5d) b) mulf8s_prepared: { .label memA = $fd - .label __8 = $63 - .label __12 = $65 - .label __15 = $64 - .label __16 = $66 - .label m = $1b - .label b = $5e - // [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2 + .label __8 = $62 + .label __12 = $64 + .label __15 = $63 + .label __16 = $65 + .label m = $1a + .label b = $5d + // [166] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2 lda.z b sta.z mulf8u_prepared.b - // [166] call mulf8u_prepared - // [180] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] + // [167] call mulf8u_prepared + // [181] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] mulf8u_prepared_from_mulf8s_prepared: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy + // [181] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy jsr mulf8u_prepared - // [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 + // [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 lda.z mulf8u_prepared.return sta.z mulf8u_prepared.return_2 lda.z mulf8u_prepared.return+1 @@ -6474,79 +6414,79 @@ mulf8s_prepared: { jmp __b5 // mulf8s_prepared::@5 __b5: - // [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 -- vwuz1=vwuz2 + // [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 -- vwuz1=vwuz2 lda.z mulf8u_prepared.return_2 sta.z m lda.z mulf8u_prepared.return_2+1 sta.z m+1 - // [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1_from___b5 jmp __b3 // mulf8s_prepared::@3 __b3: - // [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 + // [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuz1=_hi_vwuz2 lda.z m+1 sta.z __8 - // [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2_minus_vbuz3 + // [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z __8 sec sbc.z b sta.z __15 - // [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 + // [173] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuz2 lda.z __15 sta.z m+1 - // [173] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [174] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] __b1_from___b3: __b1_from___b5: - // [173] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [174] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy jmp __b1 // mulf8s_prepared::@1 __b1: - // [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [175] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2_from___b1 jmp __b4 // mulf8s_prepared::@4 __b4: - // [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 + // [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuz1=_hi_vwuz2 lda.z m+1 sta.z __12 - // [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuz1=vbuz2_minus__deref_pbuc1 + // [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuz1=vbuz2_minus__deref_pbuc1 lda.z __12 sec sbc memA sta.z __16 - // [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 + // [178] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuz2 lda.z __16 sta.z m+1 - // [178] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [179] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] __b2_from___b1: __b2_from___b4: - // [178] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [179] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy jmp __b2 // mulf8s_prepared::@2 __b2: jmp __breturn // mulf8s_prepared::@return __breturn: - // [179] return + // [180] return rts } // mulf8u_prepared // Calculate fast multiply with a prepared unsigned byte to a word result // The prepared number is set by calling mulf8u_prepare(byte a) -// mulf8u_prepared(byte zp($1d) b) +// mulf8u_prepared(byte zp($1c) b) mulf8u_prepared: { .label resL = $fe .label memB = $ff - .label return = $67 - .label b = $1d - .label return_1 = $81 - .label return_2 = $61 - // [181] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuz1 + .label return = $66 + .label b = $1c + .label return_1 = $80 + .label return_2 = $60 + // [182] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuz1 lda.z b sta memB // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } @@ -6562,7 +6502,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB @@ -6570,16 +6510,16 @@ mulf8u_prepared: { jmp __breturn // mulf8u_prepared::@return __breturn: - // [184] return + // [185] return rts } // mulf8u_prepare // Prepare for fast multiply with an unsigned byte to a word result -// mulf8u_prepare(byte zp($1e) a) +// mulf8u_prepare(byte zp($1d) a) mulf8u_prepare: { .label memA = $fd - .label a = $1e - // [186] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuz1 + .label a = $1d + // [187] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuz1 lda.z a sta memA // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } @@ -6592,56 +6532,56 @@ mulf8u_prepare: { jmp __breturn // mulf8u_prepare::@return __breturn: - // [188] return + // [189] return rts } // muls8s // Slow multiplication of signed bytes // Perform a signed multiplication by repeated addition/subtraction -// muls8s(signed byte zp($3d) a, signed byte zp($3e) b) +// muls8s(signed byte zp($3c) a, signed byte zp($3d) b) muls8s: { - .label m = $20 - .label j = $1f - .label return = $20 - .label i = $22 - .label a = $3d - .label b = $3e - .label return_1 = $3f - // [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 + .label m = $1f + .label j = $1e + .label return = $1f + .label i = $21 + .label a = $3c + .label b = $3d + .label return_1 = $3e + // [190] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 lda.z a bmi __b5_from_muls8s jmp __b2 // muls8s::@2 __b2: - // [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 + // [191] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 lda.z a cmp #1 bmi __b1_from___b2 - // [191] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] + // [192] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] __b3_from___b2: - // [191] phi (signed word) muls8s::m#3 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vbsc1 + // [192] phi (signed word) muls8s::m#3 = (signed word) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vwsc1 lda #<0 sta.z m lda #>0 sta.z m+1 - // [191] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsz1=vbsc1 + // [192] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsz1=vbsc1 lda #0 sta.z j jmp __b3 // muls8s::@3 __b3: - // [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsz1_neq_vbsz2_then_la1 + // [193] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsz1_neq_vbsz2_then_la1 lda.z j cmp.z a bne __b4 - // [193] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] + // [194] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] __b1_from___b3: __b1_from___b5: - // [193] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy + // [194] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy jmp __b1 - // [193] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] + // [194] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] __b1_from___b2: - // [193] phi (signed word) muls8s::return#0 = (signed byte) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vbsc1 + // [194] phi (signed word) muls8s::return#0 = (signed word) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vwsc1 lda #<0 sta.z return lda #>0 @@ -6652,11 +6592,11 @@ muls8s: { jmp __breturn // muls8s::@return __breturn: - // [194] return + // [195] return rts // muls8s::@4 __b4: - // [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsz2 + // [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsz2 lda.z b sta.z $fe ora #$7f @@ -6671,34 +6611,34 @@ muls8s: { lda.z m+1 adc.z $ff sta.z m+1 - // [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsz1=_inc_vbsz1 + // [197] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsz1=_inc_vbsz1 inc.z j - // [191] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] + // [192] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] __b3_from___b4: - // [191] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy - // [191] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy + // [192] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy + // [192] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy jmp __b3 - // [197] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] + // [198] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] __b5_from_muls8s: - // [197] phi (signed word) muls8s::m#5 = (signed byte) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vbsc1 + // [198] phi (signed word) muls8s::m#5 = (signed word) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vwsc1 lda #<0 sta.z m lda #>0 sta.z m+1 - // [197] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsz1=vbsc1 + // [198] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsz1=vbsc1 lda #0 sta.z i jmp __b5 // muls8s::@5 __b5: - // [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsz1_neq_vbsz2_then_la1 + // [199] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsz1_neq_vbsz2_then_la1 lda.z i cmp.z a bne __b6 jmp __b1_from___b5 // muls8s::@6 __b6: - // [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsz2 + // [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsz2 lda.z b sta.z $fe ora #$7f @@ -6713,56 +6653,56 @@ muls8s: { lda.z m+1 sbc.z $ff sta.z m+1 - // [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsz1=_dec_vbsz1 + // [201] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsz1=_dec_vbsz1 dec.z i - // [197] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] + // [198] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] __b5_from___b6: - // [197] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy - // [197] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy + // [198] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy + // [198] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy jmp __b5 } // mul8u_compare // Perform all possible byte multiplications (slow and fast) and compare the results mul8u_compare: { - .label ms = $6d - .label mf = $73 - .label mn = $77 - .label b = $24 - .label a = $23 - .label ok = $25 - // [202] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] + .label ms = $6c + .label mf = $72 + .label mn = $76 + .label b = $23 + .label a = $22 + .label ok = $24 + // [203] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] __b1_from_mul8u_compare: - // [202] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 + // [203] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 lda #0 sta.z a jmp __b1 - // [202] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] + // [203] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] __b1_from___b8: - // [202] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy + // [203] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy jmp __b1 // mul8u_compare::@1 __b1: - // [203] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] + // [204] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] __b2_from___b1: - // [203] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 + // [204] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 lda #0 sta.z b jmp __b2 - // [203] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] + // [204] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] __b2_from___b5: - // [203] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy + // [204] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy jmp __b2 // mul8u_compare::@2 __b2: - // [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + // [205] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 lda.z a sta.z muls8u.a - // [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + // [206] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 lda.z b sta.z muls8u.b - // [206] call muls8u + // [207] call muls8u jsr muls8u - // [207] (word) muls8u::return#2 ← (word) muls8u::return#0 -- vwuz1=vwuz2 + // [208] (word) muls8u::return#2 ← (word) muls8u::return#0 -- vwuz1=vwuz2 lda.z muls8u.return sta.z muls8u.return_1 lda.z muls8u.return+1 @@ -6770,20 +6710,20 @@ mul8u_compare: { jmp __b10 // mul8u_compare::@10 __b10: - // [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 -- vwuz1=vwuz2 + // [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 -- vwuz1=vwuz2 lda.z muls8u.return_1 sta.z ms lda.z muls8u.return_1+1 sta.z ms+1 - // [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + // [210] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 lda.z a sta.z mulf8u.a - // [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + // [211] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 lda.z b sta.z mulf8u.b - // [211] call mulf8u + // [212] call mulf8u jsr mulf8u - // [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 -- vwuz1=vwuz2 + // [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 -- vwuz1=vwuz2 lda.z mulf8u.return sta.z mulf8u.return_1 lda.z mulf8u.return+1 @@ -6791,28 +6731,24 @@ mul8u_compare: { jmp __b11 // mul8u_compare::@11 __b11: - // [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 -- vwuz1=vwuz2 + // [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 -- vwuz1=vwuz2 lda.z mulf8u.return_1 sta.z mf lda.z mulf8u.return_1+1 sta.z mf+1 - // [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + // [215] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 lda.z a sta.z mul8u.a - // [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + // [216] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 lda.z b - sta.z mul8u.b_1 - // [216] call mul8u + sta.z mul8u.b + // [217] call mul8u // [148] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] mul8u_from___b11: // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mul8u_compare::@11->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- vwuz1=vbuz2 - lda.z mul8u.b_1 - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [148] phi (byte) mul8u::b#2 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- register_copy jsr mul8u - // [217] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 + // [218] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2 lda.z mul8u.res sta.z mul8u.return_1 lda.z mul8u.res+1 @@ -6820,12 +6756,12 @@ mul8u_compare: { jmp __b12 // mul8u_compare::@12 __b12: - // [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 -- vwuz1=vwuz2 + // [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 -- vwuz1=vwuz2 lda.z mul8u.return_1 sta.z mn lda.z mul8u.return_1+1 sta.z mn+1 - // [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 + // [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 lda.z ms cmp.z mf bne !+ @@ -6833,26 +6769,26 @@ mul8u_compare: { cmp.z mf+1 beq __b3_from___b12 !: - // [220] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] + // [221] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] __b6_from___b12: jmp __b6 // mul8u_compare::@6 __b6: - // [221] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] + // [222] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] __b3_from___b6: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuz1=vbuc1 + // [222] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuz1=vbuc1 lda #0 sta.z ok jmp __b3 - // [221] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] + // [222] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] __b3_from___b12: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuz1=vbuc1 + // [222] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuz1=vbuc1 lda #1 sta.z ok jmp __b3 // mul8u_compare::@3 __b3: - // [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 + // [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 lda.z ms cmp.z mn bne !+ @@ -6860,86 +6796,86 @@ mul8u_compare: { cmp.z mn+1 beq __b14_from___b3 !: - // [224] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] + // [225] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] __b4_from___b3: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuz1=vbuc1 + // [225] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuz1=vbuc1 lda #0 sta.z ok jmp __b4 - // [223] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] + // [224] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] __b14_from___b3: jmp __b14 // mul8u_compare::@14 __b14: - // [224] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] + // [225] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] __b4_from___b14: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy + // [225] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy jmp __b4 // mul8u_compare::@4 __b4: - // [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuz1_neq_0_then_la1 + // [226] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuz1_neq_0_then_la1 lda.z ok cmp #0 bne __b5 jmp __b7 // mul8u_compare::@7 __b7: - // [226] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [227] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 + // [228] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuz1=vbuz2 lda.z a sta.z mul8u_error.a - // [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 + // [229] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 -- vbuz1=vbuz2 lda.z b sta.z mul8u_error.b - // [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 -- vwuz1=vwuz2 + // [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 -- vwuz1=vwuz2 lda.z ms sta.z mul8u_error.ms lda.z ms+1 sta.z mul8u_error.ms+1 - // [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 -- vwuz1=vwuz2 + // [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 -- vwuz1=vwuz2 lda.z mn sta.z mul8u_error.mn lda.z mn+1 sta.z mul8u_error.mn+1 - // [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 -- vwuz1=vwuz2 + // [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 -- vwuz1=vwuz2 lda.z mf sta.z mul8u_error.mf lda.z mf+1 sta.z mul8u_error.mf+1 - // [232] call mul8u_error - // [242] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] + // [233] call mul8u_error + // [243] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] mul8u_error_from___b7: jsr mul8u_error jmp __breturn // mul8u_compare::@return __breturn: - // [233] return + // [234] return rts // mul8u_compare::@5 __b5: - // [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 + // [235] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 inc.z b - // [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 + // [236] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 lda.z b cmp #0 bne __b2_from___b5 jmp __b8 // mul8u_compare::@8 __b8: - // [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 + // [237] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 inc.z a - // [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 + // [238] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 lda.z a cmp #0 bne __b1_from___b8 - // [238] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] + // [239] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] __b9_from___b8: jmp __b9 // mul8u_compare::@9 __b9: - // [239] call print_str + // [240] call print_str // [114] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] print_str_from___b9: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy @@ -6949,12 +6885,12 @@ mul8u_compare: { lda #>str sta.z print_str.str+1 jsr print_str - // [240] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] + // [241] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] __b13_from___b9: jmp __b13 // mul8u_compare::@13 __b13: - // [241] call print_ln + // [242] call print_ln // [80] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] print_ln_from___b13: // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy @@ -6965,14 +6901,14 @@ mul8u_compare: { .byte 0 } // mul8u_error -// mul8u_error(byte zp($79) a, byte zp($7a) b, word zp($7b) ms, word zp($7d) mn, word zp($7f) mf) +// mul8u_error(byte zp($78) a, byte zp($79) b, word zp($7a) ms, word zp($7c) mn, word zp($7e) mf) mul8u_error: { - .label a = $79 - .label b = $7a - .label ms = $7b - .label mn = $7d - .label mf = $7f - // [243] call print_str + .label a = $78 + .label b = $79 + .label ms = $7a + .label mn = $7c + .label mf = $7e + // [244] call print_str // [114] phi from mul8u_error to print_str [phi:mul8u_error->print_str] print_str_from_mul8u_error: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy @@ -6985,21 +6921,21 @@ mul8u_error: { jmp __b1 // mul8u_error::@1 __b1: - // [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 -- vbuz1=vbuz2 + // [245] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 -- vbuz1=vbuz2 lda.z a sta.z print_byte.b - // [245] call print_byte + // [246] call print_byte // [106] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] print_byte_from___b1: // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy jsr print_byte - // [246] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] + // [247] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] __b2_from___b1: jmp __b2 // mul8u_error::@2 __b2: - // [247] call print_str + // [248] call print_str // [114] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] print_str_from___b2: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy @@ -7012,21 +6948,21 @@ mul8u_error: { jmp __b3 // mul8u_error::@3 __b3: - // [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuz1=vbuz2 + // [249] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuz1=vbuz2 lda.z b sta.z print_byte.b - // [249] call print_byte + // [250] call print_byte // [106] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] print_byte_from___b3: // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy jsr print_byte - // [250] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] + // [251] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] __b4_from___b3: jmp __b4 // mul8u_error::@4 __b4: - // [251] call print_str + // [252] call print_str // [114] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] print_str_from___b4: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy @@ -7039,23 +6975,23 @@ mul8u_error: { jmp __b5 // mul8u_error::@5 __b5: - // [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 -- vwuz1=vwuz2 + // [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 -- vwuz1=vwuz2 lda.z ms sta.z print_word.w lda.z ms+1 sta.z print_word.w+1 - // [253] call print_word + // [254] call print_word // [100] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] print_word_from___b5: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@5->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#1] -- register_copy jsr print_word - // [254] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] + // [255] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] __b6_from___b5: jmp __b6 // mul8u_error::@6 __b6: - // [255] call print_str + // [256] call print_str // [114] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] print_str_from___b6: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy @@ -7068,23 +7004,23 @@ mul8u_error: { jmp __b7 // mul8u_error::@7 __b7: - // [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 + // [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 lda.z mn sta.z print_word.w lda.z mn+1 sta.z print_word.w+1 - // [257] call print_word + // [258] call print_word // [100] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] print_word_from___b7: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@7->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#1] -- register_copy jsr print_word - // [258] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] + // [259] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] __b8_from___b7: jmp __b8 // mul8u_error::@8 __b8: - // [259] call print_str + // [260] call print_str // [114] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] print_str_from___b8: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy @@ -7097,23 +7033,23 @@ mul8u_error: { jmp __b9 // mul8u_error::@9 __b9: - // [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 + // [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 lda.z mf sta.z print_word.w lda.z mf+1 sta.z print_word.w+1 - // [261] call print_word + // [262] call print_word // [100] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] print_word_from___b9: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@9->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#1] -- register_copy jsr print_word - // [262] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] + // [263] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] __b10_from___b9: jmp __b10 // mul8u_error::@10 __b10: - // [263] call print_ln + // [264] call print_ln // [80] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] print_ln_from___b10: // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy @@ -7122,39 +7058,39 @@ mul8u_error: { jmp __breturn // mul8u_error::@return __breturn: - // [264] return + // [265] return rts str: .text "multiply mismatch " .byte 0 } // mulf8u // Fast multiply two unsigned bytes to a word result -// mulf8u(byte zp($6f) a, byte zp($70) b) +// mulf8u(byte zp($6e) a, byte zp($6f) b) mulf8u: { - .label return = $83 - .label a = $6f - .label b = $70 - .label return_1 = $71 - // [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 -- vbuz1=vbuz2 + .label return = $82 + .label a = $6e + .label b = $6f + .label return_1 = $70 + // [266] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 -- vbuz1=vbuz2 lda.z a sta.z mulf8u_prepare.a - // [266] call mulf8u_prepare - // [185] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] + // [267] call mulf8u_prepare + // [186] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] mulf8u_prepare_from_mulf8u: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy + // [186] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy jsr mulf8u_prepare jmp __b1 // mulf8u::@1 __b1: - // [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 -- vbuz1=vbuz2 + // [268] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 -- vbuz1=vbuz2 lda.z b sta.z mulf8u_prepared.b - // [268] call mulf8u_prepared - // [180] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] + // [269] call mulf8u_prepared + // [181] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] mulf8u_prepared_from___b1: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy + // [181] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy jsr mulf8u_prepared - // [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 + // [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 -- vwuz1=vwuz2 lda.z mulf8u_prepared.return sta.z mulf8u_prepared.return_1 lda.z mulf8u_prepared.return+1 @@ -7162,7 +7098,7 @@ mulf8u: { jmp __b2 // mulf8u::@2 __b2: - // [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 + // [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 -- vwuz1=vwuz2 lda.z mulf8u_prepared.return_1 sta.z return lda.z mulf8u_prepared.return_1+1 @@ -7170,48 +7106,48 @@ mulf8u: { jmp __breturn // mulf8u::@return __breturn: - // [271] return + // [272] return rts } // muls8u // Slow multiplication of unsigned bytes // Calculate an unsigned multiplication by repeated addition -// muls8u(byte zp($69) a, byte zp($6a) b) +// muls8u(byte zp($68) a, byte zp($69) b) muls8u: { - .label return = $27 - .label m = $27 - .label i = $26 - .label a = $69 - .label b = $6a - .label return_1 = $6b - // [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 + .label return = $26 + .label m = $26 + .label i = $25 + .label a = $68 + .label b = $69 + .label return_1 = $6a + // [273] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 lda.z a cmp #0 beq __b1_from_muls8u - // [273] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] + // [274] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] __b2_from_muls8u: - // [273] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 + // [274] phi (word) muls8u::m#3 = (word) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vwuc1 lda #<0 sta.z m lda #>0 sta.z m+1 - // [273] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuz1=vbuc1 + // [274] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b2 // muls8u::@2 __b2: - // [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuz1_neq_vbuz2_then_la1 + // [275] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuz1_neq_vbuz2_then_la1 lda.z i cmp.z a bne __b3 - // [275] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] + // [276] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] __b1_from___b2: - // [275] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy + // [276] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy jmp __b1 - // [275] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] + // [276] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] __b1_from_muls8u: - // [275] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 + // [276] phi (word) muls8u::return#0 = (word) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z return lda #>0 @@ -7222,11 +7158,11 @@ muls8u: { jmp __breturn // muls8u::@return __breturn: - // [276] return + // [277] return rts // muls8u::@3 __b3: - // [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuz2 + // [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z b clc adc.z m @@ -7234,28 +7170,28 @@ muls8u: { bcc !+ inc.z m+1 !: - // [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuz1=_inc_vbuz1 + // [279] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [273] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] + // [274] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] __b2_from___b3: - // [273] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy - // [273] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy + // [274] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy + // [274] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy jmp __b2 } // mulf_tables_cmp // Compare the ASM-based mul tables with the KC-based mul tables // Red screen on failure - green on success mulf_tables_cmp: { - .label asm_sqr = $2b - .label kc_sqr = $29 - // [280] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] + .label asm_sqr = $2a + .label kc_sqr = $28 + // [281] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] __b1_from_mulf_tables_cmp: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte*) mula_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 + // [281] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte*) mula_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 lda #mula_sqr1_lo sta.z asm_sqr+1 - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte*) mulf_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 + // [281] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte*) mulf_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_lo @@ -7263,7 +7199,7 @@ mulf_tables_cmp: { jmp __b1 // mulf_tables_cmp::@1 __b1: - // [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 + // [282] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 lda.z kc_sqr+1 cmp #>mulf_sqr1_lo+$200*4 bcc __b2 @@ -7272,12 +7208,12 @@ mulf_tables_cmp: { cmp #mulf_tables_cmp::@3] + // [283] phi from mulf_tables_cmp::@1 to mulf_tables_cmp::@3 [phi:mulf_tables_cmp::@1->mulf_tables_cmp::@3] __b3_from___b1: jmp __b3 // mulf_tables_cmp::@3 __b3: - // [283] call print_str + // [284] call print_str // [114] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] print_str_from___b3: // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 @@ -7291,12 +7227,12 @@ mulf_tables_cmp: { lda #>str sta.z print_str.str+1 jsr print_str - // [284] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] + // [285] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] __b6_from___b3: jmp __b6 // mulf_tables_cmp::@6 __b6: - // [285] call print_ln + // [286] call print_ln // [80] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] print_ln_from___b6: // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy @@ -7309,23 +7245,23 @@ mulf_tables_cmp: { jmp __b7 // mulf_tables_cmp::@7 __b7: - // [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 - // [287] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] + // [288] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] __breturn_from___b7: - // [287] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#226 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy + // [288] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy + // [288] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#226 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy jmp __breturn // mulf_tables_cmp::@return __breturn: - // [288] return + // [289] return rts // mulf_tables_cmp::@2 __b2: - // [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + // [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 ldy #0 lda (kc_sqr),y ldy #0 @@ -7334,10 +7270,10 @@ mulf_tables_cmp: { jmp __b5 // mulf_tables_cmp::@5 __b5: - // [290] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [291] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [291] call print_str + // [292] call print_str // [114] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] print_str_from___b5: // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 @@ -7354,23 +7290,23 @@ mulf_tables_cmp: { jmp __b8 // mulf_tables_cmp::@8 __b8: - // [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 -- vwuz1=vwuz2 + // [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 -- vwuz1=vwuz2 lda.z asm_sqr sta.z print_word.w lda.z asm_sqr+1 sta.z print_word.w+1 - // [293] call print_word + // [294] call print_word // [100] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] print_word_from___b8: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#1] -- register_copy jsr print_word - // [294] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] + // [295] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] __b9_from___b8: jmp __b9 // mulf_tables_cmp::@9 __b9: - // [295] call print_str + // [296] call print_str // [114] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] print_str_from___b9: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy @@ -7383,42 +7319,42 @@ mulf_tables_cmp: { jmp __b10 // mulf_tables_cmp::@10 __b10: - // [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 + // [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 lda.z kc_sqr sta.z print_word.w lda.z kc_sqr+1 sta.z print_word.w+1 - // [297] call print_word + // [298] call print_word // [100] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] print_word_from___b10: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#1] -- register_copy jsr print_word - // [287] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] + // [288] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] __breturn_from___b10: - // [287] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 + // [288] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 lda #<$400 sta.z print_line_cursor lda #>$400 sta.z print_line_cursor+1 - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy + // [288] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy jmp __breturn // mulf_tables_cmp::@4 __b4: - // [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 + // [299] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 inc.z asm_sqr bne !+ inc.z asm_sqr+1 !: - // [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 + // [300] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 inc.z kc_sqr bne !+ inc.z kc_sqr+1 !: - // [280] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] + // [281] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] __b1_from___b4: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy + // [281] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy + // [281] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp __b1 str: .text "multiply tables match!" .byte 0 @@ -7472,66 +7408,66 @@ mulf_init_asm: { dey inx bne !- - // [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) -- _deref_pbuc1=_deref_pbuc2 + // [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_lo sta mem - // [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) -- _deref_pbuc1=_deref_pbuc2 + // [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_hi sta mem - // [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) -- _deref_pbuc1=_deref_pbuc2 + // [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_lo sta mem - // [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) -- _deref_pbuc1=_deref_pbuc2 + // [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_hi sta mem jmp __breturn // mulf_init_asm::@return __breturn: - // [305] return + // [306] return rts } // mulf_init // Initialize the mulf_sqr multiplication tables with f(x)=int(x*x/4) mulf_init: { - .label __1 = $85 - .label __4 = $86 - .label __5 = $87 + .label __1 = $84 + .label __4 = $85 + .label __5 = $86 // x/2 - .label c = $2f + .label c = $2e // Counter used for determining x%2==0 - .label sqr1_hi = $30 + .label sqr1_hi = $2f // Fill mulf_sqr1 = f(x) = int(x*x/4): If f(x) = x*x/4 then f(x+1) = f(x) + x/2 + 1/4 - .label sqr = $39 - .label sqr1_lo = $2d + .label sqr = $38 + .label sqr1_lo = $2c // sqr = (x*x)/4 - .label x_2 = $32 + .label x_2 = $31 // Decrease or increase x_255 - initially we decrease - .label sqr2_hi = $36 + .label sqr2_hi = $35 // Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x) // g(0) = f(255), g(1) = f(254), ..., g(254) = f(1), g(255) = f(0), g(256) = f(1), ..., g(510) = f(255), g(511) = f(256) - .label x_255 = $35 - .label sqr2_lo = $33 + .label x_255 = $34 + .label sqr2_lo = $32 //Start with g(0)=f(255) - .label dir = $38 - // [307] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + .label dir = $37 + // [308] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [307] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 + // [308] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z x_2 - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [308] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [307] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [308] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [307] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [308] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [308] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -7539,27 +7475,27 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] + // [310] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [309] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [310] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [310] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [309] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 + // [310] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuz1=vbuc1 lda #-1 sta.z x_255 - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [310] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -7567,7 +7503,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -7577,123 +7513,123 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [313] return + // [314] return rts // mulf_init::@6 __b6: - // [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z x_255 lda mulf_sqr1_lo,y ldy #0 sta (sqr2_lo),y - // [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + // [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 ldy.z x_255 lda mulf_sqr1_hi,y ldy #0 sta (sqr2_hi),y - // [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [317] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 + // [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuz1=vbuz1_plus_vbuz2 lda.z x_255 clc adc.z dir sta.z x_255 - // [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 + // [319] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuz1_neq_0_then_la1 lda.z x_255 cmp #0 bne __b9_from___b6 - // [320] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [321] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [320] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [321] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [319] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [320] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] __b9_from___b6: jmp __b9 // mulf_init::@9 __b9: - // [320] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [321] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [320] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [321] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [322] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [309] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [310] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [309] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [309] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [310] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [310] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [310] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [310] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [323] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + // [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 lda #1 and.z c sta.z __1 - // [324] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 + // [325] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuz1_neq_0_then_la1 lda.z __1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 + // [326] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuz1=_inc_vbuz1 inc.z x_2 - // [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [327] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [327] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [328] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] __b3_from___b2: __b3_from___b4: - // [327] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [327] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [328] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [328] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [328] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 + // [329] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuz1=_lo_vwuz2 lda.z sqr sta.z __4 - // [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 + // [330] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuz2 lda.z __4 ldy #0 sta (sqr1_lo),y - // [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 + // [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuz1=_hi_vwuz2 lda.z sqr+1 sta.z __5 - // [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 + // [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuz2 lda.z __5 ldy #0 sta (sqr1_hi),y - // [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [333] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 + // [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuz2 lda.z x_2 clc adc.z sqr @@ -7701,31 +7637,31 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [335] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [307] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [308] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [307] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [307] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [307] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [308] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [308] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [308] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [308] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [308] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [336] call memset - // [338] phi from print_cls to memset [phi:print_cls->memset] + // [337] call memset + // [339] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [337] return + // [338] return rts } // memset @@ -7735,10 +7671,10 @@ memset: { .const num = $3e8 .label str = $400 .label end = str+num - .label dst = $3b - // [339] phi from memset to memset::@1 [phi:memset->memset::@1] + .label dst = $3a + // [340] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [339] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [340] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -7746,7 +7682,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -7756,22 +7692,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [341] return + // [342] return rts // memset::@2 __b2: - // [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [344] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [339] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [340] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [339] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [340] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -7826,129 +7762,131 @@ Statement [45] if((signed word) mul8s_compare::ms#0==(signed word) mul8s_compare Removing always clobbered register reg byte a as potential for zp[1]:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] Statement [49] *((const byte*) BGCOL) ← (byte) 2 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s_compare::mn#0 ] ) always clobbers reg byte a Statement [52] (signed word) mul8s_error::ms#0 ← (signed word) mul8s_compare::ms#0 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_compare::mn#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 ] ( main:2::mul8s_compare:15 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_compare::mn#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:77 [ mul8s_error::a#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:78 [ mul8s_error::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:76 [ mul8s_error::a#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:77 [ mul8s_error::b#0 ] Statement [53] (signed word) mul8s_error::mn#0 ← (signed word) mul8s_compare::mn#0 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 ] ( main:2::mul8s_compare:15 [ print_line_cursor#1 mul8s_compare::mf#0 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 ] ) always clobbers reg byte a Statement [54] (signed word) mul8s_error::mf#0 ← (signed word) mul8s_compare::mf#0 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 ] ( main:2::mul8s_compare:15 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 ] ) always clobbers reg byte a Statement [57] (byte*) print_char_cursor#190 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#190 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#190 ] ) always clobbers reg byte a Statement [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#1 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#1 print_char_cursor#134 ] ) always clobbers reg byte a Statement [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#2 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#2 print_char_cursor#134 ] ) always clobbers reg byte a Statement [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 [ print_line_cursor#1 print_sword::w#3 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 print_sword::w#3 print_char_cursor#134 ] ) always clobbers reg byte a -Statement [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:241 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:232::print_ln:263 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:285 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a -Statement [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:241 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:232::print_ln:263 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:285 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:242 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:233::print_ln:264 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:286 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:242 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:233::print_ln:264 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:286 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a Statement [86] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#134 print_sword::w#4 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_sword::w#4 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_sword::w#4 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#134 print_sword::w#4 ] ) always clobbers reg byte a Statement [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 [ print_char_cursor#19 print_word::w#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_word::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_word::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a Statement [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sword::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_sword::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a -Statement [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:88 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:88 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:88 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:94 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:94 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:94 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102::print_char:109 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102::print_char:109 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104::print_char:109 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104::print_char:109 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245::print_char:109 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249::print_char:109 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102::print_char:112 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102::print_char:112 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104::print_char:112 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104::print_char:112 [ print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245::print_char:112 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249::print_char:112 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:124 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:124 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:130 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:130 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] ) always clobbers reg byte y +Statement [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:88 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:88 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:88 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:94 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:94 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:94 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102::print_char:109 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102::print_char:109 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104::print_char:109 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104::print_char:109 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246::print_char:109 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250::print_char:109 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102::print_char:112 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102::print_char:112 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104::print_char:112 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104::print_char:112 [ print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246::print_char:112 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250::print_char:112 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:124 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:124 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:130 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:130 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -Removing always clobbered register reg byte y as potential for zp[1]:78 [ mul8s_error::b#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:122 [ mul8u_error::b#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:77 [ mul8s_error::b#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:121 [ mul8u_error::b#0 ] Removing always clobbered register reg byte y as potential for zp[1]:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -Statement [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a -Statement [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a -Statement [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a +Statement [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262 [ print_line_cursor#11 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:294 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:298 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a +Statement [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:294 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:298 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102 [ print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104 [ print_line_cursor#11 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] -Removing always clobbered register reg byte a as potential for zp[1]:122 [ mul8u_error::b#0 ] -Statement [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [116] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:77 [ mul8s_error::a#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:121 [ mul8u_error::a#0 ] -Removing always clobbered register reg byte y as potential for zp[1]:121 [ mul8u_error::a#0 ] -Statement [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp[1]:121 [ mul8u_error::b#0 ] +Statement [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104 [ print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [116] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:240 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:244 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:248 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:252 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:256 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:260 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:284 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:292 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:296 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:76 [ mul8s_error::a#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:120 [ mul8u_error::a#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:120 [ mul8u_error::a#0 ] +Statement [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:240 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:244 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:248 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:252 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:256 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:260 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:284 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:292 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:296 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y Statement [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [135] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:73 [ mul8s::a#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:74 [ mul8s::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:72 [ mul8s::a#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:73 [ mul8s::b#0 ] Statement [136] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ) always clobbers reg byte a Statement [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$9 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$9 ] ) always clobbers reg byte a Statement [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a Statement [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$13 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::m#5 mul8s::$13 ] ) always clobbers reg byte a Statement [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a -Statement [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:216 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Statement [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:94 [ mulf8s_prepared::b#0 ] -Statement [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#6 mul8u::mb#0 ] main:2::mul8u_compare:13::mul8u:217 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#6 mul8u::mb#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:21 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Statement [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::mul8u_compare:13::mul8u:217 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:217 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:93 [ mulf8s_prepared::b#0 ] +Statement [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] Removing always clobbered register reg byte x as potential for zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:94 [ mulf8s_prepared::b#0 ] -Removing always clobbered register reg byte x as potential for zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Removing always clobbered register reg byte x as potential for zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Statement [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162::mulf8u_prepared:166 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::mul8u_compare:13::mulf8u:211::mulf8u_prepared:268 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte x as potential for zp[1]:93 [ mulf8s_prepared::b#0 ] +Removing always clobbered register reg byte x as potential for zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Statement [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163::mulf8u_prepared:167 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::mul8u_compare:13::mulf8u:212::mulf8u_prepared:269 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:68 [ mulf8s::b#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:112 [ mulf8u::b#0 ] -Statement [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:61 [ muls8s::a#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:62 [ muls8s::b#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:31 [ muls8s::j#2 muls8s::j#1 ] -Statement [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:34 [ muls8s::i#2 muls8s::i#1 ] -Statement [207] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a -Statement [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a -Statement [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a -Statement [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a -Statement [217] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a -Statement [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] -Statement [226] *((const byte*) BGCOL) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a -Statement [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a -Statement [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a -Statement [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Statement [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a -Statement [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:206 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:105 [ muls8u::a#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:106 [ muls8u::b#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:38 [ muls8u::i#2 muls8u::i#1 ] -Statement [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#226 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#226 ] ) always clobbers reg byte a -Statement [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y -Statement [290] *((const byte*) BGCOL) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a -Statement [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:67 [ mulf8s::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:111 [ mulf8u::b#0 ] +Statement [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:60 [ muls8s::a#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:61 [ muls8s::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:30 [ muls8s::j#2 muls8s::j#1 ] +Statement [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:33 [ muls8s::i#2 muls8s::i#1 ] +Statement [208] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a +Statement [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a +Statement [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a +Statement [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a +Statement [218] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a +Statement [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:36 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] +Statement [227] *((const byte*) BGCOL) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a +Statement [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a +Statement [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:233 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:233 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:233 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a +Statement [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:212 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:212 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a +Statement [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:207 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:104 [ muls8u::a#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:105 [ muls8u::b#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:37 [ muls8u::i#2 muls8u::i#1 ] +Statement [282] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#226 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#226 ] ) always clobbers reg byte a +Statement [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y +Statement [291] *((const byte*) BGCOL) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a +Statement [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a Statement asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } always clobbers reg byte a reg byte x reg byte y -Statement [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Statement [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [328] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] -Statement [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:49 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] +Statement [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [329] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [330] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:49 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] +Statement [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:337 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:337 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y Statement [4] *((const byte*) BGCOL) ← (byte) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [20] (byte*) print_char_cursor#189 ← (byte*) print_line_cursor#1 [ print_char_cursor#189 print_line_cursor#1 ] ( main:2::mul8s_compare:15 [ print_char_cursor#189 print_line_cursor#1 ] ) always clobbers reg byte a Statement [31] (signed word) muls8s::return#2 ← (signed word) muls8s::return#0 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::return#2 ] ( main:2::mul8s_compare:15 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::return#2 ] ) always clobbers reg byte a @@ -7966,18 +7904,18 @@ Statement [57] (byte*) print_char_cursor#190 ← (byte*) print_line_cursor#1 [ p Statement [67] (signed word) print_sword::w#1 ← (signed word) mul8s_error::ms#0 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#1 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#1 print_char_cursor#134 ] ) always clobbers reg byte a Statement [71] (signed word) print_sword::w#2 ← (signed word) mul8s_error::mn#0 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#2 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#2 print_char_cursor#134 ] ) always clobbers reg byte a Statement [75] (signed word) print_sword::w#3 ← (signed word) mul8s_error::mf#0 [ print_line_cursor#1 print_sword::w#3 print_char_cursor#134 ] ( main:2::mul8s_compare:15::mul8s_error:55 [ print_line_cursor#1 print_sword::w#3 print_char_cursor#134 ] ) always clobbers reg byte a -Statement [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:241 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:232::print_ln:263 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:285 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a -Statement [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:241 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:232::print_ln:263 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:285 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [82] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#23 + (byte) $28 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:242 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:233::print_ln:264 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:286 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a +Statement [83] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#135) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#135 ] ( main:2::mul8s_compare:15::print_ln:23 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8s_compare:15::mul8s_error:55::print_ln:78 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::print_ln:242 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mul8u_compare:13::mul8u_error:233::print_ln:264 [ print_line_cursor#1 print_char_cursor#135 ] main:2::mulf_tables_cmp:11::print_ln:286 [ print_line_cursor#1 print_char_cursor#135 ] ) always clobbers reg byte a Statement [86] if((signed word) print_sword::w#4<(signed byte) 0) goto print_sword::@1 [ print_char_cursor#134 print_sword::w#4 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_sword::w#4 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_sword::w#4 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#134 print_sword::w#4 ] ) always clobbers reg byte a Statement [90] (word) print_word::w#0 ← (word)(signed word) print_sword::w#6 [ print_char_cursor#19 print_word::w#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_word::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_word::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#19 print_word::w#0 ] ) always clobbers reg byte a Statement [95] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#4 [ print_char_cursor#19 print_sword::w#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sword::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_sword::w#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76 [ print_line_cursor#1 print_char_cursor#19 print_sword::w#0 ] ) always clobbers reg byte a -Statement [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:88 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:88 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:88 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:94 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:94 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:94 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102::print_char:109 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102::print_char:109 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104::print_char:109 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104::print_char:109 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245::print_char:109 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249::print_char:109 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102::print_char:112 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102::print_char:112 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104::print_char:112 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104::print_char:112 [ print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245::print_char:112 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249::print_char:112 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:124 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:124 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:130 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:130 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] ) always clobbers reg byte y -Statement [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a -Statement [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:293 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:297 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a -Statement [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a -Statement [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:102 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:253::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:257::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_word:261::print_byte:104 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:293::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:297::print_byte:104 [ print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:245 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:232::print_byte:249 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a -Statement [116] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y -Statement [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:239 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:243 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:247 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:251 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:255 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:232::print_str:259 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:283 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:291 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:295 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [97] *((byte*) print_char_cursor#86) ← (byte) print_char::ch#6 [ print_char_cursor#86 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:88 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:88 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:88 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_char:94 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_char:94 [ print_line_cursor#1 mul8s_error::mf#0 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_char:94 [ print_line_cursor#1 print_sword::w#4 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:109 [ print_line_cursor#1 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102::print_char:109 [ print_line_cursor#11 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102::print_char:109 [ print_word::w#6 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:109 [ print_line_cursor#1 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104::print_char:109 [ print_line_cursor#11 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104::print_char:109 [ print_line_cursor#11 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104::print_char:109 [ mulf_tables_cmp::kc_sqr#2 print_byte::b#5 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104::print_char:109 [ print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:109 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246::print_char:109 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250::print_char:109 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_byte::b#5 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102::print_char:112 [ print_line_cursor#1 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102::print_char:112 [ print_line_cursor#11 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102::print_char:112 [ print_word::w#6 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104::print_char:112 [ print_line_cursor#1 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104::print_char:112 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104::print_char:112 [ print_line_cursor#11 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104::print_char:112 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#86 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104::print_char:112 [ print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127::print_char:112 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246::print_char:112 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250::print_char:112 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:124 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:124 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_char:130 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_char:130 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_sbyte::b#3 print_char_cursor#86 ] ) always clobbers reg byte y +Statement [101] (byte) print_byte::b#1 ← > (word) print_word::w#6 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262 [ print_line_cursor#11 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:294 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#142 print_byte::b#1 ] main:2::mulf_tables_cmp:11::print_word:298 [ print_word::w#6 print_char_cursor#142 print_byte::b#1 ] ) always clobbers reg byte a +Statement [103] (byte) print_byte::b#2 ← < (word) print_word::w#6 [ print_char_cursor#19 print_byte::b#2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91 [ print_line_cursor#1 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::b#2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262 [ print_line_cursor#11 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:294 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::b#2 ] main:2::mulf_tables_cmp:11::print_word:298 [ print_char_cursor#19 print_byte::b#2 ] ) always clobbers reg byte a +Statement [107] (byte~) print_byte::$0 ← (byte) print_byte::b#5 >> (byte) 4 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102 [ print_word::w#6 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104 [ print_line_cursor#11 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104 [ print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#143 print_byte::b#5 print_byte::$0 ] ) always clobbers reg byte a +Statement [110] (byte~) print_byte::$2 ← (byte) print_byte::b#5 & (byte) $f [ print_char_cursor#19 print_byte::$2 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:102 [ print_line_cursor#1 mul8s_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:102 [ print_line_cursor#1 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:102 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:102 [ print_line_cursor#11 mul8u_error::mf#0 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:102 [ print_line_cursor#11 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:102 [ mulf_tables_cmp::kc_sqr#2 print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:102 [ print_word::w#6 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:68::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:72::print_word:91::print_byte:104 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sword:76::print_word:91::print_byte:104 [ print_line_cursor#1 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:254::print_byte:104 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:258::print_byte:104 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_word:262::print_byte:104 [ print_line_cursor#11 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:294::print_byte:104 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#19 print_byte::$2 ] main:2::mulf_tables_cmp:11::print_word:298::print_byte:104 [ print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60::print_byte:127 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64::print_byte:127 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:246 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] main:2::mul8u_compare:13::mul8u_error:233::print_byte:250 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#19 print_byte::$2 ] ) always clobbers reg byte a +Statement [116] if((byte) 0!=*((byte*) print_str::str#16)) goto print_str::@2 [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:240 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:244 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:248 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:252 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:256 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:260 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:284 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:292 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:296 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y +Statement [118] *((byte*) print_char_cursor#134) ← *((byte*) print_str::str#16) [ print_char_cursor#134 print_str::str#16 ] ( main:2::mul8s_compare:15::print_str:21 [ print_line_cursor#1 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:58 [ print_line_cursor#1 mul8s_error::a#0 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:62 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:66 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:70 [ print_line_cursor#1 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8s_compare:15::mul8s_error:55::print_str:74 [ print_line_cursor#1 mul8s_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::print_str:240 [ print_line_cursor#11 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:244 [ print_line_cursor#11 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:248 [ print_line_cursor#11 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:252 [ print_line_cursor#11 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:256 [ print_line_cursor#11 mul8u_error::mn#0 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mul8u_compare:13::mul8u_error:233::print_str:260 [ print_line_cursor#11 mul8u_error::mf#0 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:284 [ print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:292 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 print_char_cursor#134 print_str::str#16 ] main:2::mulf_tables_cmp:11::print_str:296 [ mulf_tables_cmp::kc_sqr#2 print_char_cursor#134 print_str::str#16 ] ) always clobbers reg byte a reg byte y Statement [131] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#3 [ print_char_cursor#19 print_sbyte::b#0 ] ( main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:60 [ print_line_cursor#1 mul8s_error::b#0 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] main:2::mul8s_compare:15::mul8s_error:55::print_sbyte:64 [ print_line_cursor#1 mul8s_error::ms#0 mul8s_error::mn#0 mul8s_error::mf#0 print_char_cursor#19 print_sbyte::b#0 ] ) always clobbers reg byte a Statement [135] (word) mul8u::return#2 ← (word) mul8u::res#2 [ mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::return#2 ] ) always clobbers reg byte a Statement [136] (word) mul8s::m#0 ← (word) mul8u::return#2 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 ] ) always clobbers reg byte a @@ -7985,65 +7923,66 @@ Statement [138] (byte~) mul8s::$9 ← > (word) mul8s::m#0 [ mul8s::a#0 mul8s::b# Statement [139] (byte~) mul8s::$16 ← (byte~) mul8s::$9 - (byte)(signed byte) mul8s::b#0 [ mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8s::m#0 mul8s::$16 ] ) always clobbers reg byte a Statement [143] (byte~) mul8s::$13 ← > (word) mul8s::m#5 [ mul8s::a#0 mul8s::m#5 mul8s::$13 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::m#5 mul8s::$13 ] ) always clobbers reg byte a Statement [144] (byte~) mul8s::$17 ← (byte~) mul8s::$13 - (byte)(signed byte) mul8s::a#0 [ mul8s::m#5 mul8s::$17 ] ( main:2::mul8s_compare:15::mul8s:40 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::m#5 mul8s::$17 ] ) always clobbers reg byte a -Statement [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::mul8u_compare:13::mul8u:216 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a -Statement [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:216 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a -Statement [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#0 ] ) always clobbers reg byte a -Statement [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ) always clobbers reg byte a -Statement [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a -Statement [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a -Statement [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a -Statement [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a -Statement [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a +Statement [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 [ mul8u::a#6 mul8u::mb#0 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#6 mul8u::mb#0 ] main:2::mul8u_compare:13::mul8u:217 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#6 mul8u::mb#0 ] ) always clobbers reg byte a +Statement [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:2::mul8u_compare:13::mul8u:217 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a +Statement [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:2::mul8s_compare:15::mul8s:40::mul8u:134 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mul8s_compare::mf#0 mul8s::a#0 mul8s::b#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:2::mul8u_compare:13::mul8u:217 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a +Statement [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 [ mulf8s::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s::return#0 ] ) always clobbers reg byte a +Statement [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 [ mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#3 ] ) always clobbers reg byte a +Statement [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 ] ) always clobbers reg byte a +Statement [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$8 ] ) always clobbers reg byte a +Statement [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 [ mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8s_prepared::m#0 mulf8s_prepared::$15 ] ) always clobbers reg byte a +Statement [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [ mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$12 ] ) always clobbers reg byte a +Statement [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) [ mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::m#5 mulf8s_prepared::$16 ] ) always clobbers reg byte a Statement asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } always clobbers reg byte a reg byte x -Statement [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:162::mulf8u_prepared:166 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::mul8u_compare:13::mulf8u:211::mulf8u_prepared:268 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a +Statement [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) [ mulf8u_prepared::return#0 ] ( main:2::mul8s_compare:15::mulf8s:35::mulf8s_prepared:163::mulf8u_prepared:167 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 mul8s_compare::ms#0 mulf8s_prepared::b#0 mulf8u_prepared::return#0 ] main:2::mul8u_compare:13::mulf8u:212::mulf8u_prepared:269 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#0 ] ) always clobbers reg byte a Statement asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } always clobbers reg byte a -Statement [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ) always clobbers reg byte a -Statement [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ) always clobbers reg byte a -Statement [207] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a -Statement [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a -Statement [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a -Statement [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a -Statement [217] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a -Statement [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a -Statement [226] *((const byte*) BGCOL) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a -Statement [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a -Statement [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a -Statement [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ) always clobbers reg byte a -Statement [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:232 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a -Statement [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a -Statement [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:211 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a -Statement [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:206 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a -Statement [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#226 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#226 ] ) always clobbers reg byte a -Statement [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y -Statement [290] *((const byte*) BGCOL) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a -Statement [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a -Statement [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a +Statement [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::j#2 muls8s::m#1 ] ) always clobbers reg byte a +Statement [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 [ muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ( main:2::mul8s_compare:15::muls8s:30 [ mul8s_compare::a#10 print_line_cursor#1 mul8s_compare::b#10 muls8s::a#0 muls8s::b#0 muls8s::i#2 muls8s::m#2 ] ) always clobbers reg byte a +Statement [208] (word) muls8u::return#2 ← (word) muls8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::return#2 ] ) always clobbers reg byte a +Statement [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 ] ) always clobbers reg byte a +Statement [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#2 ] ) always clobbers reg byte a +Statement [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 ] ) always clobbers reg byte a +Statement [218] (word) mul8u::return#3 ← (word) mul8u::res#2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u::return#3 ] ) always clobbers reg byte a +Statement [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_compare::ok#4 ] ) always clobbers reg byte a +Statement [227] *((const byte*) BGCOL) ← (byte) 2 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mul8u_compare::mf#0 mul8u_compare::mn#0 ] ) always clobbers reg byte a +Statement [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_compare::mn#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 ] ) always clobbers reg byte a +Statement [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::mf#0 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 ] ) always clobbers reg byte a +Statement [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13 [ print_line_cursor#11 print_char_cursor#100 mul8u_error::a#0 mul8u_error::b#0 mul8u_error::ms#0 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:233 [ print_char_cursor#134 print_line_cursor#11 print_word::w#3 mul8u_error::mn#0 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ( main:2::mul8u_compare:13::mul8u_error:233 [ print_char_cursor#134 print_line_cursor#11 print_word::w#4 mul8u_error::mf#0 ] ) always clobbers reg byte a +Statement [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ( main:2::mul8u_compare:13::mul8u_error:233 [ print_char_cursor#134 print_line_cursor#11 print_word::w#5 ] ) always clobbers reg byte a +Statement [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [ mulf8u_prepared::return#2 ] ( main:2::mul8u_compare:13::mulf8u:212 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u_prepared::return#2 ] ) always clobbers reg byte a +Statement [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 [ mulf8u::return#0 ] ( main:2::mul8u_compare:13::mulf8u:212 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 mul8u_compare::ms#0 mulf8u::return#0 ] ) always clobbers reg byte a +Statement [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 [ muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ( main:2::mul8u_compare:13::muls8u:207 [ print_line_cursor#11 print_char_cursor#100 mul8u_compare::a#7 mul8u_compare::b#10 muls8u::a#0 muls8u::b#0 muls8u::i#2 muls8u::m#1 ] ) always clobbers reg byte a +Statement [282] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#226 ] ( main:2::mulf_tables_cmp:11 [ print_line_cursor#1 print_char_cursor#226 ] ) always clobbers reg byte a +Statement [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a reg byte y +Statement [291] *((const byte*) BGCOL) ← (byte) 2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::asm_sqr#2 ] ) always clobbers reg byte a +Statement [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#1 mulf_tables_cmp::kc_sqr#2 ] ) always clobbers reg byte a +Statement [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 [ print_char_cursor#134 print_word::w#2 ] ( main:2::mulf_tables_cmp:11 [ print_char_cursor#134 print_word::w#2 ] ) always clobbers reg byte a Statement asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- } always clobbers reg byte a reg byte x reg byte y -Statement [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a -Statement [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a -Statement [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a -Statement [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a -Statement [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y -Statement [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a -Statement [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a -Statement [328] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a -Statement [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a -Statement [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y -Statement [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a -Statement [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a -Statement [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:336 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y +Statement [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) [ ] ( main:2::mulf_init_asm:9 [ ] ) always clobbers reg byte a +Statement [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 ] ) always clobbers reg byte a +Statement [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a +Statement [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) [ ] ( main:2::mulf_init:7 [ ] ) always clobbers reg byte a +Statement [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::x_255#2 mulf_init::sqr2_hi#2 mulf_init::dir#2 ] ) always clobbers reg byte a reg byte y +Statement [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ( main:2::mulf_init:7 [ mulf_init::sqr2_lo#2 mulf_init::dir#2 mulf_init::x_255#1 mulf_init::sqr2_hi#1 ] ) always clobbers reg byte a +Statement [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr#4 mulf_init::sqr1_hi#2 mulf_init::x_2#3 mulf_init::c#1 mulf_init::$1 ] ) always clobbers reg byte a +Statement [329] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$4 ] ) always clobbers reg byte a +Statement [330] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 mulf_init::$5 ] ) always clobbers reg byte a +Statement [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_hi#2 mulf_init::c#1 mulf_init::x_2#2 mulf_init::sqr#3 ] ) always clobbers reg byte y +Statement [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ( main:2::mulf_init:7 [ mulf_init::sqr1_lo#2 mulf_init::c#1 mulf_init::sqr#1 mulf_init::sqr1_hi#1 mulf_init::x_2#2 ] ) always clobbers reg byte a +Statement [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:5::memset:337 [ memset::dst#2 ] ) always clobbers reg byte a +Statement [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:337 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] : zp[1]:2 , reg byte y , Potential registers zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] : zp[1]:3 , reg byte y , Potential registers zp[1]:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] : zp[1]:4 , reg byte x , reg byte y , @@ -8056,233 +7995,231 @@ Potential registers zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print Potential registers zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] : zp[2]:15 , Potential registers zp[1]:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] : zp[1]:17 , reg byte a , reg byte x , Potential registers zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] : zp[2]:18 , -Potential registers zp[1]:20 [ mul8u::b#0 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:21 [ mul8u::b#1 ] : zp[1]:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] : zp[1]:22 , reg byte x , reg byte y , -Potential registers zp[2]:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:23 , -Potential registers zp[2]:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:25 , -Potential registers zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp[2]:27 , -Potential registers zp[1]:29 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:31 [ muls8s::j#2 muls8s::j#1 ] : zp[1]:31 , reg byte x , reg byte y , -Potential registers zp[2]:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] : zp[2]:32 , -Potential registers zp[1]:34 [ muls8s::i#2 muls8s::i#1 ] : zp[1]:34 , reg byte x , reg byte y , -Potential registers zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] : zp[1]:35 , reg byte y , -Potential registers zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] : zp[1]:36 , reg byte y , -Potential registers zp[1]:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] : zp[1]:37 , reg byte x , reg byte y , -Potential registers zp[1]:38 [ muls8u::i#2 muls8u::i#1 ] : zp[1]:38 , reg byte x , reg byte y , -Potential registers zp[2]:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] : zp[2]:39 , -Potential registers zp[2]:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] : zp[2]:41 , -Potential registers zp[2]:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] : zp[2]:43 , -Potential registers zp[2]:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:45 , -Potential registers zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:47 , reg byte x , -Potential registers zp[2]:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:48 , -Potential registers zp[1]:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:50 , reg byte x , -Potential registers zp[2]:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:51 , -Potential registers zp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:53 , reg byte x , -Potential registers zp[2]:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:54 , -Potential registers zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:56 , reg byte x , -Potential registers zp[2]:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:57 , -Potential registers zp[2]:59 [ memset::dst#2 memset::dst#1 ] : zp[2]:59 , -Potential registers zp[1]:61 [ muls8s::a#0 ] : zp[1]:61 , reg byte x , reg byte y , -Potential registers zp[1]:62 [ muls8s::b#0 ] : zp[1]:62 , reg byte x , reg byte y , -Potential registers zp[2]:63 [ muls8s::return#2 ] : zp[2]:63 , -Potential registers zp[2]:65 [ mul8s_compare::ms#0 ] : zp[2]:65 , -Potential registers zp[1]:67 [ mulf8s::a#0 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:68 [ mulf8s::b#0 ] : zp[1]:68 , reg byte x , reg byte y , -Potential registers zp[2]:69 [ mulf8s::return#2 ] : zp[2]:69 , -Potential registers zp[2]:71 [ mul8s_compare::mf#0 ] : zp[2]:71 , -Potential registers zp[1]:73 [ mul8s::a#0 ] : zp[1]:73 , reg byte x , reg byte y , -Potential registers zp[1]:74 [ mul8s::b#0 ] : zp[1]:74 , reg byte x , reg byte y , -Potential registers zp[2]:75 [ mul8s_compare::mn#0 ] : zp[2]:75 , -Potential registers zp[1]:77 [ mul8s_error::a#0 ] : zp[1]:77 , reg byte x , -Potential registers zp[1]:78 [ mul8s_error::b#0 ] : zp[1]:78 , reg byte x , -Potential registers zp[2]:79 [ mul8s_error::ms#0 ] : zp[2]:79 , -Potential registers zp[2]:81 [ mul8s_error::mn#0 ] : zp[2]:81 , -Potential registers zp[2]:83 [ mul8s_error::mf#0 ] : zp[2]:83 , -Potential registers zp[1]:85 [ print_byte::$0 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:86 [ print_byte::$2 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:87 [ mul8u::return#2 ] : zp[2]:87 , -Potential registers zp[1]:89 [ mul8s::$9 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:90 [ mul8s::$16 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:91 [ mul8s::$13 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:92 [ mul8s::$17 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:93 [ mul8u::$1 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:94 [ mulf8s_prepared::b#0 ] : zp[1]:94 , reg byte y , -Potential registers zp[2]:95 [ mulf8s::return#0 ] : zp[2]:95 , -Potential registers zp[2]:97 [ mulf8u_prepared::return#3 ] : zp[2]:97 , -Potential registers zp[1]:99 [ mulf8s_prepared::$8 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:100 [ mulf8s_prepared::$15 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:101 [ mulf8s_prepared::$12 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:102 [ mulf8s_prepared::$16 ] : zp[1]:102 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:103 [ mulf8u_prepared::return#0 ] : zp[2]:103 , -Potential registers zp[1]:105 [ muls8u::a#0 ] : zp[1]:105 , reg byte x , reg byte y , -Potential registers zp[1]:106 [ muls8u::b#0 ] : zp[1]:106 , reg byte x , reg byte y , -Potential registers zp[2]:107 [ muls8u::return#2 ] : zp[2]:107 , -Potential registers zp[2]:109 [ mul8u_compare::ms#0 ] : zp[2]:109 , -Potential registers zp[1]:111 [ mulf8u::a#0 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:112 [ mulf8u::b#0 ] : zp[1]:112 , reg byte x , reg byte y , -Potential registers zp[2]:113 [ mulf8u::return#2 ] : zp[2]:113 , -Potential registers zp[2]:115 [ mul8u_compare::mf#0 ] : zp[2]:115 , -Potential registers zp[2]:117 [ mul8u::return#3 ] : zp[2]:117 , -Potential registers zp[2]:119 [ mul8u_compare::mn#0 ] : zp[2]:119 , -Potential registers zp[1]:121 [ mul8u_error::a#0 ] : zp[1]:121 , reg byte x , -Potential registers zp[1]:122 [ mul8u_error::b#0 ] : zp[1]:122 , reg byte x , -Potential registers zp[2]:123 [ mul8u_error::ms#0 ] : zp[2]:123 , -Potential registers zp[2]:125 [ mul8u_error::mn#0 ] : zp[2]:125 , -Potential registers zp[2]:127 [ mul8u_error::mf#0 ] : zp[2]:127 , -Potential registers zp[2]:129 [ mulf8u_prepared::return#2 ] : zp[2]:129 , -Potential registers zp[2]:131 [ mulf8u::return#0 ] : zp[2]:131 , -Potential registers zp[1]:133 [ mulf_init::$1 ] : zp[1]:133 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:134 [ mulf_init::$4 ] : zp[1]:134 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:135 [ mulf_init::$5 ] : zp[1]:135 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:20 [ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] : zp[1]:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:21 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] : zp[1]:21 , reg byte x , reg byte y , +Potential registers zp[2]:22 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp[2]:22 , +Potential registers zp[2]:24 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp[2]:24 , +Potential registers zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] : zp[2]:26 , +Potential registers zp[1]:28 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:29 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:30 [ muls8s::j#2 muls8s::j#1 ] : zp[1]:30 , reg byte x , reg byte y , +Potential registers zp[2]:31 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] : zp[2]:31 , +Potential registers zp[1]:33 [ muls8s::i#2 muls8s::i#1 ] : zp[1]:33 , reg byte x , reg byte y , +Potential registers zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] : zp[1]:34 , reg byte y , +Potential registers zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] : zp[1]:35 , reg byte y , +Potential registers zp[1]:36 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] : zp[1]:36 , reg byte x , reg byte y , +Potential registers zp[1]:37 [ muls8u::i#2 muls8u::i#1 ] : zp[1]:37 , reg byte x , reg byte y , +Potential registers zp[2]:38 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] : zp[2]:38 , +Potential registers zp[2]:40 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] : zp[2]:40 , +Potential registers zp[2]:42 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] : zp[2]:42 , +Potential registers zp[2]:44 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] : zp[2]:44 , +Potential registers zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] : zp[1]:46 , reg byte x , +Potential registers zp[2]:47 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] : zp[2]:47 , +Potential registers zp[1]:49 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] : zp[1]:49 , reg byte x , +Potential registers zp[2]:50 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] : zp[2]:50 , +Potential registers zp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] : zp[1]:52 , reg byte x , +Potential registers zp[2]:53 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[2]:53 , +Potential registers zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:55 , reg byte x , +Potential registers zp[2]:56 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:56 , +Potential registers zp[2]:58 [ memset::dst#2 memset::dst#1 ] : zp[2]:58 , +Potential registers zp[1]:60 [ muls8s::a#0 ] : zp[1]:60 , reg byte x , reg byte y , +Potential registers zp[1]:61 [ muls8s::b#0 ] : zp[1]:61 , reg byte x , reg byte y , +Potential registers zp[2]:62 [ muls8s::return#2 ] : zp[2]:62 , +Potential registers zp[2]:64 [ mul8s_compare::ms#0 ] : zp[2]:64 , +Potential registers zp[1]:66 [ mulf8s::a#0 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:67 [ mulf8s::b#0 ] : zp[1]:67 , reg byte x , reg byte y , +Potential registers zp[2]:68 [ mulf8s::return#2 ] : zp[2]:68 , +Potential registers zp[2]:70 [ mul8s_compare::mf#0 ] : zp[2]:70 , +Potential registers zp[1]:72 [ mul8s::a#0 ] : zp[1]:72 , reg byte x , reg byte y , +Potential registers zp[1]:73 [ mul8s::b#0 ] : zp[1]:73 , reg byte x , reg byte y , +Potential registers zp[2]:74 [ mul8s_compare::mn#0 ] : zp[2]:74 , +Potential registers zp[1]:76 [ mul8s_error::a#0 ] : zp[1]:76 , reg byte x , +Potential registers zp[1]:77 [ mul8s_error::b#0 ] : zp[1]:77 , reg byte x , +Potential registers zp[2]:78 [ mul8s_error::ms#0 ] : zp[2]:78 , +Potential registers zp[2]:80 [ mul8s_error::mn#0 ] : zp[2]:80 , +Potential registers zp[2]:82 [ mul8s_error::mf#0 ] : zp[2]:82 , +Potential registers zp[1]:84 [ print_byte::$0 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:85 [ print_byte::$2 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:86 [ mul8u::return#2 ] : zp[2]:86 , +Potential registers zp[1]:88 [ mul8s::$9 ] : zp[1]:88 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:89 [ mul8s::$16 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:90 [ mul8s::$13 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:91 [ mul8s::$17 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:92 [ mul8u::$1 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:93 [ mulf8s_prepared::b#0 ] : zp[1]:93 , reg byte y , +Potential registers zp[2]:94 [ mulf8s::return#0 ] : zp[2]:94 , +Potential registers zp[2]:96 [ mulf8u_prepared::return#3 ] : zp[2]:96 , +Potential registers zp[1]:98 [ mulf8s_prepared::$8 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:99 [ mulf8s_prepared::$15 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:100 [ mulf8s_prepared::$12 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:101 [ mulf8s_prepared::$16 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:102 [ mulf8u_prepared::return#0 ] : zp[2]:102 , +Potential registers zp[1]:104 [ muls8u::a#0 ] : zp[1]:104 , reg byte x , reg byte y , +Potential registers zp[1]:105 [ muls8u::b#0 ] : zp[1]:105 , reg byte x , reg byte y , +Potential registers zp[2]:106 [ muls8u::return#2 ] : zp[2]:106 , +Potential registers zp[2]:108 [ mul8u_compare::ms#0 ] : zp[2]:108 , +Potential registers zp[1]:110 [ mulf8u::a#0 ] : zp[1]:110 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:111 [ mulf8u::b#0 ] : zp[1]:111 , reg byte x , reg byte y , +Potential registers zp[2]:112 [ mulf8u::return#2 ] : zp[2]:112 , +Potential registers zp[2]:114 [ mul8u_compare::mf#0 ] : zp[2]:114 , +Potential registers zp[2]:116 [ mul8u::return#3 ] : zp[2]:116 , +Potential registers zp[2]:118 [ mul8u_compare::mn#0 ] : zp[2]:118 , +Potential registers zp[1]:120 [ mul8u_error::a#0 ] : zp[1]:120 , reg byte x , +Potential registers zp[1]:121 [ mul8u_error::b#0 ] : zp[1]:121 , reg byte x , +Potential registers zp[2]:122 [ mul8u_error::ms#0 ] : zp[2]:122 , +Potential registers zp[2]:124 [ mul8u_error::mn#0 ] : zp[2]:124 , +Potential registers zp[2]:126 [ mul8u_error::mf#0 ] : zp[2]:126 , +Potential registers zp[2]:128 [ mulf8u_prepared::return#2 ] : zp[2]:128 , +Potential registers zp[2]:130 [ mulf8u::return#0 ] : zp[2]:130 , +Potential registers zp[1]:132 [ mulf_init::$1 ] : zp[1]:132 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:133 [ mulf_init::$4 ] : zp[1]:133 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:134 [ mulf_init::$5 ] : zp[1]:134 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [muls8s] 5,706: zp[2]:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] 3,003: zp[1]:31 [ muls8s::j#2 muls8s::j#1 ] 3,003: zp[1]:34 [ muls8s::i#2 muls8s::i#1 ] 202: zp[2]:63 [ muls8s::return#2 ] 191.18: zp[1]:62 [ muls8s::b#0 ] 175.58: zp[1]:61 [ muls8s::a#0 ] -Uplift Scope [mul8u] 3,446.71: zp[2]:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,536.29: zp[2]:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 2,002: zp[1]:93 [ mul8u::$1 ] 1,876.67: zp[1]:22 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 202: zp[1]:21 [ mul8u::b#1 ] 202: zp[2]:117 [ mul8u::return#3 ] 4: zp[1]:20 [ mul8u::b#0 ] 4: zp[2]:87 [ mul8u::return#2 ] -Uplift Scope [muls8u] 3,003: zp[1]:38 [ muls8u::i#2 muls8u::i#1 ] 2,869.83: zp[2]:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] 202: zp[2]:107 [ muls8u::return#2 ] 183.67: zp[1]:106 [ muls8u::b#0 ] 157.71: zp[1]:105 [ muls8u::a#0 ] -Uplift Scope [mul8s_compare] 235.67: zp[1]:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] 226.32: zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] 34.52: zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] 17: zp[2]:75 [ mul8s_compare::mn#0 ] 15.25: zp[2]:65 [ mul8s_compare::ms#0 ] 12: zp[2]:71 [ mul8s_compare::mf#0 ] -Uplift Scope [mul8u_compare] 235.67: zp[1]:37 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] 171.78: zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] 28.61: zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] 17: zp[2]:119 [ mul8u_compare::mn#0 ] 14.52: zp[2]:109 [ mul8u_compare::ms#0 ] 11.33: zp[2]:115 [ mul8u_compare::mf#0 ] -Uplift Scope [mulf8u] 202: zp[2]:113 [ mulf8u::return#2 ] 51.5: zp[1]:111 [ mulf8u::a#0 ] 34.33: zp[1]:112 [ mulf8u::b#0 ] 34.33: zp[2]:131 [ mulf8u::return#0 ] -Uplift Scope [mulf8s] 202: zp[2]:69 [ mulf8s::return#2 ] 34.33: zp[2]:95 [ mulf8s::return#0 ] 33.67: zp[1]:67 [ mulf8s::a#0 ] 25.75: zp[1]:68 [ mulf8s::b#0 ] -Uplift Scope [mulf_init] 47.67: zp[2]:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:50 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:133 [ mulf_init::$1 ] 22: zp[1]:134 [ mulf_init::$4 ] 22: zp[1]:135 [ mulf_init::$5 ] 15.4: zp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplift Scope [muls8s] 5,706: zp[2]:31 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] 3,003: zp[1]:30 [ muls8s::j#2 muls8s::j#1 ] 3,003: zp[1]:33 [ muls8s::i#2 muls8s::i#1 ] 202: zp[2]:62 [ muls8s::return#2 ] 191.18: zp[1]:61 [ muls8s::b#0 ] 175.58: zp[1]:60 [ muls8s::a#0 ] +Uplift Scope [mul8u] 3,446.71: zp[2]:22 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 2,435.29: zp[2]:24 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 2,002: zp[1]:92 [ mul8u::$1 ] 1,824.17: zp[1]:21 [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] 309: zp[1]:20 [ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] 202: zp[2]:116 [ mul8u::return#3 ] 4: zp[2]:86 [ mul8u::return#2 ] +Uplift Scope [muls8u] 3,003: zp[1]:37 [ muls8u::i#2 muls8u::i#1 ] 2,869.83: zp[2]:38 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] 202: zp[2]:106 [ muls8u::return#2 ] 183.67: zp[1]:105 [ muls8u::b#0 ] 157.71: zp[1]:104 [ muls8u::a#0 ] +Uplift Scope [mul8s_compare] 235.67: zp[1]:4 [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] 226.32: zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] 34.52: zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] 17: zp[2]:74 [ mul8s_compare::mn#0 ] 15.25: zp[2]:64 [ mul8s_compare::ms#0 ] 12: zp[2]:70 [ mul8s_compare::mf#0 ] +Uplift Scope [mul8u_compare] 235.67: zp[1]:36 [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] 171.78: zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] 28.61: zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] 17: zp[2]:118 [ mul8u_compare::mn#0 ] 14.52: zp[2]:108 [ mul8u_compare::ms#0 ] 11.33: zp[2]:114 [ mul8u_compare::mf#0 ] +Uplift Scope [mulf8u] 202: zp[2]:112 [ mulf8u::return#2 ] 51.5: zp[1]:110 [ mulf8u::a#0 ] 34.33: zp[1]:111 [ mulf8u::b#0 ] 34.33: zp[2]:130 [ mulf8u::return#0 ] +Uplift Scope [mulf8s] 202: zp[2]:68 [ mulf8s::return#2 ] 34.33: zp[2]:94 [ mulf8s::return#0 ] 33.67: zp[1]:66 [ mulf8s::a#0 ] 25.75: zp[1]:67 [ mulf8s::b#0 ] +Uplift Scope [mulf_init] 47.67: zp[2]:56 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] 26.89: zp[2]:50 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] 25.14: zp[2]:44 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] 23.1: zp[1]:49 [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] 22: zp[1]:132 [ mulf_init::$1 ] 22: zp[1]:133 [ mulf_init::$4 ] 22: zp[1]:134 [ mulf_init::$5 ] 15.4: zp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] 15.12: zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] 13.54: zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] 11.92: zp[2]:53 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] 10.08: zp[2]:47 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Uplift Scope [] 77.65: zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] 34.74: zp[2]:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Uplift Scope [mul8s] 13.83: zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] 9.36: zp[1]:74 [ mul8s::b#0 ] 7.36: zp[1]:73 [ mul8s::a#0 ] 4: zp[1]:89 [ mul8s::$9 ] 4: zp[1]:90 [ mul8s::$16 ] 4: zp[1]:91 [ mul8s::$13 ] 4: zp[1]:92 [ mul8s::$17 ] -Uplift Scope [mulf_tables_cmp] 26.4: zp[2]:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] 17.6: zp[2]:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] -Uplift Scope [memset] 36.67: zp[2]:59 [ memset::dst#2 memset::dst#1 ] +Uplift Scope [mul8s] 13.83: zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] 9.36: zp[1]:73 [ mul8s::b#0 ] 7.36: zp[1]:72 [ mul8s::a#0 ] 4: zp[1]:88 [ mul8s::$9 ] 4: zp[1]:89 [ mul8s::$16 ] 4: zp[1]:90 [ mul8s::$13 ] 4: zp[1]:91 [ mul8s::$17 ] +Uplift Scope [mulf_tables_cmp] 26.4: zp[2]:40 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] 17.6: zp[2]:42 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] +Uplift Scope [memset] 36.67: zp[2]:58 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_str] 35.5: zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] -Uplift Scope [print_byte] 23.5: zp[1]:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] 4: zp[1]:85 [ print_byte::$0 ] 4: zp[1]:86 [ print_byte::$2 ] -Uplift Scope [mulf8s_prepared] 13.83: zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp[1]:99 [ mulf8s_prepared::$8 ] 4: zp[1]:100 [ mulf8s_prepared::$15 ] 4: zp[1]:101 [ mulf8s_prepared::$12 ] 4: zp[1]:102 [ mulf8s_prepared::$16 ] 0.4: zp[1]:94 [ mulf8s_prepared::b#0 ] +Uplift Scope [print_byte] 23.5: zp[1]:12 [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] 4: zp[1]:84 [ print_byte::$0 ] 4: zp[1]:85 [ print_byte::$2 ] +Uplift Scope [mulf8s_prepared] 13.83: zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] 4: zp[1]:98 [ mulf8s_prepared::$8 ] 4: zp[1]:99 [ mulf8s_prepared::$15 ] 4: zp[1]:100 [ mulf8s_prepared::$12 ] 4: zp[1]:101 [ mulf8s_prepared::$16 ] 0.4: zp[1]:93 [ mulf8s_prepared::b#0 ] Uplift Scope [print_word] 29.33: zp[2]:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplift Scope [mulf8u_prepared] 14: zp[1]:29 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] 4: zp[2]:97 [ mulf8u_prepared::return#3 ] 4: zp[2]:129 [ mulf8u_prepared::return#2 ] 1.5: zp[2]:103 [ mulf8u_prepared::return#0 ] +Uplift Scope [mulf8u_prepared] 14: zp[1]:28 [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] 4: zp[2]:96 [ mulf8u_prepared::return#3 ] 4: zp[2]:128 [ mulf8u_prepared::return#2 ] 1.5: zp[2]:102 [ mulf8u_prepared::return#0 ] Uplift Scope [print_sword] 22: zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] Uplift Scope [print_sbyte] 17.67: zp[1]:17 [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] Uplift Scope [print_char] 14: zp[1]:9 [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplift Scope [mulf8u_prepare] 14: zp[1]:30 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -Uplift Scope [mul8u_error] 0.57: zp[1]:121 [ mul8u_error::a#0 ] 0.4: zp[1]:122 [ mul8u_error::b#0 ] 0.31: zp[2]:123 [ mul8u_error::ms#0 ] 0.25: zp[2]:125 [ mul8u_error::mn#0 ] 0.21: zp[2]:127 [ mul8u_error::mf#0 ] -Uplift Scope [mul8s_error] 0.57: zp[1]:77 [ mul8s_error::a#0 ] 0.4: zp[1]:78 [ mul8s_error::b#0 ] 0.31: zp[2]:79 [ mul8s_error::ms#0 ] 0.25: zp[2]:81 [ mul8s_error::mn#0 ] 0.21: zp[2]:83 [ mul8s_error::mf#0 ] +Uplift Scope [mulf8u_prepare] 14: zp[1]:29 [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] +Uplift Scope [mul8u_error] 0.57: zp[1]:120 [ mul8u_error::a#0 ] 0.4: zp[1]:121 [ mul8u_error::b#0 ] 0.31: zp[2]:122 [ mul8u_error::ms#0 ] 0.25: zp[2]:124 [ mul8u_error::mn#0 ] 0.21: zp[2]:126 [ mul8u_error::mf#0 ] +Uplift Scope [mul8s_error] 0.57: zp[1]:76 [ mul8s_error::a#0 ] 0.4: zp[1]:77 [ mul8s_error::b#0 ] 0.31: zp[2]:78 [ mul8s_error::ms#0 ] 0.25: zp[2]:80 [ mul8s_error::mn#0 ] 0.21: zp[2]:82 [ mul8s_error::mf#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [main] Uplift Scope [mulf_init_asm] -Uplifting [muls8s] best 312443 combination zp[2]:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] reg byte y [ muls8s::j#2 muls8s::j#1 ] reg byte y [ muls8s::i#2 muls8s::i#1 ] zp[2]:63 [ muls8s::return#2 ] reg byte x [ muls8s::b#0 ] zp[1]:61 [ muls8s::a#0 ] -Uplifting [mul8u] best 302831 combination zp[2]:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#1 ] zp[2]:117 [ mul8u::return#3 ] reg byte a [ mul8u::b#0 ] zp[2]:87 [ mul8u::return#2 ] -Limited combination testing to 100 combinations of 192 possible. -Uplifting [muls8u] best 292531 combination reg byte y [ muls8u::i#2 muls8u::i#1 ] zp[2]:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] zp[2]:107 [ muls8u::return#2 ] reg byte x [ muls8u::b#0 ] zp[1]:105 [ muls8u::a#0 ] -Uplifting [mul8s_compare] best 291331 combination reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] zp[2]:75 [ mul8s_compare::mn#0 ] zp[2]:65 [ mul8s_compare::ms#0 ] zp[2]:71 [ mul8s_compare::mf#0 ] -Uplifting [mul8u_compare] best 290131 combination reg byte x [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] zp[2]:119 [ mul8u_compare::mn#0 ] zp[2]:109 [ mul8u_compare::ms#0 ] zp[2]:115 [ mul8u_compare::mf#0 ] -Uplifting [mulf8u] best 289525 combination zp[2]:113 [ mulf8u::return#2 ] reg byte a [ mulf8u::a#0 ] reg byte x [ mulf8u::b#0 ] zp[2]:131 [ mulf8u::return#0 ] -Uplifting [mulf8s] best 288919 combination zp[2]:69 [ mulf8s::return#2 ] zp[2]:95 [ mulf8s::return#0 ] reg byte a [ mulf8s::a#0 ] reg byte x [ mulf8s::b#0 ] -Uplifting [mulf_init] best 288669 combination zp[2]:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] +Uplifting [muls8s] best 312432 combination zp[2]:31 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] reg byte y [ muls8s::j#2 muls8s::j#1 ] reg byte y [ muls8s::i#2 muls8s::i#1 ] zp[2]:62 [ muls8s::return#2 ] reg byte x [ muls8s::b#0 ] zp[1]:60 [ muls8s::a#0 ] +Uplifting [mul8u] best 302823 combination zp[2]:22 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp[2]:24 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] zp[2]:116 [ mul8u::return#3 ] zp[2]:86 [ mul8u::return#2 ] +Uplifting [muls8u] best 292523 combination reg byte y [ muls8u::i#2 muls8u::i#1 ] zp[2]:38 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] zp[2]:106 [ muls8u::return#2 ] reg byte x [ muls8u::b#0 ] zp[1]:104 [ muls8u::a#0 ] +Uplifting [mul8s_compare] best 291323 combination reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] zp[2]:74 [ mul8s_compare::mn#0 ] zp[2]:64 [ mul8s_compare::ms#0 ] zp[2]:70 [ mul8s_compare::mf#0 ] +Uplifting [mul8u_compare] best 290123 combination reg byte x [ mul8u_compare::ok#3 mul8u_compare::ok#4 ] zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] zp[2]:118 [ mul8u_compare::mn#0 ] zp[2]:108 [ mul8u_compare::ms#0 ] zp[2]:114 [ mul8u_compare::mf#0 ] +Uplifting [mulf8u] best 289517 combination zp[2]:112 [ mulf8u::return#2 ] reg byte a [ mulf8u::a#0 ] reg byte x [ mulf8u::b#0 ] zp[2]:130 [ mulf8u::return#0 ] +Uplifting [mulf8s] best 288911 combination zp[2]:68 [ mulf8s::return#2 ] zp[2]:94 [ mulf8s::return#0 ] reg byte a [ mulf8s::a#0 ] reg byte x [ mulf8s::b#0 ] +Uplifting [mulf_init] best 288661 combination zp[2]:56 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] zp[2]:50 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] zp[2]:44 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ] reg byte a [ mulf_init::$1 ] reg byte a [ mulf_init::$4 ] reg byte a [ mulf_init::$5 ] zp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] zp[2]:53 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] zp[2]:47 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [] best 288669 combination zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] zp[2]:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Uplifting [mul8s] best 288356 combination zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] reg byte y [ mul8s::b#0 ] zp[1]:73 [ mul8s::a#0 ] reg byte a [ mul8s::$9 ] reg byte a [ mul8s::$16 ] zp[1]:91 [ mul8s::$13 ] zp[1]:92 [ mul8s::$17 ] +Uplifting [] best 288661 combination zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] zp[2]:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] +Uplifting [mul8s] best 288348 combination zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] reg byte y [ mul8s::b#0 ] zp[1]:72 [ mul8s::a#0 ] reg byte a [ mul8s::$9 ] reg byte a [ mul8s::$16 ] zp[1]:90 [ mul8s::$13 ] zp[1]:91 [ mul8s::$17 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [mulf_tables_cmp] best 288356 combination zp[2]:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] zp[2]:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] -Uplifting [memset] best 288356 combination zp[2]:59 [ memset::dst#2 memset::dst#1 ] -Uplifting [print_str] best 288356 combination zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] -Uplifting [print_byte] best 288333 combination reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [mulf8s_prepared] best 288309 combination zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] zp[1]:94 [ mulf8s_prepared::b#0 ] +Uplifting [mulf_tables_cmp] best 288348 combination zp[2]:40 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] zp[2]:42 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] +Uplifting [memset] best 288348 combination zp[2]:58 [ memset::dst#2 memset::dst#1 ] +Uplifting [print_str] best 288348 combination zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] +Uplifting [print_byte] best 288325 combination reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [mulf8s_prepared] best 288301 combination zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] reg byte a [ mulf8s_prepared::$8 ] reg byte a [ mulf8s_prepared::$15 ] reg byte a [ mulf8s_prepared::$12 ] reg byte a [ mulf8s_prepared::$16 ] zp[1]:93 [ mulf8s_prepared::b#0 ] Limited combination testing to 100 combinations of 512 possible. -Uplifting [print_word] best 288309 combination zp[2]:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] -Uplifting [mulf8u_prepared] best 288300 combination reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] zp[2]:97 [ mulf8u_prepared::return#3 ] zp[2]:129 [ mulf8u_prepared::return#2 ] zp[2]:103 [ mulf8u_prepared::return#0 ] -Uplifting [print_sword] best 288300 combination zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] -Uplifting [print_sbyte] best 288288 combination reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -Uplifting [print_char] best 288267 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] -Uplifting [mulf8u_prepare] best 288258 combination reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] -Uplifting [mul8u_error] best 288252 combination reg byte x [ mul8u_error::a#0 ] zp[1]:122 [ mul8u_error::b#0 ] zp[2]:123 [ mul8u_error::ms#0 ] zp[2]:125 [ mul8u_error::mn#0 ] zp[2]:127 [ mul8u_error::mf#0 ] -Uplifting [mul8s_error] best 288246 combination reg byte x [ mul8s_error::a#0 ] zp[1]:78 [ mul8s_error::b#0 ] zp[2]:79 [ mul8s_error::ms#0 ] zp[2]:81 [ mul8s_error::mn#0 ] zp[2]:83 [ mul8s_error::mf#0 ] -Uplifting [RADIX] best 288246 combination -Uplifting [print_ln] best 288246 combination -Uplifting [print_cls] best 288246 combination -Uplifting [main] best 288246 combination -Uplifting [mulf_init_asm] best 288246 combination +Uplifting [print_word] best 288301 combination zp[2]:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] +Uplifting [mulf8u_prepared] best 288292 combination reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] zp[2]:96 [ mulf8u_prepared::return#3 ] zp[2]:128 [ mulf8u_prepared::return#2 ] zp[2]:102 [ mulf8u_prepared::return#0 ] +Uplifting [print_sword] best 288292 combination zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] +Uplifting [print_sbyte] best 288280 combination reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] +Uplifting [print_char] best 288259 combination reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] +Uplifting [mulf8u_prepare] best 288250 combination reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] +Uplifting [mul8u_error] best 288244 combination reg byte x [ mul8u_error::a#0 ] zp[1]:121 [ mul8u_error::b#0 ] zp[2]:122 [ mul8u_error::ms#0 ] zp[2]:124 [ mul8u_error::mn#0 ] zp[2]:126 [ mul8u_error::mf#0 ] +Uplifting [mul8s_error] best 288238 combination reg byte x [ mul8s_error::a#0 ] zp[1]:77 [ mul8s_error::b#0 ] zp[2]:78 [ mul8s_error::ms#0 ] zp[2]:80 [ mul8s_error::mn#0 ] zp[2]:82 [ mul8s_error::mf#0 ] +Uplifting [RADIX] best 288238 combination +Uplifting [print_ln] best 288238 combination +Uplifting [print_cls] best 288238 combination +Uplifting [main] best 288238 combination +Uplifting [mulf_init_asm] best 288238 combination Attempting to uplift remaining variables inzp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Uplifting [mul8s_compare] best 288246 combination zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] -Attempting to uplift remaining variables inzp[1]:61 [ muls8s::a#0 ] -Uplifting [muls8s] best 288246 combination zp[1]:61 [ muls8s::a#0 ] -Attempting to uplift remaining variables inzp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Uplifting [mul8u_compare] best 288246 combination zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] -Attempting to uplift remaining variables inzp[1]:105 [ muls8u::a#0 ] -Uplifting [muls8u] best 288246 combination zp[1]:105 [ muls8u::a#0 ] +Uplifting [mul8s_compare] best 288238 combination zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] +Attempting to uplift remaining variables inzp[1]:60 [ muls8s::a#0 ] +Uplifting [muls8s] best 288238 combination zp[1]:60 [ muls8s::a#0 ] +Attempting to uplift remaining variables inzp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Uplifting [mul8u_compare] best 288238 combination zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] +Attempting to uplift remaining variables inzp[1]:104 [ muls8u::a#0 ] +Uplifting [muls8u] best 288238 combination zp[1]:104 [ muls8u::a#0 ] Attempting to uplift remaining variables inzp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] -Uplifting [mul8s_compare] best 288246 combination zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] -Attempting to uplift remaining variables inzp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Uplifting [mul8u_compare] best 288246 combination zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] -Attempting to uplift remaining variables inzp[1]:53 [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Uplifting [mulf_init] best 288106 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] -Attempting to uplift remaining variables inzp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Uplifting [mulf_init] best 288106 combination zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] -Attempting to uplift remaining variables inzp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] -Uplifting [mulf_init] best 288106 combination zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] -Attempting to uplift remaining variables inzp[1]:73 [ mul8s::a#0 ] -Uplifting [mul8s] best 288106 combination zp[1]:73 [ mul8s::a#0 ] -Attempting to uplift remaining variables inzp[1]:91 [ mul8s::$13 ] -Uplifting [mul8s] best 288100 combination reg byte a [ mul8s::$13 ] -Attempting to uplift remaining variables inzp[1]:92 [ mul8s::$17 ] -Uplifting [mul8s] best 288094 combination reg byte a [ mul8s::$17 ] -Attempting to uplift remaining variables inzp[1]:78 [ mul8s_error::b#0 ] -Uplifting [mul8s_error] best 288094 combination zp[1]:78 [ mul8s_error::b#0 ] -Attempting to uplift remaining variables inzp[1]:94 [ mulf8s_prepared::b#0 ] -Uplifting [mulf8s_prepared] best 288094 combination zp[1]:94 [ mulf8s_prepared::b#0 ] -Attempting to uplift remaining variables inzp[1]:122 [ mul8u_error::b#0 ] -Uplifting [mul8u_error] best 288094 combination zp[1]:122 [ mul8u_error::b#0 ] -Coalescing zero page register [ zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] ] with [ zp[1]:61 [ muls8s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 ] ] with [ zp[1]:73 [ mul8s::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] ] with [ zp[1]:78 [ mul8s_error::b#0 ] ] - score: 1 +Uplifting [mul8s_compare] best 288238 combination zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] +Attempting to uplift remaining variables inzp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Uplifting [mul8u_compare] best 288238 combination zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] +Attempting to uplift remaining variables inzp[1]:52 [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Uplifting [mulf_init] best 288098 combination reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ] +Attempting to uplift remaining variables inzp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] +Uplifting [mulf_init] best 288098 combination zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] +Attempting to uplift remaining variables inzp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] +Uplifting [mulf_init] best 288098 combination zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] +Attempting to uplift remaining variables inzp[1]:72 [ mul8s::a#0 ] +Uplifting [mul8s] best 288098 combination zp[1]:72 [ mul8s::a#0 ] +Attempting to uplift remaining variables inzp[1]:90 [ mul8s::$13 ] +Uplifting [mul8s] best 288092 combination reg byte a [ mul8s::$13 ] +Attempting to uplift remaining variables inzp[1]:91 [ mul8s::$17 ] +Uplifting [mul8s] best 288086 combination reg byte a [ mul8s::$17 ] +Attempting to uplift remaining variables inzp[1]:77 [ mul8s_error::b#0 ] +Uplifting [mul8s_error] best 288086 combination zp[1]:77 [ mul8s_error::b#0 ] +Attempting to uplift remaining variables inzp[1]:93 [ mulf8s_prepared::b#0 ] +Uplifting [mulf8s_prepared] best 288086 combination zp[1]:93 [ mulf8s_prepared::b#0 ] +Attempting to uplift remaining variables inzp[1]:121 [ mul8u_error::b#0 ] +Uplifting [mul8u_error] best 288086 combination zp[1]:121 [ mul8u_error::b#0 ] +Coalescing zero page register [ zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 ] ] with [ zp[1]:60 [ muls8s::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 ] ] with [ zp[1]:72 [ mul8s::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 ] ] with [ zp[1]:77 [ mul8s_error::b#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 ] ] with [ zp[2]:10 [ print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] ] with [ zp[2]:79 [ mul8s_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] ] with [ zp[2]:75 [ mul8s_compare::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 ] ] with [ zp[2]:87 [ mul8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:117 [ mul8u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:95 [ mulf8s::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp[2]:97 [ mulf8u_prepared::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] ] with [ zp[2]:63 [ muls8s::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 ] ] with [ zp[1]:105 [ muls8u::a#0 ] ] - score: 1 -Coalescing zero page register [ zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 ] ] with [ zp[1]:122 [ mul8u_error::b#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] ] with [ zp[2]:107 [ muls8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:69 [ mulf8s::return#2 ] ] with [ zp[2]:71 [ mul8s_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:103 [ mulf8u_prepared::return#0 ] ] with [ zp[2]:129 [ mulf8u_prepared::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:109 [ mul8u_compare::ms#0 ] ] with [ zp[2]:123 [ mul8u_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:113 [ mulf8u::return#2 ] ] with [ zp[2]:115 [ mul8u_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:113 [ mulf8u::return#2 mul8u_compare::mf#0 ] ] with [ zp[2]:131 [ mulf8u::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:119 [ mul8u_compare::mn#0 ] ] with [ zp[2]:125 [ mul8u_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 ] ] with [ zp[2]:43 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] with [ zp[2]:65 [ mul8s_compare::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 ] ] with [ zp[2]:109 [ mul8u_compare::ms#0 mul8u_error::ms#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 ] ] with [ zp[2]:23 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] with [ zp[2]:81 [ mul8s_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 ] ] with [ zp[2]:69 [ mulf8s::return#2 mul8s_compare::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 ] ] with [ zp[2]:103 [ mulf8u_prepared::return#0 mulf8u_prepared::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:113 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 ] ] with [ zp[2]:127 [ mul8u_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 ] ] with [ zp[2]:32 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 ] ] with [ zp[2]:39 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 ] ] with [ zp[2]:119 [ mul8u_compare::mn#0 mul8u_error::mn#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 ] ] with [ zp[2]:83 [ mul8s_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 ] ] with [ zp[2]:113 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ] with [ zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] ] -Coalescing zero page register [ zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] ] with [ zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] ] -Coalescing zero page register [ zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] ] with [ zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ] -Coalescing zero page register [ zp[2]:41 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] ] with [ zp[2]:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] ] -Coalescing zero page register [ zp[2]:45 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] -Coalescing zero page register [ zp[2]:48 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] ] -Coalescing zero page register [ zp[2]:51 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] ] -Coalescing zero page register [ zp[2]:54 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp[2]:27 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] -Coalescing zero page register [ zp[2]:59 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:57 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] -Coalescing zero page register [ zp[1]:94 [ mulf8s_prepared::b#0 ] ] with [ zp[1]:47 [ mulf_init::c#2 mulf_init::c#1 ] ] -Coalescing zero page register [ zp[1]:56 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp[1]:35 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] ] -Coalescing zero page register [ zp[2]:59 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp[2]:25 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] ] -Coalescing zero page register [ zp[1]:94 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:36 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ] -Allocated (was zp[2]:41) zp[2]:2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] -Allocated (was zp[2]:45) zp[2]:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] -Allocated (was zp[2]:48) zp[2]:6 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] -Allocated (was zp[2]:51) zp[2]:8 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] -Allocated (was zp[2]:54) zp[2]:10 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] -Allocated (was zp[1]:56) zp[1]:12 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] -Allocated (was zp[2]:59) zp[2]:13 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] -Allocated (was zp[1]:94) zp[1]:15 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] +Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 ] ] with [ zp[2]:78 [ mul8s_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 ] ] with [ zp[2]:74 [ mul8s_compare::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 ] ] with [ zp[2]:86 [ mul8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:22 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp[2]:116 [ mul8u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 ] ] with [ zp[2]:94 [ mulf8s::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 ] ] with [ zp[2]:96 [ mulf8u_prepared::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:31 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 ] ] with [ zp[2]:62 [ muls8s::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 ] ] with [ zp[1]:104 [ muls8u::a#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 ] ] with [ zp[1]:121 [ mul8u_error::b#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:38 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 ] ] with [ zp[2]:106 [ muls8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:68 [ mulf8s::return#2 ] ] with [ zp[2]:70 [ mul8s_compare::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:102 [ mulf8u_prepared::return#0 ] ] with [ zp[2]:128 [ mulf8u_prepared::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:108 [ mul8u_compare::ms#0 ] ] with [ zp[2]:122 [ mul8u_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:112 [ mulf8u::return#2 ] ] with [ zp[2]:114 [ mul8u_compare::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:112 [ mulf8u::return#2 mul8u_compare::mf#0 ] ] with [ zp[2]:130 [ mulf8u::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:118 [ mul8u_compare::mn#0 ] ] with [ zp[2]:124 [ mul8u_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 ] ] with [ zp[2]:42 [ mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 ] ] with [ zp[2]:64 [ mul8s_compare::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 ] ] with [ zp[2]:108 [ mul8u_compare::ms#0 mul8u_error::ms#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 ] ] with [ zp[2]:22 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] with [ zp[2]:80 [ mul8s_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 ] ] with [ zp[2]:68 [ mulf8s::return#2 mul8s_compare::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 ] ] with [ zp[2]:102 [ mulf8u_prepared::return#0 mulf8u_prepared::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:112 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 ] ] with [ zp[2]:126 [ mul8u_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 ] ] with [ zp[2]:31 [ muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 ] ] with [ zp[2]:38 [ muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 ] ] with [ zp[2]:118 [ mul8u_compare::mn#0 mul8u_error::mn#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 ] ] with [ zp[2]:82 [ mul8s_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 ] ] with [ zp[2]:112 [ mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:24 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] ] with [ zp[2]:15 [ print_str::str#16 print_str::str#18 print_str::str#0 ] ] +Coalescing zero page register [ zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 ] ] with [ zp[1]:2 [ mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] ] +Coalescing zero page register [ zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 ] ] with [ zp[1]:3 [ mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ] +Coalescing zero page register [ zp[2]:40 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 ] ] with [ zp[2]:5 [ print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] ] +Coalescing zero page register [ zp[2]:44 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ] ] with [ zp[2]:7 [ print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] ] +Coalescing zero page register [ zp[2]:47 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ] ] with [ zp[2]:13 [ print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] ] +Coalescing zero page register [ zp[2]:50 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 ] ] with [ zp[2]:18 [ mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] ] +Coalescing zero page register [ zp[2]:53 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] ] with [ zp[2]:26 [ mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] ] +Coalescing zero page register [ zp[2]:58 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:56 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] +Coalescing zero page register [ zp[1]:93 [ mulf8s_prepared::b#0 ] ] with [ zp[1]:46 [ mulf_init::c#2 mulf_init::c#1 ] ] +Coalescing zero page register [ zp[1]:55 [ mulf_init::dir#2 mulf_init::dir#4 ] ] with [ zp[1]:34 [ mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] ] +Coalescing zero page register [ zp[2]:58 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] ] with [ zp[2]:24 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] ] +Coalescing zero page register [ zp[1]:93 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 ] ] with [ zp[1]:35 [ mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ] +Allocated (was zp[2]:40) zp[2]:2 [ mulf_tables_cmp::kc_sqr#2 mulf_tables_cmp::kc_sqr#1 print_line_cursor#23 print_line_cursor#45 print_line_cursor#1 print_line_cursor#11 ] +Allocated (was zp[2]:44) zp[2]:4 [ mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 print_sword::w#6 print_sword::w#0 print_sword::w#4 print_sword::w#1 print_sword::w#2 print_sword::w#3 print_word::w#6 print_word::w#3 print_word::w#4 print_word::w#5 print_word::w#1 print_word::w#2 print_word::w#0 mul8s_error::ms#0 mulf_tables_cmp::asm_sqr#2 mulf_tables_cmp::asm_sqr#1 mul8s_compare::ms#0 mul8u_compare::ms#0 mul8u_error::ms#0 muls8s::return#0 muls8s::m#5 muls8s::m#3 muls8s::m#1 muls8s::m#2 muls8s::return#2 muls8u::return#0 muls8u::m#3 muls8u::m#1 muls8u::return#2 ] +Allocated (was zp[2]:47) zp[2]:6 [ mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 print_char_cursor#155 print_char_cursor#189 print_char_cursor#190 print_char_cursor#142 print_char_cursor#86 print_char_cursor#143 print_char_cursor#135 print_char_cursor#134 print_char_cursor#19 print_char_cursor#100 print_char_cursor#1 print_char_cursor#226 ] +Allocated (was zp[2]:50) zp[2]:8 [ mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 mul8s::m#4 mul8s::m#5 mul8s::m#1 mul8s::m#0 mul8s::m#2 mul8s_compare::mn#0 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 mul8s_error::mn#0 mul8u_compare::mn#0 mul8u_error::mn#0 ] +Allocated (was zp[2]:53) zp[2]:10 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 mulf8s_prepared::m#4 mulf8s_prepared::m#5 mulf8s_prepared::m#1 mulf8s_prepared::m#0 mulf8s_prepared::m#2 mulf8s::return#0 mulf8u_prepared::return#3 mulf8s::return#2 mul8s_compare::mf#0 mulf8u_prepared::return#0 mulf8u_prepared::return#2 mul8s_error::mf#0 mulf8u::return#2 mul8u_compare::mf#0 mulf8u::return#0 mul8u_error::mf#0 ] +Allocated (was zp[1]:55) zp[1]:12 [ mulf_init::dir#2 mulf_init::dir#4 mul8u_compare::a#7 mul8u_compare::a#1 muls8u::a#0 mul8s_compare::a#10 mul8s_compare::a#1 muls8s::a#0 mul8s::a#0 ] +Allocated (was zp[2]:58) zp[2]:13 [ memset::dst#2 memset::dst#1 mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 print_str::str#16 print_str::str#18 print_str::str#0 ] +Allocated (was zp[1]:93) zp[1]:15 [ mulf8s_prepared::b#0 mulf_init::c#2 mulf_init::c#1 mul8u_compare::b#10 mul8u_compare::b#1 mul8u_error::b#0 mul8s_compare::b#10 mul8s_compare::b#1 mul8s_error::b#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -8315,7 +8252,7 @@ main: { lda #5 sta BGCOL // [5] call print_cls - // [335] phi from main to print_cls [phi:main->print_cls] + // [336] phi from main to print_cls [phi:main->print_cls] print_cls_from_main: jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] @@ -8324,7 +8261,7 @@ main: { // main::@1 __b1: // [7] call mulf_init - // [306] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [307] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] mulf_init_from___b1: jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -8340,7 +8277,7 @@ main: { // main::@3 __b3: // [11] call mulf_tables_cmp - // [279] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] + // [280] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] mulf_tables_cmp_from___b3: jsr mulf_tables_cmp // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] @@ -8349,7 +8286,7 @@ main: { // main::@4 __b4: // [13] call mul8u_compare - // [201] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] + // [202] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] mul8u_compare_from___b4: jsr mul8u_compare // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] @@ -8459,7 +8396,7 @@ mul8s_compare: { // [34] (signed byte) mulf8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsxx=vbsz1 ldx.z b // [35] call mulf8s - // [158] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] + // [159] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] mulf8s_from___b12: jsr mulf8s // [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 @@ -9013,10 +8950,7 @@ mul8s: { // [148] phi from mul8s to mul8u [phi:mul8s->mul8u] mul8u_from_mul8s: // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8s->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- vwuz1=vbuaa - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [148] phi (byte) mul8u::b#2 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- register_copy jsr mul8u // [135] (word) mul8u::return#2 ← (word) mul8u::res#2 jmp __b5 @@ -9078,38 +9012,42 @@ mul8u: { .label mb = $d .label res = 8 .label return = 8 - // [149] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 -- vwuz1=_word_vbuaa + sta.z mb + lda #0 + sta.z mb+1 + // [150] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] __b1_from_mul8u: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 + // [150] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [150] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z res lda #>0 sta.z res+1 - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [150] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy jmp __b1 // mul8u::@1 __b1: - // [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 + // [151] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 cpx #0 bne __b2 jmp __breturn // mul8u::@return __breturn: - // [151] return + // [152] return rts // mul8u::@2 __b2: - // [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 - // [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 + // [154] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul8u::@4 __b4: - // [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda.z res clc adc.z mb @@ -9117,25 +9055,25 @@ mul8u: { lda.z res+1 adc.z mb+1 sta.z res+1 - // [155] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [156] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] __b3_from___b2: __b3_from___b4: - // [155] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [156] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy jmp __b3 // mul8u::@3 __b3: - // [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [157] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax - // [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [158] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z mb rol.z mb+1 - // [149] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [150] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] __b1_from___b3: - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [150] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [150] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [150] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp __b1 } // mulf8s @@ -9146,27 +9084,27 @@ mulf8s: { jmp mulf8s_prepare1 // mulf8s::mulf8s_prepare1 mulf8s_prepare1: - // [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - // [160] call mulf8u_prepare - // [185] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] + // [160] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 + // [161] call mulf8u_prepare + // [186] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] mulf8u_prepare_from_mulf8s_prepare1: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy + // [186] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy jsr mulf8u_prepare jmp __b1 // mulf8s::@1 __b1: - // [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsxx + // [162] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsxx stx.z mulf8s_prepared.b - // [162] call mulf8s_prepared + // [163] call mulf8s_prepared jsr mulf8s_prepared jmp __b2 // mulf8s::@2 __b2: - // [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + // [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 jmp __breturn // mulf8s::@return __breturn: - // [164] return + // [165] return rts } // mulf8s_prepared @@ -9177,64 +9115,64 @@ mulf8s_prepared: { .label memA = $fd .label m = $a .label b = $f - // [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuxx=vbuz1 + // [166] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuxx=vbuz1 ldx.z b - // [166] call mulf8u_prepared - // [180] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] + // [167] call mulf8u_prepared + // [181] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] mulf8u_prepared_from_mulf8s_prepared: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy + // [181] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy jsr mulf8u_prepared - // [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 + // [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 jmp __b5 // mulf8s_prepared::@5 __b5: - // [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 - // [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 + // [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1_from___b5 jmp __b3 // mulf8s_prepared::@3 __b3: - // [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + // [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 lda.z m+1 - // [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + // [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 sec sbc.z b - // [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa + // [173] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [173] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [174] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] __b1_from___b3: __b1_from___b5: - // [173] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [174] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy jmp __b1 // mulf8s_prepared::@1 __b1: - // [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [175] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2_from___b1 jmp __b4 // mulf8s_prepared::@4 __b4: - // [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + // [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 lda.z m+1 - // [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 + // [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 sec sbc memA - // [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa + // [178] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [178] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [179] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] __b2_from___b1: __b2_from___b4: - // [178] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [179] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy jmp __b2 // mulf8s_prepared::@2 __b2: jmp __breturn // mulf8s_prepared::@return __breturn: - // [179] return + // [180] return rts } // mulf8u_prepared @@ -9245,7 +9183,7 @@ mulf8u_prepared: { .label resL = $fe .label memB = $ff .label return = $a - // [181] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuxx + // [182] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuxx stx memB // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } ldx memB @@ -9260,7 +9198,7 @@ mulf8u_prepared: { sm4: sbc mulf_sqr2_hi,x sta memB - // [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB @@ -9268,7 +9206,7 @@ mulf8u_prepared: { jmp __breturn // mulf8u_prepared::@return __breturn: - // [184] return + // [185] return rts } // mulf8u_prepare @@ -9276,7 +9214,7 @@ mulf8u_prepared: { // mulf8u_prepare(byte register(A) a) mulf8u_prepare: { .label memA = $fd - // [186] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa + // [187] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa sta memA // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } lda memA @@ -9288,7 +9226,7 @@ mulf8u_prepare: { jmp __breturn // mulf8u_prepare::@return __breturn: - // [188] return + // [189] return rts } // muls8s @@ -9299,39 +9237,39 @@ muls8s: { .label m = 4 .label return = 4 .label a = $c - // [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 + // [190] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 lda.z a bmi __b5_from_muls8s jmp __b2 // muls8s::@2 __b2: - // [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 + // [191] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 lda.z a cmp #1 bmi __b1_from___b2 - // [191] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] + // [192] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] __b3_from___b2: - // [191] phi (signed word) muls8s::m#3 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vbsc1 + // [192] phi (signed word) muls8s::m#3 = (signed word) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vwsc1 lda #<0 sta.z m lda #>0 sta.z m+1 - // [191] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsyy=vbsc1 + // [192] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsyy=vbsc1 ldy #0 jmp __b3 // muls8s::@3 __b3: - // [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsyy_neq_vbsz1_then_la1 + // [193] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsyy_neq_vbsz1_then_la1 cpy.z a bne __b4 - // [193] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] + // [194] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] __b1_from___b3: __b1_from___b5: - // [193] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy + // [194] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy jmp __b1 - // [193] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] + // [194] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] __b1_from___b2: - // [193] phi (signed word) muls8s::return#0 = (signed byte) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vbsc1 + // [194] phi (signed word) muls8s::return#0 = (signed word) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vwsc1 lda #<0 sta.z return lda #>0 @@ -9342,11 +9280,11 @@ muls8s: { jmp __breturn // muls8s::@return __breturn: - // [194] return + // [195] return rts // muls8s::@4 __b4: - // [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsxx + // [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsxx txa sta.z $fe ora #$7f @@ -9361,32 +9299,32 @@ muls8s: { lda.z m+1 adc.z $ff sta.z m+1 - // [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsyy=_inc_vbsyy + // [197] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsyy=_inc_vbsyy iny - // [191] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] + // [192] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] __b3_from___b4: - // [191] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy - // [191] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy + // [192] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy + // [192] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy jmp __b3 - // [197] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] + // [198] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] __b5_from_muls8s: - // [197] phi (signed word) muls8s::m#5 = (signed byte) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vbsc1 + // [198] phi (signed word) muls8s::m#5 = (signed word) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vwsc1 lda #<0 sta.z m lda #>0 sta.z m+1 - // [197] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsyy=vbsc1 + // [198] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsyy=vbsc1 ldy #0 jmp __b5 // muls8s::@5 __b5: - // [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsyy_neq_vbsz1_then_la1 + // [199] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsyy_neq_vbsz1_then_la1 cpy.z a bne __b6 jmp __b1_from___b5 // muls8s::@6 __b6: - // [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsxx + // [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsxx txa sta.z $fe ora #$7f @@ -9401,12 +9339,12 @@ muls8s: { lda.z m+1 sbc.z $ff sta.z m+1 - // [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsyy=_dec_vbsyy + // [201] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsyy=_dec_vbsyy dey - // [197] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] + // [198] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] __b5_from___b6: - // [197] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy - // [197] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy + // [198] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy + // [198] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy jmp __b5 } // mul8u_compare @@ -9417,70 +9355,67 @@ mul8u_compare: { .label mn = 8 .label b = $f .label a = $c - // [202] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] + // [203] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] __b1_from_mul8u_compare: - // [202] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 + // [203] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 lda #0 sta.z a jmp __b1 - // [202] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] + // [203] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] __b1_from___b8: - // [202] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy + // [203] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy jmp __b1 // mul8u_compare::@1 __b1: - // [203] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] + // [204] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] __b2_from___b1: - // [203] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 + // [204] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 lda #0 sta.z b jmp __b2 - // [203] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] + // [204] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] __b2_from___b5: - // [203] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy + // [204] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy jmp __b2 // mul8u_compare::@2 __b2: - // [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - // [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + // [205] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + // [206] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 ldx.z b - // [206] call muls8u + // [207] call muls8u jsr muls8u - // [207] (word) muls8u::return#2 ← (word) muls8u::return#0 + // [208] (word) muls8u::return#2 ← (word) muls8u::return#0 jmp __b10 // mul8u_compare::@10 __b10: - // [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 - // [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 + // [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + // [210] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 lda.z a - // [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + // [211] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 ldx.z b - // [211] call mulf8u + // [212] call mulf8u jsr mulf8u - // [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + // [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 jmp __b11 // mul8u_compare::@11 __b11: - // [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 - // [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + // [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + // [215] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 ldx.z a - // [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 + // [216] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 lda.z b - // [216] call mul8u + // [217] call mul8u // [148] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] mul8u_from___b11: // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mul8u_compare::@11->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- vwuz1=vbuaa - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [148] phi (byte) mul8u::b#2 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- register_copy jsr mul8u - // [217] (word) mul8u::return#3 ← (word) mul8u::res#2 + // [218] (word) mul8u::return#3 ← (word) mul8u::res#2 jmp __b12 // mul8u_compare::@12 __b12: - // [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 - // [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 + // [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + // [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 lda.z ms cmp.z mf bne !+ @@ -9488,24 +9423,24 @@ mul8u_compare: { cmp.z mf+1 beq __b3_from___b12 !: - // [220] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] + // [221] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] __b6_from___b12: jmp __b6 // mul8u_compare::@6 __b6: - // [221] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] + // [222] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] __b3_from___b6: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 + // [222] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [221] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] + // [222] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] __b3_from___b12: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 + // [222] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 ldx #1 jmp __b3 // mul8u_compare::@3 __b3: - // [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 + // [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 lda.z ms cmp.z mn bne !+ @@ -9513,69 +9448,69 @@ mul8u_compare: { cmp.z mn+1 beq __b14_from___b3 !: - // [224] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] + // [225] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] __b4_from___b3: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 + // [225] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 ldx #0 jmp __b4 - // [223] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] + // [224] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] __b14_from___b3: jmp __b14 // mul8u_compare::@14 __b14: - // [224] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] + // [225] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] __b4_from___b14: - // [224] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy + // [225] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy jmp __b4 // mul8u_compare::@4 __b4: - // [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 + // [226] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 cpx #0 bne __b5 jmp __b7 // mul8u_compare::@7 __b7: - // [226] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [227] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + // [228] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 ldx.z a - // [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - // [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - // [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - // [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - // [232] call mul8u_error - // [242] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] + // [229] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + // [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + // [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + // [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + // [233] call mul8u_error + // [243] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] mul8u_error_from___b7: jsr mul8u_error jmp __breturn // mul8u_compare::@return __breturn: - // [233] return + // [234] return rts // mul8u_compare::@5 __b5: - // [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 + // [235] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 inc.z b - // [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 + // [236] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 lda.z b cmp #0 bne __b2_from___b5 jmp __b8 // mul8u_compare::@8 __b8: - // [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 + // [237] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 inc.z a - // [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 + // [238] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 lda.z a cmp #0 bne __b1_from___b8 - // [238] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] + // [239] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] __b9_from___b8: jmp __b9 // mul8u_compare::@9 __b9: - // [239] call print_str + // [240] call print_str // [114] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] print_str_from___b9: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy @@ -9585,12 +9520,12 @@ mul8u_compare: { lda #>str sta.z print_str.str+1 jsr print_str - // [240] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] + // [241] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] __b13_from___b9: jmp __b13 // mul8u_compare::@13 __b13: - // [241] call print_ln + // [242] call print_ln // [80] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] print_ln_from___b13: // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy @@ -9607,7 +9542,7 @@ mul8u_error: { .label ms = 4 .label mn = 8 .label mf = $a - // [243] call print_str + // [244] call print_str // [114] phi from mul8u_error to print_str [phi:mul8u_error->print_str] print_str_from_mul8u_error: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy @@ -9620,19 +9555,19 @@ mul8u_error: { jmp __b1 // mul8u_error::@1 __b1: - // [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - // [245] call print_byte + // [245] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + // [246] call print_byte // [106] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] print_byte_from___b1: // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy jsr print_byte - // [246] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] + // [247] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] __b2_from___b1: jmp __b2 // mul8u_error::@2 __b2: - // [247] call print_str + // [248] call print_str // [114] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] print_str_from___b2: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy @@ -9645,20 +9580,20 @@ mul8u_error: { jmp __b3 // mul8u_error::@3 __b3: - // [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 + // [249] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 ldx.z b - // [249] call print_byte + // [250] call print_byte // [106] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] print_byte_from___b3: // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy jsr print_byte - // [250] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] + // [251] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] __b4_from___b3: jmp __b4 // mul8u_error::@4 __b4: - // [251] call print_str + // [252] call print_str // [114] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] print_str_from___b4: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy @@ -9671,19 +9606,19 @@ mul8u_error: { jmp __b5 // mul8u_error::@5 __b5: - // [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - // [253] call print_word + // [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + // [254] call print_word // [100] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] print_word_from___b5: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@5->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#1] -- register_copy jsr print_word - // [254] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] + // [255] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] __b6_from___b5: jmp __b6 // mul8u_error::@6 __b6: - // [255] call print_str + // [256] call print_str // [114] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] print_str_from___b6: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy @@ -9696,23 +9631,23 @@ mul8u_error: { jmp __b7 // mul8u_error::@7 __b7: - // [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 + // [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 lda.z mn sta.z print_word.w lda.z mn+1 sta.z print_word.w+1 - // [257] call print_word + // [258] call print_word // [100] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] print_word_from___b7: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@7->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#1] -- register_copy jsr print_word - // [258] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] + // [259] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] __b8_from___b7: jmp __b8 // mul8u_error::@8 __b8: - // [259] call print_str + // [260] call print_str // [114] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] print_str_from___b8: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy @@ -9725,23 +9660,23 @@ mul8u_error: { jmp __b9 // mul8u_error::@9 __b9: - // [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 + // [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 lda.z mf sta.z print_word.w lda.z mf+1 sta.z print_word.w+1 - // [261] call print_word + // [262] call print_word // [100] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] print_word_from___b9: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@9->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#1] -- register_copy jsr print_word - // [262] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] + // [263] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] __b10_from___b9: jmp __b10 // mul8u_error::@10 __b10: - // [263] call print_ln + // [264] call print_ln // [80] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] print_ln_from___b10: // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy @@ -9750,7 +9685,7 @@ mul8u_error: { jmp __breturn // mul8u_error::@return __breturn: - // [264] return + // [265] return rts str: .text "multiply mismatch " .byte 0 @@ -9760,30 +9695,30 @@ mul8u_error: { // mulf8u(byte register(A) a, byte register(X) b) mulf8u: { .label return = $a - // [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - // [266] call mulf8u_prepare - // [185] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] + // [266] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + // [267] call mulf8u_prepare + // [186] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] mulf8u_prepare_from_mulf8u: - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy + // [186] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy jsr mulf8u_prepare jmp __b1 // mulf8u::@1 __b1: - // [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - // [268] call mulf8u_prepared - // [180] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] + // [268] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + // [269] call mulf8u_prepared + // [181] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] mulf8u_prepared_from___b1: - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy + // [181] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy jsr mulf8u_prepared - // [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + // [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 jmp __b2 // mulf8u::@2 __b2: - // [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + // [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 jmp __breturn // mulf8u::@return __breturn: - // [271] return + // [272] return rts } // muls8u @@ -9794,32 +9729,32 @@ muls8u: { .label return = 4 .label m = 4 .label a = $c - // [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 + // [273] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 lda.z a cmp #0 beq __b1_from_muls8u - // [273] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] + // [274] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] __b2_from_muls8u: - // [273] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 + // [274] phi (word) muls8u::m#3 = (word) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vwuc1 lda #<0 sta.z m lda #>0 sta.z m+1 - // [273] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 + // [274] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 ldy #0 jmp __b2 // muls8u::@2 __b2: - // [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 + // [275] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 cpy.z a bne __b3 - // [275] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] + // [276] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] __b1_from___b2: - // [275] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy + // [276] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy jmp __b1 - // [275] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] + // [276] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] __b1_from_muls8u: - // [275] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 + // [276] phi (word) muls8u::return#0 = (word) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z return lda #>0 @@ -9830,11 +9765,11 @@ muls8u: { jmp __breturn // muls8u::@return __breturn: - // [276] return + // [277] return rts // muls8u::@3 __b3: - // [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx + // [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z m @@ -9842,12 +9777,12 @@ muls8u: { bcc !+ inc.z m+1 !: - // [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy + // [279] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy iny - // [273] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] + // [274] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] __b2_from___b3: - // [273] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy - // [273] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy + // [274] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy + // [274] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy jmp __b2 } // mulf_tables_cmp @@ -9856,14 +9791,14 @@ muls8u: { mulf_tables_cmp: { .label asm_sqr = 4 .label kc_sqr = 2 - // [280] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] + // [281] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] __b1_from_mulf_tables_cmp: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte*) mula_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 + // [281] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte*) mula_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 lda #mula_sqr1_lo sta.z asm_sqr+1 - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte*) mulf_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 + // [281] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte*) mulf_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_lo @@ -9871,7 +9806,7 @@ mulf_tables_cmp: { jmp __b1 // mulf_tables_cmp::@1 __b1: - // [281] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 + // [282] if((byte*) mulf_tables_cmp::kc_sqr#2<(const byte*) mulf_sqr1_lo+(word)(number) $200*(number) 4) goto mulf_tables_cmp::@2 -- pbuz1_lt_pbuc1_then_la1 lda.z kc_sqr+1 cmp #>mulf_sqr1_lo+$200*4 bcc __b2 @@ -9880,12 +9815,12 @@ mulf_tables_cmp: { cmp #mulf_tables_cmp::@3] + // [283] phi from mulf_tables_cmp::@1 to mulf_tables_cmp::@3 [phi:mulf_tables_cmp::@1->mulf_tables_cmp::@3] __b3_from___b1: jmp __b3 // mulf_tables_cmp::@3 __b3: - // [283] call print_str + // [284] call print_str // [114] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] print_str_from___b3: // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 @@ -9899,12 +9834,12 @@ mulf_tables_cmp: { lda #>str sta.z print_str.str+1 jsr print_str - // [284] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] + // [285] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] __b6_from___b3: jmp __b6 // mulf_tables_cmp::@6 __b6: - // [285] call print_ln + // [286] call print_ln // [80] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] print_ln_from___b6: // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy @@ -9917,23 +9852,23 @@ mulf_tables_cmp: { jmp __b7 // mulf_tables_cmp::@7 __b7: - // [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 - // [287] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] + // [288] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] __breturn_from___b7: - // [287] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#226 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy + // [288] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy + // [288] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#226 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy jmp __breturn // mulf_tables_cmp::@return __breturn: - // [288] return + // [289] return rts // mulf_tables_cmp::@2 __b2: - // [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + // [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 ldy #0 lda (kc_sqr),y ldy #0 @@ -9942,10 +9877,10 @@ mulf_tables_cmp: { jmp __b5 // mulf_tables_cmp::@5 __b5: - // [290] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [291] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL - // [291] call print_str + // [292] call print_str // [114] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] print_str_from___b5: // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 @@ -9962,19 +9897,19 @@ mulf_tables_cmp: { jmp __b8 // mulf_tables_cmp::@8 __b8: - // [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - // [293] call print_word + // [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + // [294] call print_word // [100] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] print_word_from___b8: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#1] -- register_copy jsr print_word - // [294] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] + // [295] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] __b9_from___b8: jmp __b9 // mulf_tables_cmp::@9 __b9: - // [295] call print_str + // [296] call print_str // [114] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] print_str_from___b9: // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy @@ -9987,42 +9922,42 @@ mulf_tables_cmp: { jmp __b10 // mulf_tables_cmp::@10 __b10: - // [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 + // [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 lda.z kc_sqr sta.z print_word.w lda.z kc_sqr+1 sta.z print_word.w+1 - // [297] call print_word + // [298] call print_word // [100] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] print_word_from___b10: // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#1] -- register_copy jsr print_word - // [287] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] + // [288] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] __breturn_from___b10: - // [287] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 + // [288] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 lda #<$400 sta.z print_line_cursor lda #>$400 sta.z print_line_cursor+1 - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy + // [288] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy jmp __breturn // mulf_tables_cmp::@4 __b4: - // [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 + // [299] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 inc.z asm_sqr bne !+ inc.z asm_sqr+1 !: - // [299] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 + // [300] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2 -- pbuz1=_inc_pbuz1 inc.z kc_sqr bne !+ inc.z kc_sqr+1 !: - // [280] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] + // [281] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] __b1_from___b4: - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy + // [281] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy + // [281] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp __b1 str: .text "multiply tables match!" .byte 0 @@ -10076,22 +10011,22 @@ mulf_init_asm: { dey inx bne !- - // [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) -- _deref_pbuc1=_deref_pbuc2 + // [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_lo sta mem - // [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) -- _deref_pbuc1=_deref_pbuc2 + // [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_hi sta mem - // [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) -- _deref_pbuc1=_deref_pbuc2 + // [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_lo sta mem - // [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) -- _deref_pbuc1=_deref_pbuc2 + // [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_hi sta mem jmp __breturn // mulf_init_asm::@return __breturn: - // [305] return + // [306] return rts } // mulf_init @@ -10109,24 +10044,24 @@ mulf_init: { .label sqr2_lo = 8 //Start with g(0)=f(255) .label dir = $c - // [307] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [308] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] __b1_from_mulf_init: - // [307] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [308] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [308] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [307] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [308] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 - // [307] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [308] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 lda #0 sta.z c - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [308] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -10134,26 +10069,26 @@ mulf_init: { jmp __b1 // mulf_init::@1 __b1: - // [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] + // [310] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] __b5_from___b1: - // [309] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [310] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [310] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [309] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [310] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [310] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -10161,7 +10096,7 @@ mulf_init: { jmp __b5 // mulf_init::@5 __b5: - // [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -10171,114 +10106,114 @@ mulf_init: { jmp __b7 // mulf_init::@7 __b7: - // [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff - // [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff jmp __breturn // mulf_init::@return __breturn: - // [313] return + // [314] return rts // mulf_init::@6 __b6: - // [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y - // [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x ldy #0 sta (sqr2_hi),y - // [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [317] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: - // [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax - // [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [319] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b9_from___b6 - // [320] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [321] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] __b8_from___b6: - // [320] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [321] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir jmp __b8 - // [319] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [320] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] __b9_from___b6: jmp __b9 // mulf_init::@9 __b9: - // [320] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [321] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] __b8_from___b9: - // [320] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [321] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy jmp __b8 // mulf_init::@8 __b8: - // [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [322] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [309] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [310] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] __b5_from___b8: - // [309] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [309] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [310] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [310] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [310] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [310] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: - // [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [323] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c - // [324] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [325] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3_from___b2 jmp __b4 // mulf_init::@4 __b4: - // [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [326] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx - // [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [327] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [327] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [328] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] __b3_from___b2: __b3_from___b4: - // [327] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [327] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [328] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [328] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy jmp __b3 // mulf_init::@3 __b3: - // [328] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 + // [329] (byte~) mulf_init::$4 ← < (word) mulf_init::sqr#3 -- vbuaa=_lo_vwuz1 lda.z sqr - // [329] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa + // [330] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$4 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_lo),y - // [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 - // [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + // [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa ldy #0 sta (sqr1_hi),y - // [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [333] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: - // [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -10286,31 +10221,31 @@ mulf_init: { bcc !+ inc.z sqr+1 !: - // [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [335] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [307] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [308] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] __b1_from___b3: - // [307] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [307] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [307] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [308] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [308] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [308] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [308] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [308] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { - // [336] call memset - // [338] phi from print_cls to memset [phi:print_cls->memset] + // [337] call memset + // [339] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: - // [337] return + // [338] return rts } // memset @@ -10321,9 +10256,9 @@ memset: { .label str = $400 .label end = str+num .label dst = $d - // [339] phi from memset to memset::@1 [phi:memset->memset::@1] + // [340] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: - // [339] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [340] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -10331,7 +10266,7 @@ memset: { jmp __b1 // memset::@1 __b1: - // [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -10341,22 +10276,22 @@ memset: { jmp __breturn // memset::@return __breturn: - // [341] return + // [342] return rts // memset::@2 __b2: - // [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y - // [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [344] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [339] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [340] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] __b1_from___b2: - // [339] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [340] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data @@ -10832,6 +10767,7 @@ Removing instruction jmp __b2 Removing instruction jmp __b4 Removing instruction jmp __b8 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #<0 Removing instruction lda.z a Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: @@ -10968,12 +10904,13 @@ FINAL SYMBOL TABLE (byte) mul8u::a#1 reg byte x 2.0 (byte) mul8u::a#2 reg byte x 101.0 (byte) mul8u::a#3 reg byte x 667.6666666666667 -(byte) mul8u::a#6 reg byte x 105.0 +(byte) mul8u::a#6 reg byte x 52.5 (byte) mul8u::b (byte) mul8u::b#0 reg byte a 4.0 (byte) mul8u::b#1 reg byte a 202.0 +(byte) mul8u::b#2 reg byte a 103.0 (word) mul8u::mb -(word) mul8u::mb#0 mb zp[2]:13 105.0 +(word) mul8u::mb#0 mb zp[2]:13 4.0 (word) mul8u::mb#1 mb zp[2]:13 2002.0 (word) mul8u::mb#2 mb zp[2]:13 429.2857142857143 (word) mul8u::res @@ -11318,8 +11255,7 @@ reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -reg byte a [ mul8u::b#0 ] -reg byte a [ mul8u::b#1 ] +reg byte a [ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] @@ -11363,7 +11299,7 @@ reg byte a [ mulf_init::$5 ] FINAL ASSEMBLER -Score: 238859 +Score: 236851 // File Comments // Test the fast multiplication library @@ -11389,13 +11325,13 @@ main: { sta BGCOL // print_cls() // [5] call print_cls - // [335] phi from main to print_cls [phi:main->print_cls] + // [336] phi from main to print_cls [phi:main->print_cls] jsr print_cls // [6] phi from main to main::@1 [phi:main->main::@1] // main::@1 // mulf_init() // [7] call mulf_init - // [306] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] + // [307] phi from main::@1 to mulf_init [phi:main::@1->mulf_init] jsr mulf_init // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 @@ -11406,13 +11342,13 @@ main: { // main::@3 // mulf_tables_cmp() // [11] call mulf_tables_cmp - // [279] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] + // [280] phi from main::@3 to mulf_tables_cmp [phi:main::@3->mulf_tables_cmp] jsr mulf_tables_cmp // [12] phi from main::@3 to main::@4 [phi:main::@3->main::@4] // main::@4 // mul8u_compare() // [13] call mul8u_compare - // [201] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] + // [202] phi from main::@4 to mul8u_compare [phi:main::@4->mul8u_compare] jsr mul8u_compare // [14] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 @@ -11509,7 +11445,7 @@ mul8s_compare: { // [34] (signed byte) mulf8s::b#0 ← (signed byte) mul8s_compare::b#10 -- vbsxx=vbsz1 ldx.z b // [35] call mulf8s - // [158] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] + // [159] phi from mul8s_compare::@12 to mulf8s [phi:mul8s_compare::@12->mulf8s] jsr mulf8s // mulf8s(a,b) // [36] (signed word) mulf8s::return#2 ← (signed word) mulf8s::return#0 @@ -12002,10 +11938,7 @@ mul8s: { // [134] call mul8u // [148] phi from mul8s to mul8u [phi:mul8s->mul8u] // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:mul8s->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- vwuz1=vbuaa - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [148] phi (byte) mul8u::b#2 = (byte) mul8u::b#0 [phi:mul8s->mul8u#1] -- register_copy jsr mul8u // mul8u((byte)a, (byte) b) // [135] (word) mul8u::return#2 ← (word) mul8u::res#2 @@ -12062,36 +11995,40 @@ mul8u: { .label mb = $d .label res = 8 .label return = 8 - // [149] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1 - lda #<0 + // mb = b + // [149] (word) mul8u::mb#0 ← (word)(byte) mul8u::b#2 -- vwuz1=_word_vbuaa + sta.z mb + lda #0 + sta.z mb+1 + // [150] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1] + // [150] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy + // [150] phi (word) mul8u::res#2 = (word) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vwuc1 sta.z res sta.z res+1 - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy + // [150] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy // mul8u::@1 __b1: // while(a!=0) - // [150] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 + // [151] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1 cpx #0 bne __b2 // mul8u::@return // } - // [151] return + // [152] return rts // mul8u::@2 __b2: // a&1 - // [152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 + // [153] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1 txa and #1 // if( (a&1) != 0) - // [153] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 + // [154] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul8u::@4 // res = res + mb - // [154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 + // [155] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2 lda.z res clc adc.z mb @@ -12099,23 +12036,23 @@ mul8u: { lda.z res+1 adc.z mb+1 sta.z res+1 - // [155] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] - // [155] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy + // [156] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3] + // [156] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy // mul8u::@3 __b3: // a = a>>1 - // [156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 + // [157] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax // mb = mb<<1 - // [157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 + // [158] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z mb rol.z mb+1 - // [149] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] - // [149] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy - // [149] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy - // [149] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy + // [150] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1] + // [150] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy + // [150] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy + // [150] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy jmp __b1 } // mulf8s @@ -12125,22 +12062,22 @@ mulf8s: { .label return = $a // mulf8s::mulf8s_prepare1 // mulf8u_prepare((byte)a) - // [159] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 - // [160] call mulf8u_prepare - // [185] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy + // [160] (byte) mulf8u_prepare::a#1 ← (byte)(signed byte) mulf8s::a#0 + // [161] call mulf8u_prepare + // [186] phi from mulf8s::mulf8s_prepare1 to mulf8u_prepare [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare] + // [186] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#1 [phi:mulf8s::mulf8s_prepare1->mulf8u_prepare#0] -- register_copy jsr mulf8u_prepare // mulf8s::@1 // mulf8s_prepared(b) - // [161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsxx + // [162] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0 -- vbsz1=vbsxx stx.z mulf8s_prepared.b - // [162] call mulf8s_prepared + // [163] call mulf8s_prepared jsr mulf8s_prepared // mulf8s::@2 - // [163] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 + // [164] (signed word) mulf8s::return#0 ← (signed word)(word) mulf8s_prepared::m#4 // mulf8s::@return // } - // [164] return + // [165] return rts } // mulf8s_prepared @@ -12152,58 +12089,58 @@ mulf8s_prepared: { .label m = $a .label b = $f // mulf8u_prepared((byte) b) - // [165] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuxx=vbuz1 + // [166] (byte) mulf8u_prepared::b#1 ← (byte)(signed byte) mulf8s_prepared::b#0 -- vbuxx=vbuz1 ldx.z b - // [166] call mulf8u_prepared - // [180] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy + // [167] call mulf8u_prepared + // [181] phi from mulf8s_prepared to mulf8u_prepared [phi:mulf8s_prepared->mulf8u_prepared] + // [181] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#1 [phi:mulf8s_prepared->mulf8u_prepared#0] -- register_copy jsr mulf8u_prepared // mulf8u_prepared((byte) b) - // [167] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 + // [168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0 // mulf8s_prepared::@5 // m = mulf8u_prepared((byte) b) - // [168] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 + // [169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3 // if(*memA<0) - // [169] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 + // [170] if(*((const signed byte*) mulf8s_prepared::memA)>=(signed byte) 0) goto mulf8s_prepared::@1 -- _deref_pbsc1_ge_0_then_la1 lda memA cmp #0 bpl __b1 // mulf8s_prepared::@3 // >m - // [170] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 + // [171] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 -- vbuaa=_hi_vwuz1 lda.z m+1 // >m = (>m)-(byte)b - // [171] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 + // [172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#0 -- vbuaa=vbuaa_minus_vbuz1 sec sbc.z b - // [172] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa + // [173] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [173] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] - // [173] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy + // [174] phi from mulf8s_prepared::@3 mulf8s_prepared::@5 to mulf8s_prepared::@1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1] + // [174] phi (word) mulf8s_prepared::m#5 = (word) mulf8s_prepared::m#1 [phi:mulf8s_prepared::@3/mulf8s_prepared::@5->mulf8s_prepared::@1#0] -- register_copy // mulf8s_prepared::@1 __b1: // if(b<0) - // [174] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 + // [175] if((signed byte) mulf8s_prepared::b#0>=(signed byte) 0) goto mulf8s_prepared::@2 -- vbsz1_ge_0_then_la1 lda.z b cmp #0 bpl __b2 // mulf8s_prepared::@4 // >m - // [175] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 + // [176] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 -- vbuaa=_hi_vwuz1 lda.z m+1 // >m = (>m)-(byte)*memA - // [176] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 + // [177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA) -- vbuaa=vbuaa_minus__deref_pbuc1 sec sbc memA - // [177] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa + // [178] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 -- vwuz1=vwuz1_sethi_vbuaa sta.z m+1 - // [178] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] - // [178] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy + // [179] phi from mulf8s_prepared::@1 mulf8s_prepared::@4 to mulf8s_prepared::@2 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2] + // [179] phi (word) mulf8s_prepared::m#4 = (word) mulf8s_prepared::m#5 [phi:mulf8s_prepared::@1/mulf8s_prepared::@4->mulf8s_prepared::@2#0] -- register_copy // mulf8s_prepared::@2 __b2: // mulf8s_prepared::@return // } - // [179] return + // [180] return rts } // mulf8u_prepared @@ -12215,7 +12152,7 @@ mulf8u_prepared: { .label memB = $ff .label return = $a // *memB = b - // [181] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuxx + // [182] *((const byte*) mulf8u_prepared::memB) ← (byte) mulf8u_prepared::b#2 -- _deref_pbuc1=vbuxx stx memB // asm // asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB } @@ -12231,14 +12168,14 @@ mulf8u_prepared: { sbc mulf_sqr2_hi,x sta memB // return { *memB, *resL }; - // [183] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + // [184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB) w= *((const byte*) mulf8u_prepared::resL) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda resL sta.z return lda memB sta.z return+1 // mulf8u_prepared::@return // } - // [184] return + // [185] return rts } // mulf8u_prepare @@ -12247,7 +12184,7 @@ mulf8u_prepared: { mulf8u_prepare: { .label memA = $fd // *memA = a - // [186] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa + // [187] *((const byte*) mulf8u_prepare::memA) ← (byte) mulf8u_prepare::a#2 -- _deref_pbuc1=vbuaa sta memA // asm // asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 } @@ -12258,7 +12195,7 @@ mulf8u_prepare: { sta mulf8u_prepared.sm4+1 // mulf8u_prepare::@return // } - // [188] return + // [189] return rts } // muls8s @@ -12270,45 +12207,45 @@ muls8s: { .label return = 4 .label a = $c // if(a<0) - // [189] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 + // [190] if((signed byte) muls8s::a#0<(signed byte) 0) goto muls8s::@5 -- vbsz1_lt_0_then_la1 lda.z a bmi b3 // muls8s::@2 // if (a>0) - // [190] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 + // [191] if((signed byte) muls8s::a#0<=(signed byte) 0) goto muls8s::@1 -- vbsz1_le_0_then_la1 cmp #1 bmi b2 - // [191] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] - // [191] phi (signed word) muls8s::m#3 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vbsc1 + // [192] phi from muls8s::@2 to muls8s::@3 [phi:muls8s::@2->muls8s::@3] + // [192] phi (signed word) muls8s::m#3 = (signed word) 0 [phi:muls8s::@2->muls8s::@3#0] -- vwsz1=vwsc1 lda #<0 sta.z m sta.z m+1 - // [191] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsyy=vbsc1 + // [192] phi (signed byte) muls8s::j#2 = (signed byte) 0 [phi:muls8s::@2->muls8s::@3#1] -- vbsyy=vbsc1 tay // muls8s::@3 __b3: // for(signed byte j = 0; j!=a; j++) - // [192] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsyy_neq_vbsz1_then_la1 + // [193] if((signed byte) muls8s::j#2!=(signed byte) muls8s::a#0) goto muls8s::@4 -- vbsyy_neq_vbsz1_then_la1 cpy.z a bne __b4 - // [193] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] - // [193] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy + // [194] phi from muls8s::@3 muls8s::@5 to muls8s::@1 [phi:muls8s::@3/muls8s::@5->muls8s::@1] + // [194] phi (signed word) muls8s::return#0 = (signed word) muls8s::m#3 [phi:muls8s::@3/muls8s::@5->muls8s::@1#0] -- register_copy rts - // [193] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] + // [194] phi from muls8s::@2 to muls8s::@1 [phi:muls8s::@2->muls8s::@1] b2: - // [193] phi (signed word) muls8s::return#0 = (signed byte) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vbsc1 + // [194] phi (signed word) muls8s::return#0 = (signed word) 0 [phi:muls8s::@2->muls8s::@1#0] -- vwsz1=vwsc1 lda #<0 sta.z return sta.z return+1 // muls8s::@1 // muls8s::@return // } - // [194] return + // [195] return rts // muls8s::@4 __b4: // m = m + b - // [195] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsxx + // [196] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0 -- vwsz1=vwsz1_plus_vbsxx txa sta.z $fe ora #$7f @@ -12324,31 +12261,31 @@ muls8s: { adc.z $ff sta.z m+1 // for(signed byte j = 0; j!=a; j++) - // [196] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsyy=_inc_vbsyy + // [197] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2 -- vbsyy=_inc_vbsyy iny - // [191] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] - // [191] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy - // [191] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy + // [192] phi from muls8s::@4 to muls8s::@3 [phi:muls8s::@4->muls8s::@3] + // [192] phi (signed word) muls8s::m#3 = (signed word) muls8s::m#1 [phi:muls8s::@4->muls8s::@3#0] -- register_copy + // [192] phi (signed byte) muls8s::j#2 = (signed byte) muls8s::j#1 [phi:muls8s::@4->muls8s::@3#1] -- register_copy jmp __b3 - // [197] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] + // [198] phi from muls8s to muls8s::@5 [phi:muls8s->muls8s::@5] b3: - // [197] phi (signed word) muls8s::m#5 = (signed byte) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vbsc1 + // [198] phi (signed word) muls8s::m#5 = (signed word) 0 [phi:muls8s->muls8s::@5#0] -- vwsz1=vwsc1 lda #<0 sta.z m sta.z m+1 - // [197] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsyy=vbsc1 + // [198] phi (signed byte) muls8s::i#2 = (signed byte) 0 [phi:muls8s->muls8s::@5#1] -- vbsyy=vbsc1 tay // muls8s::@5 __b5: // for(signed byte i = 0; i!=a; i--) - // [198] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsyy_neq_vbsz1_then_la1 + // [199] if((signed byte) muls8s::i#2!=(signed byte) muls8s::a#0) goto muls8s::@6 -- vbsyy_neq_vbsz1_then_la1 cpy.z a bne __b6 rts // muls8s::@6 __b6: // m = m - b - // [199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsxx + // [200] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0 -- vwsz1=vwsz1_minus_vbsxx txa sta.z $fe ora #$7f @@ -12364,11 +12301,11 @@ muls8s: { sbc.z $ff sta.z m+1 // for(signed byte i = 0; i!=a; i--) - // [200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsyy=_dec_vbsyy + // [201] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2 -- vbsyy=_dec_vbsyy dey - // [197] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] - // [197] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy - // [197] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy + // [198] phi from muls8s::@6 to muls8s::@5 [phi:muls8s::@6->muls8s::@5] + // [198] phi (signed word) muls8s::m#5 = (signed word) muls8s::m#2 [phi:muls8s::@6->muls8s::@5#0] -- register_copy + // [198] phi (signed byte) muls8s::i#2 = (signed byte) muls8s::i#1 [phi:muls8s::@6->muls8s::@5#1] -- register_copy jmp __b5 } // mul8u_compare @@ -12379,63 +12316,60 @@ mul8u_compare: { .label mn = 8 .label b = $f .label a = $c - // [202] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] - // [202] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 + // [203] phi from mul8u_compare to mul8u_compare::@1 [phi:mul8u_compare->mul8u_compare::@1] + // [203] phi (byte) mul8u_compare::a#7 = (byte) 0 [phi:mul8u_compare->mul8u_compare::@1#0] -- vbuz1=vbuc1 lda #0 sta.z a - // [202] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] - // [202] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy + // [203] phi from mul8u_compare::@8 to mul8u_compare::@1 [phi:mul8u_compare::@8->mul8u_compare::@1] + // [203] phi (byte) mul8u_compare::a#7 = (byte) mul8u_compare::a#1 [phi:mul8u_compare::@8->mul8u_compare::@1#0] -- register_copy // mul8u_compare::@1 __b1: - // [203] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] - // [203] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 + // [204] phi from mul8u_compare::@1 to mul8u_compare::@2 [phi:mul8u_compare::@1->mul8u_compare::@2] + // [204] phi (byte) mul8u_compare::b#10 = (byte) 0 [phi:mul8u_compare::@1->mul8u_compare::@2#0] -- vbuz1=vbuc1 lda #0 sta.z b - // [203] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] - // [203] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy + // [204] phi from mul8u_compare::@5 to mul8u_compare::@2 [phi:mul8u_compare::@5->mul8u_compare::@2] + // [204] phi (byte) mul8u_compare::b#10 = (byte) mul8u_compare::b#1 [phi:mul8u_compare::@5->mul8u_compare::@2#0] -- register_copy // mul8u_compare::@2 __b2: // muls8u(a, b) - // [204] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 - // [205] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + // [205] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7 + // [206] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 ldx.z b - // [206] call muls8u + // [207] call muls8u jsr muls8u - // [207] (word) muls8u::return#2 ← (word) muls8u::return#0 + // [208] (word) muls8u::return#2 ← (word) muls8u::return#0 // mul8u_compare::@10 // ms = muls8u(a, b) - // [208] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 + // [209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2 // mulf8u(a,b) - // [209] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 + // [210] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7 -- vbuaa=vbuz1 lda.z a - // [210] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 + // [211] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10 -- vbuxx=vbuz1 ldx.z b - // [211] call mulf8u + // [212] call mulf8u jsr mulf8u - // [212] (word) mulf8u::return#2 ← (word) mulf8u::return#0 + // [213] (word) mulf8u::return#2 ← (word) mulf8u::return#0 // mul8u_compare::@11 // mf = mulf8u(a,b) - // [213] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 + // [214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2 // mul8u(a,b) - // [214] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + // [215] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 ldx.z a - // [215] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 + // [216] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10 -- vbuaa=vbuz1 lda.z b - // [216] call mul8u + // [217] call mul8u // [148] phi from mul8u_compare::@11 to mul8u [phi:mul8u_compare::@11->mul8u] // [148] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:mul8u_compare::@11->mul8u#0] -- register_copy - // [148] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- vwuz1=vbuaa - sta.z mul8u.mb - lda #0 - sta.z mul8u.mb+1 + // [148] phi (byte) mul8u::b#2 = (byte) mul8u::b#1 [phi:mul8u_compare::@11->mul8u#1] -- register_copy jsr mul8u // mul8u(a,b) - // [217] (word) mul8u::return#3 ← (word) mul8u::res#2 + // [218] (word) mul8u::return#3 ← (word) mul8u::res#2 // mul8u_compare::@12 // mn = mul8u(a,b) - // [218] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 + // [219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3 // if(ms!=mf) - // [219] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 + // [220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3 -- vwuz1_eq_vwuz2_then_la1 lda.z ms cmp.z mf bne !+ @@ -12443,20 +12377,20 @@ mul8u_compare: { cmp.z mf+1 beq b1 !: - // [220] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] + // [221] phi from mul8u_compare::@12 to mul8u_compare::@6 [phi:mul8u_compare::@12->mul8u_compare::@6] // mul8u_compare::@6 - // [221] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 + // [222] phi from mul8u_compare::@6 to mul8u_compare::@3 [phi:mul8u_compare::@6->mul8u_compare::@3] + // [222] phi (byte) mul8u_compare::ok#4 = (byte) 0 [phi:mul8u_compare::@6->mul8u_compare::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 - // [221] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] + // [222] phi from mul8u_compare::@12 to mul8u_compare::@3 [phi:mul8u_compare::@12->mul8u_compare::@3] b1: - // [221] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 + // [222] phi (byte) mul8u_compare::ok#4 = (byte) 1 [phi:mul8u_compare::@12->mul8u_compare::@3#0] -- vbuxx=vbuc1 ldx #1 // mul8u_compare::@3 __b3: // if(ms!=mn) - // [222] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 + // [223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@14 -- vwuz1_eq_vwuz2_then_la1 lda.z ms cmp.z mn bne !+ @@ -12464,59 +12398,59 @@ mul8u_compare: { cmp.z mn+1 beq __b4 !: - // [224] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] - // [224] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 + // [225] phi from mul8u_compare::@3 to mul8u_compare::@4 [phi:mul8u_compare::@3->mul8u_compare::@4] + // [225] phi (byte) mul8u_compare::ok#3 = (byte) 0 [phi:mul8u_compare::@3->mul8u_compare::@4#0] -- vbuxx=vbuc1 ldx #0 - // [223] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] + // [224] phi from mul8u_compare::@3 to mul8u_compare::@14 [phi:mul8u_compare::@3->mul8u_compare::@14] // mul8u_compare::@14 - // [224] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] - // [224] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy + // [225] phi from mul8u_compare::@14 to mul8u_compare::@4 [phi:mul8u_compare::@14->mul8u_compare::@4] + // [225] phi (byte) mul8u_compare::ok#3 = (byte) mul8u_compare::ok#4 [phi:mul8u_compare::@14->mul8u_compare::@4#0] -- register_copy // mul8u_compare::@4 __b4: // if(ok==0) - // [225] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 + // [226] if((byte) mul8u_compare::ok#3!=(byte) 0) goto mul8u_compare::@5 -- vbuxx_neq_0_then_la1 cpx #0 bne __b5 // mul8u_compare::@7 // *BGCOL = 2 - // [226] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [227] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL // mul8u_error(a,b, ms, mn, mf) - // [227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 + // [228] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7 -- vbuxx=vbuz1 ldx.z a - // [228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 - // [229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 - // [230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 - // [231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 - // [232] call mul8u_error - // [242] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] + // [229] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10 + // [230] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0 + // [231] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0 + // [232] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0 + // [233] call mul8u_error + // [243] phi from mul8u_compare::@7 to mul8u_error [phi:mul8u_compare::@7->mul8u_error] jsr mul8u_error // mul8u_compare::@return // } - // [233] return + // [234] return rts // mul8u_compare::@5 __b5: // for(byte b: 0..255) - // [234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 + // [235] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10 -- vbuz1=_inc_vbuz1 inc.z b - // [235] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 + // [236] if((byte) mul8u_compare::b#1!=(byte) 0) goto mul8u_compare::@2 -- vbuz1_neq_0_then_la1 lda.z b cmp #0 bne __b2 // mul8u_compare::@8 // for(byte a: 0..255) - // [236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 + // [237] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7 -- vbuz1=_inc_vbuz1 inc.z a - // [237] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 + // [238] if((byte) mul8u_compare::a#1!=(byte) 0) goto mul8u_compare::@1 -- vbuz1_neq_0_then_la1 lda.z a cmp #0 bne __b1 - // [238] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] + // [239] phi from mul8u_compare::@8 to mul8u_compare::@9 [phi:mul8u_compare::@8->mul8u_compare::@9] // mul8u_compare::@9 // print_str("multiply results match!") - // [239] call print_str + // [240] call print_str // [114] phi from mul8u_compare::@9 to print_str [phi:mul8u_compare::@9->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_compare::@9->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) mul8u_compare::str [phi:mul8u_compare::@9->print_str#1] -- pbuz1=pbuc1 @@ -12525,10 +12459,10 @@ mul8u_compare: { lda #>str sta.z print_str.str+1 jsr print_str - // [240] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] + // [241] phi from mul8u_compare::@9 to mul8u_compare::@13 [phi:mul8u_compare::@9->mul8u_compare::@13] // mul8u_compare::@13 // print_ln() - // [241] call print_ln + // [242] call print_ln // [80] phi from mul8u_compare::@13 to print_ln [phi:mul8u_compare::@13->print_ln] // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mul8u_compare::@13->print_ln#0] -- register_copy // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_compare::@13->print_ln#1] -- register_copy @@ -12545,7 +12479,7 @@ mul8u_error: { .label mn = 8 .label mf = $a // print_str("multiply mismatch ") - // [243] call print_str + // [244] call print_str // [114] phi from mul8u_error to print_str [phi:mul8u_error->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#100 [phi:mul8u_error->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) mul8u_error::str [phi:mul8u_error->print_str#1] -- pbuz1=pbuc1 @@ -12556,16 +12490,16 @@ mul8u_error: { jsr print_str // mul8u_error::@1 // print_byte(a) - // [244] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 - // [245] call print_byte + // [245] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0 + // [246] call print_byte // [106] phi from mul8u_error::@1 to print_byte [phi:mul8u_error::@1->print_byte] // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@1->print_byte#0] -- register_copy // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#3 [phi:mul8u_error::@1->print_byte#1] -- register_copy jsr print_byte - // [246] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] + // [247] phi from mul8u_error::@1 to mul8u_error::@2 [phi:mul8u_error::@1->mul8u_error::@2] // mul8u_error::@2 // print_str("*") - // [247] call print_str + // [248] call print_str // [114] phi from mul8u_error::@2 to print_str [phi:mul8u_error::@2->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@2->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) str1 [phi:mul8u_error::@2->print_str#1] -- pbuz1=pbuc1 @@ -12576,17 +12510,17 @@ mul8u_error: { jsr print_str // mul8u_error::@3 // print_byte(b) - // [248] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 + // [249] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0 -- vbuxx=vbuz1 ldx.z b - // [249] call print_byte + // [250] call print_byte // [106] phi from mul8u_error::@3 to print_byte [phi:mul8u_error::@3->print_byte] // [106] phi (byte*) print_char_cursor#143 = (byte*) print_char_cursor#134 [phi:mul8u_error::@3->print_byte#0] -- register_copy // [106] phi (byte) print_byte::b#5 = (byte) print_byte::b#4 [phi:mul8u_error::@3->print_byte#1] -- register_copy jsr print_byte - // [250] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] + // [251] phi from mul8u_error::@3 to mul8u_error::@4 [phi:mul8u_error::@3->mul8u_error::@4] // mul8u_error::@4 // print_str(" slow:") - // [251] call print_str + // [252] call print_str // [114] phi from mul8u_error::@4 to print_str [phi:mul8u_error::@4->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@4->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) str2 [phi:mul8u_error::@4->print_str#1] -- pbuz1=pbuc1 @@ -12597,16 +12531,16 @@ mul8u_error: { jsr print_str // mul8u_error::@5 // print_word(ms) - // [252] (word) print_word::w#3 ← (word) mul8u_error::ms#0 - // [253] call print_word + // [253] (word) print_word::w#3 ← (word) mul8u_error::ms#0 + // [254] call print_word // [100] phi from mul8u_error::@5 to print_word [phi:mul8u_error::@5->print_word] // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@5->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#3 [phi:mul8u_error::@5->print_word#1] -- register_copy jsr print_word - // [254] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] + // [255] phi from mul8u_error::@5 to mul8u_error::@6 [phi:mul8u_error::@5->mul8u_error::@6] // mul8u_error::@6 // print_str(" / normal:") - // [255] call print_str + // [256] call print_str // [114] phi from mul8u_error::@6 to print_str [phi:mul8u_error::@6->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@6->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) str3 [phi:mul8u_error::@6->print_str#1] -- pbuz1=pbuc1 @@ -12617,20 +12551,20 @@ mul8u_error: { jsr print_str // mul8u_error::@7 // print_word(mn) - // [256] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 + // [257] (word) print_word::w#4 ← (word) mul8u_error::mn#0 -- vwuz1=vwuz2 lda.z mn sta.z print_word.w lda.z mn+1 sta.z print_word.w+1 - // [257] call print_word + // [258] call print_word // [100] phi from mul8u_error::@7 to print_word [phi:mul8u_error::@7->print_word] // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@7->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#4 [phi:mul8u_error::@7->print_word#1] -- register_copy jsr print_word - // [258] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] + // [259] phi from mul8u_error::@7 to mul8u_error::@8 [phi:mul8u_error::@7->mul8u_error::@8] // mul8u_error::@8 // print_str(" / fast:") - // [259] call print_str + // [260] call print_str // [114] phi from mul8u_error::@8 to print_str [phi:mul8u_error::@8->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mul8u_error::@8->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) str4 [phi:mul8u_error::@8->print_str#1] -- pbuz1=pbuc1 @@ -12641,27 +12575,27 @@ mul8u_error: { jsr print_str // mul8u_error::@9 // print_word(mf) - // [260] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 + // [261] (word) print_word::w#5 ← (word) mul8u_error::mf#0 -- vwuz1=vwuz2 lda.z mf sta.z print_word.w lda.z mf+1 sta.z print_word.w+1 - // [261] call print_word + // [262] call print_word // [100] phi from mul8u_error::@9 to print_word [phi:mul8u_error::@9->print_word] // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mul8u_error::@9->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#5 [phi:mul8u_error::@9->print_word#1] -- register_copy jsr print_word - // [262] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] + // [263] phi from mul8u_error::@9 to mul8u_error::@10 [phi:mul8u_error::@9->mul8u_error::@10] // mul8u_error::@10 // print_ln() - // [263] call print_ln + // [264] call print_ln // [80] phi from mul8u_error::@10 to print_ln [phi:mul8u_error::@10->print_ln] // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#19 [phi:mul8u_error::@10->print_ln#0] -- register_copy // [80] phi (byte*) print_line_cursor#45 = (byte*) print_line_cursor#11 [phi:mul8u_error::@10->print_ln#1] -- register_copy jsr print_ln // mul8u_error::@return // } - // [264] return + // [265] return rts str: .text "multiply mismatch " .byte 0 @@ -12672,25 +12606,25 @@ mul8u_error: { mulf8u: { .label return = $a // mulf8u_prepare(a) - // [265] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 - // [266] call mulf8u_prepare - // [185] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] - // [185] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy + // [266] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0 + // [267] call mulf8u_prepare + // [186] phi from mulf8u to mulf8u_prepare [phi:mulf8u->mulf8u_prepare] + // [186] phi (byte) mulf8u_prepare::a#2 = (byte) mulf8u_prepare::a#0 [phi:mulf8u->mulf8u_prepare#0] -- register_copy jsr mulf8u_prepare // mulf8u::@1 // mulf8u_prepared(b) - // [267] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 - // [268] call mulf8u_prepared - // [180] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] - // [180] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy + // [268] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0 + // [269] call mulf8u_prepared + // [181] phi from mulf8u::@1 to mulf8u_prepared [phi:mulf8u::@1->mulf8u_prepared] + // [181] phi (byte) mulf8u_prepared::b#2 = (byte) mulf8u_prepared::b#0 [phi:mulf8u::@1->mulf8u_prepared#0] -- register_copy jsr mulf8u_prepared // mulf8u_prepared(b) - // [269] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 + // [270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 // mulf8u::@2 - // [270] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 + // [271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2 // mulf8u::@return // } - // [271] return + // [272] return rts } // muls8u @@ -12702,41 +12636,41 @@ muls8u: { .label m = 4 .label a = $c // if(a!=0) - // [272] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 + // [273] if((byte) muls8u::a#0==(byte) 0) goto muls8u::@1 -- vbuz1_eq_0_then_la1 lda.z a cmp #0 beq b1 - // [273] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] - // [273] phi (word) muls8u::m#3 = (byte) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vbuc1 + // [274] phi from muls8u to muls8u::@2 [phi:muls8u->muls8u::@2] + // [274] phi (word) muls8u::m#3 = (word) 0 [phi:muls8u->muls8u::@2#0] -- vwuz1=vwuc1 lda #<0 sta.z m sta.z m+1 - // [273] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 + // [274] phi (byte) muls8u::i#2 = (byte) 0 [phi:muls8u->muls8u::@2#1] -- vbuyy=vbuc1 tay // muls8u::@2 __b2: // for(byte i = 0; i!=a; i++) - // [274] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 + // [275] if((byte) muls8u::i#2!=(byte) muls8u::a#0) goto muls8u::@3 -- vbuyy_neq_vbuz1_then_la1 cpy.z a bne __b3 - // [275] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] - // [275] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy + // [276] phi from muls8u::@2 to muls8u::@1 [phi:muls8u::@2->muls8u::@1] + // [276] phi (word) muls8u::return#0 = (word) muls8u::m#3 [phi:muls8u::@2->muls8u::@1#0] -- register_copy rts - // [275] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] + // [276] phi from muls8u to muls8u::@1 [phi:muls8u->muls8u::@1] b1: - // [275] phi (word) muls8u::return#0 = (byte) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vbuc1 + // [276] phi (word) muls8u::return#0 = (word) 0 [phi:muls8u->muls8u::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z return sta.z return+1 // muls8u::@1 // muls8u::@return // } - // [276] return + // [277] return rts // muls8u::@3 __b3: // m = m + b - // [277] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx + // [278] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z m @@ -12745,11 +12679,11 @@ muls8u: { inc.z m+1 !: // for(byte i = 0; i!=a; i++) - // [278] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy + // [279] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2 -- vbuyy=_inc_vbuyy iny - // [273] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] - // [273] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy - // [273] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy + // [274] phi from muls8u::@3 to muls8u::@2 [phi:muls8u::@3->muls8u::@2] + // [274] phi (word) muls8u::m#3 = (word) muls8u::m#1 [phi:muls8u::@3->muls8u::@2#0] -- register_copy + // [274] phi (byte) muls8u::i#2 = (byte) muls8u::i#1 [phi:muls8u::@3->muls8u::@2#1] -- register_copy jmp __b2 } // mulf_tables_cmp @@ -12758,13 +12692,13 @@ muls8u: { mulf_tables_cmp: { .label asm_sqr = 4 .label kc_sqr = 2 - // [280] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte*) mula_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 + // [281] phi from mulf_tables_cmp to mulf_tables_cmp::@1 [phi:mulf_tables_cmp->mulf_tables_cmp::@1] + // [281] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (const byte*) mula_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#0] -- pbuz1=pbuc1 lda #mula_sqr1_lo sta.z asm_sqr+1 - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte*) mulf_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 + // [281] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (const byte*) mulf_sqr1_lo [phi:mulf_tables_cmp->mulf_tables_cmp::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_lo @@ -12772,7 +12706,7 @@ mulf_tables_cmp: { // mulf_tables_cmp::@1 __b1: // for( byte* kc_sqr=mulf_sqr1_lo; kc_sqrmulf_sqr1_lo+$200*4 bcc __b2 @@ -12781,10 +12715,10 @@ mulf_tables_cmp: { cmp #mulf_tables_cmp::@3] + // [283] phi from mulf_tables_cmp::@1 to mulf_tables_cmp::@3 [phi:mulf_tables_cmp::@1->mulf_tables_cmp::@3] // mulf_tables_cmp::@3 // print_str("multiply tables match!") - // [283] call print_str + // [284] call print_str // [114] phi from mulf_tables_cmp::@3 to print_str [phi:mulf_tables_cmp::@3->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@3->print_str#0] -- pbuz1=pbuc1 lda #<$400 @@ -12797,10 +12731,10 @@ mulf_tables_cmp: { lda #>str sta.z print_str.str+1 jsr print_str - // [284] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] + // [285] phi from mulf_tables_cmp::@3 to mulf_tables_cmp::@6 [phi:mulf_tables_cmp::@3->mulf_tables_cmp::@6] // mulf_tables_cmp::@6 // print_ln() - // [285] call print_ln + // [286] call print_ln // [80] phi from mulf_tables_cmp::@6 to print_ln [phi:mulf_tables_cmp::@6->print_ln] // [80] phi (byte*) print_char_cursor#135 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@6->print_ln#0] -- register_copy // [80] phi (byte*) print_line_cursor#45 = (byte*) 1024 [phi:mulf_tables_cmp::@6->print_ln#1] -- pbuz1=pbuc1 @@ -12810,33 +12744,33 @@ mulf_tables_cmp: { sta.z print_line_cursor+1 jsr print_ln // mulf_tables_cmp::@7 - // [286] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 + // [287] (byte*) print_char_cursor#226 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 lda.z print_line_cursor sta.z print_char_cursor lda.z print_line_cursor+1 sta.z print_char_cursor+1 - // [287] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] - // [287] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#226 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy + // [288] phi from mulf_tables_cmp::@7 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return] + // [288] phi (byte*) print_line_cursor#11 = (byte*) print_line_cursor#1 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#0] -- register_copy + // [288] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#226 [phi:mulf_tables_cmp::@7->mulf_tables_cmp::@return#1] -- register_copy // mulf_tables_cmp::@return // } - // [288] return + // [289] return rts // mulf_tables_cmp::@2 __b2: // if(*kc_sqr != *asm_sqr) - // [289] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 + // [290] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@4 -- _deref_pbuz1_eq__deref_pbuz2_then_la1 ldy #0 lda (kc_sqr),y cmp (asm_sqr),y beq __b4 // mulf_tables_cmp::@5 // *BGCOL = 2 - // [290] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 + // [291] *((const byte*) BGCOL) ← (byte) 2 -- _deref_pbuc1=vbuc2 lda #2 sta BGCOL // print_str("multiply table mismatch at ") - // [291] call print_str + // [292] call print_str // [114] phi from mulf_tables_cmp::@5 to print_str [phi:mulf_tables_cmp::@5->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) 1024 [phi:mulf_tables_cmp::@5->print_str#0] -- pbuz1=pbuc1 lda #<$400 @@ -12851,16 +12785,16 @@ mulf_tables_cmp: { jsr print_str // mulf_tables_cmp::@8 // print_word((word)asm_sqr) - // [292] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 - // [293] call print_word + // [293] (word) print_word::w#1 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2 + // [294] call print_word // [100] phi from mulf_tables_cmp::@8 to print_word [phi:mulf_tables_cmp::@8->print_word] // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@8->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#1 [phi:mulf_tables_cmp::@8->print_word#1] -- register_copy jsr print_word - // [294] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] + // [295] phi from mulf_tables_cmp::@8 to mulf_tables_cmp::@9 [phi:mulf_tables_cmp::@8->mulf_tables_cmp::@9] // mulf_tables_cmp::@9 // print_str(" / ") - // [295] call print_str + // [296] call print_str // [114] phi from mulf_tables_cmp::@9 to print_str [phi:mulf_tables_cmp::@9->print_str] // [114] phi (byte*) print_char_cursor#155 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@9->print_str#0] -- register_copy // [114] phi (byte*) print_str::str#18 = (const string) mulf_tables_cmp::str2 [phi:mulf_tables_cmp::@9->print_str#1] -- pbuz1=pbuc1 @@ -12871,41 +12805,41 @@ mulf_tables_cmp: { jsr print_str // mulf_tables_cmp::@10 // print_word((word)kc_sqr) - // [296] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 + // [297] (word) print_word::w#2 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2 -- vwuz1=vwuz2 lda.z kc_sqr sta.z print_word.w lda.z kc_sqr+1 sta.z print_word.w+1 - // [297] call print_word + // [298] call print_word // [100] phi from mulf_tables_cmp::@10 to print_word [phi:mulf_tables_cmp::@10->print_word] // [100] phi (byte*) print_char_cursor#142 = (byte*) print_char_cursor#134 [phi:mulf_tables_cmp::@10->print_word#0] -- register_copy // [100] phi (word) print_word::w#6 = (word) print_word::w#2 [phi:mulf_tables_cmp::@10->print_word#1] -- register_copy jsr print_word - // [287] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] - // [287] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 + // [288] phi from mulf_tables_cmp::@10 to mulf_tables_cmp::@return [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return] + // [288] phi (byte*) print_line_cursor#11 = (byte*) 1024 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#0] -- pbuz1=pbuc1 lda #<$400 sta.z print_line_cursor lda #>$400 sta.z print_line_cursor+1 - // [287] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy + // [288] phi (byte*) print_char_cursor#100 = (byte*) print_char_cursor#19 [phi:mulf_tables_cmp::@10->mulf_tables_cmp::@return#1] -- register_copy rts // mulf_tables_cmp::@4 __b4: // asm_sqr++; - // [298] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 + // [299] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2 -- pbuz1=_inc_pbuz1 inc.z asm_sqr bne !+ inc.z asm_sqr+1 !: // for( byte* kc_sqr=mulf_sqr1_lo; kc_sqrmulf_tables_cmp::@1] - // [280] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy - // [280] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy + // [281] phi from mulf_tables_cmp::@4 to mulf_tables_cmp::@1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1] + // [281] phi (byte*) mulf_tables_cmp::asm_sqr#2 = (byte*) mulf_tables_cmp::asm_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#0] -- register_copy + // [281] phi (byte*) mulf_tables_cmp::kc_sqr#2 = (byte*) mulf_tables_cmp::kc_sqr#1 [phi:mulf_tables_cmp::@4->mulf_tables_cmp::@1#1] -- register_copy jmp __b1 str: .text "multiply tables match!" .byte 0 @@ -12961,24 +12895,24 @@ mulf_init_asm: { inx bne !- // *mem = *mula_sqr1_lo - // [301] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) -- _deref_pbuc1=_deref_pbuc2 + // [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_lo) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_lo sta mem // *mem = *mula_sqr1_hi - // [302] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) -- _deref_pbuc1=_deref_pbuc2 + // [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr1_hi) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr1_hi sta mem // *mem = *mula_sqr2_lo - // [303] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) -- _deref_pbuc1=_deref_pbuc2 + // [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_lo) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_lo sta mem // *mem = *mula_sqr2_hi - // [304] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) -- _deref_pbuc1=_deref_pbuc2 + // [305] *((const byte*) mulf_init_asm::mem) ← *((const byte*) mula_sqr2_hi) -- _deref_pbuc1=_deref_pbuc2 lda mula_sqr2_hi sta mem // mulf_init_asm::@return // } - // [305] return + // [306] return rts } // mulf_init @@ -12996,21 +12930,21 @@ mulf_init: { .label sqr2_lo = 8 //Start with g(0)=f(255) .label dir = $c - // [307] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] - // [307] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 + // [308] phi from mulf_init to mulf_init::@1 [phi:mulf_init->mulf_init::@1] + // [308] phi (byte) mulf_init::x_2#3 = (byte) 0 [phi:mulf_init->mulf_init::@1#0] -- vbuxx=vbuc1 ldx #0 - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 + // [308] phi (byte*) mulf_init::sqr1_hi#2 = (const byte*) mulf_sqr1_hi+(byte) 1 [phi:mulf_init->mulf_init::@1#1] -- pbuz1=pbuc1 lda #mulf_sqr1_hi+1 sta.z sqr1_hi+1 - // [307] phi (word) mulf_init::sqr#4 = (byte) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vbuc1 + // [308] phi (word) mulf_init::sqr#4 = (word) 0 [phi:mulf_init->mulf_init::@1#2] -- vwuz1=vwuc1 txa sta.z sqr sta.z sqr+1 - // [307] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 + // [308] phi (byte) mulf_init::c#2 = (byte) 0 [phi:mulf_init->mulf_init::@1#3] -- vbuz1=vbuc1 sta.z c - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 + // [308] phi (byte*) mulf_init::sqr1_lo#2 = (const byte*) mulf_sqr1_lo+(byte) 1 [phi:mulf_init->mulf_init::@1#4] -- pbuz1=pbuc1 lda #mulf_sqr1_lo+1 @@ -13018,25 +12952,25 @@ mulf_init: { // mulf_init::@1 __b1: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [308] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 + // [309] if((byte*) mulf_init::sqr1_lo#2!=(const byte*) mulf_sqr1_lo+(word) $200) goto mulf_init::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr1_lo+1 cmp #>mulf_sqr1_lo+$200 bne __b2 lda.z sqr1_lo cmp #mulf_init::@5] - // [309] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 + // [310] phi from mulf_init::@1 to mulf_init::@5 [phi:mulf_init::@1->mulf_init::@5] + // [310] phi (byte) mulf_init::dir#2 = (byte) $ff [phi:mulf_init::@1->mulf_init::@5#0] -- vbuz1=vbuc1 lda #$ff sta.z dir - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 + // [310] phi (byte*) mulf_init::sqr2_hi#2 = (const byte*) mulf_sqr2_hi [phi:mulf_init::@1->mulf_init::@5#1] -- pbuz1=pbuc1 lda #mulf_sqr2_hi sta.z sqr2_hi+1 - // [309] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 + // [310] phi (byte) mulf_init::x_255#2 = (byte) -1 [phi:mulf_init::@1->mulf_init::@5#2] -- vbuxx=vbuc1 ldx #-1 - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 + // [310] phi (byte*) mulf_init::sqr2_lo#2 = (const byte*) mulf_sqr2_lo [phi:mulf_init::@1->mulf_init::@5#3] -- pbuz1=pbuc1 lda #mulf_sqr2_lo @@ -13044,7 +12978,7 @@ mulf_init: { // mulf_init::@5 __b5: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [310] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 + // [311] if((byte*) mulf_init::sqr2_lo#2!=(const byte*) mulf_sqr2_lo+(word) $1ff) goto mulf_init::@6 -- pbuz1_neq_pbuc1_then_la1 lda.z sqr2_lo+1 cmp #>mulf_sqr2_lo+$1ff bne __b6 @@ -13053,116 +12987,116 @@ mulf_init: { bne __b6 // mulf_init::@7 // *(mulf_sqr2_lo+511) = *(mulf_sqr1_lo+256) - // [311] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [312] *((const byte*) mulf_sqr2_lo+(word) $1ff) ← *((const byte*) mulf_sqr1_lo+(word) $100) -- _deref_pbuc1=_deref_pbuc2 // Set the very last value g(511) = f(256) lda mulf_sqr1_lo+$100 sta mulf_sqr2_lo+$1ff // *(mulf_sqr2_hi+511) = *(mulf_sqr1_hi+256) - // [312] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 + // [313] *((const byte*) mulf_sqr2_hi+(word) $1ff) ← *((const byte*) mulf_sqr1_hi+(word) $100) -- _deref_pbuc1=_deref_pbuc2 lda mulf_sqr1_hi+$100 sta mulf_sqr2_hi+$1ff // mulf_init::@return // } - // [313] return + // [314] return rts // mulf_init::@6 __b6: // *sqr2_lo = mulf_sqr1_lo[x_255] - // [314] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [315] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte*) mulf_sqr1_lo + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_lo,x ldy #0 sta (sqr2_lo),y // *sqr2_hi++ = mulf_sqr1_hi[x_255] - // [315] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx + // [316] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte*) mulf_sqr1_hi + (byte) mulf_init::x_255#2) -- _deref_pbuz1=pbuc1_derefidx_vbuxx lda mulf_sqr1_hi,x sta (sqr2_hi),y // *sqr2_hi++ = mulf_sqr1_hi[x_255]; - // [316] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 + // [317] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_hi bne !+ inc.z sqr2_hi+1 !: // x_255 = x_255 + dir - // [317] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 + // [318] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 -- vbuxx=vbuxx_plus_vbuz1 txa clc adc.z dir tax // if(x_255==0) - // [318] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 + // [319] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@9 -- vbuxx_neq_0_then_la1 cpx #0 bne __b8 - // [320] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] - // [320] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 + // [321] phi from mulf_init::@6 to mulf_init::@8 [phi:mulf_init::@6->mulf_init::@8] + // [321] phi (byte) mulf_init::dir#4 = (byte) 1 [phi:mulf_init::@6->mulf_init::@8#0] -- vbuz1=vbuc1 lda #1 sta.z dir - // [319] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] + // [320] phi from mulf_init::@6 to mulf_init::@9 [phi:mulf_init::@6->mulf_init::@9] // mulf_init::@9 - // [320] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] - // [320] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy + // [321] phi from mulf_init::@9 to mulf_init::@8 [phi:mulf_init::@9->mulf_init::@8] + // [321] phi (byte) mulf_init::dir#4 = (byte) mulf_init::dir#2 [phi:mulf_init::@9->mulf_init::@8#0] -- register_copy // mulf_init::@8 __b8: // for(byte* sqr2_lo = mulf_sqr2_lo; sqr2_lo!=mulf_sqr2_lo+511; sqr2_lo++) - // [321] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 + // [322] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr2_lo bne !+ inc.z sqr2_lo+1 !: - // [309] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] - // [309] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy - // [309] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy - // [309] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy + // [310] phi from mulf_init::@8 to mulf_init::@5 [phi:mulf_init::@8->mulf_init::@5] + // [310] phi (byte) mulf_init::dir#2 = (byte) mulf_init::dir#4 [phi:mulf_init::@8->mulf_init::@5#0] -- register_copy + // [310] phi (byte*) mulf_init::sqr2_hi#2 = (byte*) mulf_init::sqr2_hi#1 [phi:mulf_init::@8->mulf_init::@5#1] -- register_copy + // [310] phi (byte) mulf_init::x_255#2 = (byte) mulf_init::x_255#1 [phi:mulf_init::@8->mulf_init::@5#2] -- register_copy + // [310] phi (byte*) mulf_init::sqr2_lo#2 = (byte*) mulf_init::sqr2_lo#1 [phi:mulf_init::@8->mulf_init::@5#3] -- register_copy jmp __b5 // mulf_init::@2 __b2: // if((++c&1)==0) - // [322] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 + // [323] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 -- vbuz1=_inc_vbuz1 inc.z c // ++c&1 - // [323] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 + // [324] (byte~) mulf_init::$1 ← (byte) mulf_init::c#1 & (byte) 1 -- vbuaa=vbuz1_band_vbuc1 lda #1 and.z c // if((++c&1)==0) - // [324] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 + // [325] if((byte~) mulf_init::$1!=(byte) 0) goto mulf_init::@3 -- vbuaa_neq_0_then_la1 cmp #0 bne __b3 // mulf_init::@4 // x_2++; - // [325] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx + // [326] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 -- vbuxx=_inc_vbuxx inx // sqr++; - // [326] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 + // [327] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 -- vwuz1=_inc_vwuz1 inc.z sqr bne !+ inc.z sqr+1 !: - // [327] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] - // [327] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy - // [327] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy + // [328] phi from mulf_init::@2 mulf_init::@4 to mulf_init::@3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3] + // [328] phi (byte) mulf_init::x_2#2 = (byte) mulf_init::x_2#3 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#0] -- register_copy + // [328] phi (word) mulf_init::sqr#3 = (word) mulf_init::sqr#4 [phi:mulf_init::@2/mulf_init::@4->mulf_init::@3#1] -- register_copy // mulf_init::@3 __b3: // sqr - // [330] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 + // [331] (byte~) mulf_init::$5 ← > (word) mulf_init::sqr#3 -- vbuaa=_hi_vwuz1 lda.z sqr+1 // *sqr1_hi++ = >sqr - // [331] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa + // [332] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$5 -- _deref_pbuz1=vbuaa sta (sqr1_hi),y // *sqr1_hi++ = >sqr; - // [332] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 + // [333] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_hi bne !+ inc.z sqr1_hi+1 !: // sqr = sqr + x_2 - // [333] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx + // [334] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z sqr @@ -13171,29 +13105,29 @@ mulf_init: { inc.z sqr+1 !: // for(byte* sqr1_lo = mulf_sqr1_lo+1; sqr1_lo!=mulf_sqr1_lo+512; sqr1_lo++) - // [334] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 + // [335] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 -- pbuz1=_inc_pbuz1 inc.z sqr1_lo bne !+ inc.z sqr1_lo+1 !: - // [307] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] - // [307] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy - // [307] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy - // [307] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy - // [307] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy + // [308] phi from mulf_init::@3 to mulf_init::@1 [phi:mulf_init::@3->mulf_init::@1] + // [308] phi (byte) mulf_init::x_2#3 = (byte) mulf_init::x_2#2 [phi:mulf_init::@3->mulf_init::@1#0] -- register_copy + // [308] phi (byte*) mulf_init::sqr1_hi#2 = (byte*) mulf_init::sqr1_hi#1 [phi:mulf_init::@3->mulf_init::@1#1] -- register_copy + // [308] phi (word) mulf_init::sqr#4 = (word) mulf_init::sqr#1 [phi:mulf_init::@3->mulf_init::@1#2] -- register_copy + // [308] phi (byte) mulf_init::c#2 = (byte) mulf_init::c#1 [phi:mulf_init::@3->mulf_init::@1#3] -- register_copy + // [308] phi (byte*) mulf_init::sqr1_lo#2 = (byte*) mulf_init::sqr1_lo#1 [phi:mulf_init::@3->mulf_init::@1#4] -- register_copy jmp __b1 } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) - // [336] call memset - // [338] phi from print_cls to memset [phi:print_cls->memset] + // [337] call memset + // [339] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } - // [337] return + // [338] return rts } // memset @@ -13204,8 +13138,8 @@ memset: { .label str = $400 .label end = str+num .label dst = $d - // [339] phi from memset to memset::@1 [phi:memset->memset::@1] - // [339] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 + // [340] phi from memset to memset::@1 [phi:memset->memset::@1] + // [340] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str @@ -13213,7 +13147,7 @@ memset: { // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) - // [340] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 + // [341] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 @@ -13222,23 +13156,23 @@ memset: { bne __b2 // memset::@return // } - // [341] return + // [342] return rts // memset::@2 __b2: // *dst = c - // [342] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 + // [343] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 lda #c ldy #0 sta (dst),y // for(char* dst = str; dst!=end; dst++) - // [343] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 + // [344] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 inc.z dst bne !+ inc.z dst+1 !: - // [339] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] - // [339] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy + // [340] phi from memset::@2 to memset::@1 [phi:memset::@2->memset::@1] + // [340] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // File Data diff --git a/src/test/ref/test-multiply-8bit.sym b/src/test/ref/test-multiply-8bit.sym index 6cda2bbe0..fdb8ca6f4 100644 --- a/src/test/ref/test-multiply-8bit.sym +++ b/src/test/ref/test-multiply-8bit.sym @@ -119,12 +119,13 @@ (byte) mul8u::a#1 reg byte x 2.0 (byte) mul8u::a#2 reg byte x 101.0 (byte) mul8u::a#3 reg byte x 667.6666666666667 -(byte) mul8u::a#6 reg byte x 105.0 +(byte) mul8u::a#6 reg byte x 52.5 (byte) mul8u::b (byte) mul8u::b#0 reg byte a 4.0 (byte) mul8u::b#1 reg byte a 202.0 +(byte) mul8u::b#2 reg byte a 103.0 (word) mul8u::mb -(word) mul8u::mb#0 mb zp[2]:13 105.0 +(word) mul8u::mb#0 mb zp[2]:13 4.0 (word) mul8u::mb#1 mb zp[2]:13 2002.0 (word) mul8u::mb#2 mb zp[2]:13 429.2857142857143 (word) mul8u::res @@ -469,8 +470,7 @@ reg byte x [ mul8s_compare::ok#3 mul8s_compare::ok#4 ] reg byte a [ print_char::ch#6 print_char::ch#4 print_char::ch#5 ] reg byte x [ print_byte::b#5 print_byte::b#3 print_byte::b#4 print_byte::b#0 print_byte::b#1 print_byte::b#2 ] reg byte x [ print_sbyte::b#5 print_sbyte::b#0 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#2 ] -reg byte a [ mul8u::b#0 ] -reg byte a [ mul8u::b#1 ] +reg byte a [ mul8u::b#2 mul8u::b#0 mul8u::b#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#1 mul8u::a#2 mul8u::a#0 ] reg byte x [ mulf8u_prepared::b#2 mulf8u_prepared::b#1 mulf8u_prepared::b#0 ] reg byte a [ mulf8u_prepare::a#2 mulf8u_prepare::a#1 mulf8u_prepare::a#0 ] diff --git a/src/test/ref/test-scroll-up.cfg b/src/test/ref/test-scroll-up.cfg index 4427cf6b1..4918de7e9 100644 --- a/src/test/ref/test-scroll-up.cfg +++ b/src/test/ref/test-scroll-up.cfg @@ -30,7 +30,7 @@ scrollup3: scope:[scrollup3] from main::@2 [11] phi() to:scrollup3::@1 scrollup3::@1: scope:[scrollup3] from scrollup3 scrollup3::@5 - [12] (word) scrollup3::line#2 ← phi( scrollup3/(byte) 0 scrollup3::@5/(word) scrollup3::line#1 ) + [12] (word) scrollup3::line#2 ← phi( scrollup3/(word) 0 scrollup3::@5/(word) scrollup3::line#1 ) [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 to:scrollup3::@return scrollup3::@return: scope:[scrollup3] from scrollup3::@1 @@ -87,7 +87,7 @@ scrollup1: scope:[scrollup1] from main [35] phi() to:scrollup1::@1 scrollup1::@1: scope:[scrollup1] from scrollup1 scrollup1::@4 - [36] (word) scrollup1::line#2 ← phi( scrollup1/(byte) 0 scrollup1::@4/(word) scrollup1::line#1 ) + [36] (word) scrollup1::line#2 ← phi( scrollup1/(word) 0 scrollup1::@4/(word) scrollup1::line#1 ) [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 to:scrollup1::@return scrollup1::@return: scope:[scrollup1] from scrollup1::@1 diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index 8ac2977bd..72c286bd3 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -39,7 +39,7 @@ main::@return: scope:[main] from main::@3 (void()) scrollup1() scrollup1: scope:[scrollup1] from main - (word) scrollup1::line#0 ← (number) 0 + (word) scrollup1::line#0 ← (word) 0 to:scrollup1::@1 scrollup1::@1: scope:[scrollup1] from scrollup1 scrollup1::@6 (word) scrollup1::line#2 ← phi( scrollup1/(word) scrollup1::line#0 scrollup1::@6/(word) scrollup1::line#1 ) @@ -48,7 +48,7 @@ scrollup1::@1: scope:[scrollup1] from scrollup1 scrollup1::@6 to:scrollup1::@return scrollup1::@2: scope:[scrollup1] from scrollup1::@1 (word) scrollup1::line#6 ← phi( scrollup1::@1/(word) scrollup1::line#2 ) - (byte) scrollup1::c#0 ← (number) 0 + (byte) scrollup1::c#0 ← (byte) 0 to:scrollup1::@4 scrollup1::@4: scope:[scrollup1] from scrollup1::@2 scrollup1::@5 (word) scrollup1::line#5 ← phi( scrollup1::@2/(word) scrollup1::line#6 scrollup1::@5/(word) scrollup1::line#3 ) @@ -111,7 +111,7 @@ scrollup2::@return: scope:[scrollup2] from scrollup2::@3 (void()) scrollup3() scrollup3: scope:[scrollup3] from main::@2 - (word) scrollup3::line#0 ← (number) 0 + (word) scrollup3::line#0 ← (word) 0 to:scrollup3::@1 scrollup3::@1: scope:[scrollup3] from scrollup3 scrollup3::@6 (word) scrollup3::line#2 ← phi( scrollup3/(word) scrollup3::line#0 scrollup3::@6/(word) scrollup3::line#1 ) @@ -121,7 +121,7 @@ scrollup3::@1: scope:[scrollup3] from scrollup3 scrollup3::@6 scrollup3::@2: scope:[scrollup3] from scrollup3::@1 (word) scrollup3::line#3 ← phi( scrollup3::@1/(word) scrollup3::line#2 ) (word) scrollup3::l2#0 ← (word) scrollup3::line#3 - (byte) scrollup3::c#0 ← (number) 0 + (byte) scrollup3::c#0 ← (byte) 0 to:scrollup3::@4 scrollup3::@4: scope:[scrollup3] from scrollup3::@2 scrollup3::@5 (word) scrollup3::line#5 ← phi( scrollup3::@2/(word) scrollup3::line#3 scrollup3::@5/(word) scrollup3::line#6 ) @@ -247,48 +247,31 @@ SYMBOL TABLE SSA (word) scrollup3::line#5 (word) scrollup3::line#6 -Adding number conversion cast (unumber) 0 in (word) scrollup1::line#0 ← (number) 0 Adding number conversion cast (unumber) $28*$18 in (bool~) scrollup1::$0 ← (word) scrollup1::line#2 < (number) $28*(number) $18 -Adding number conversion cast (unumber) 0 in (byte) scrollup1::c#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) scrollup1::$1 ← (byte) scrollup1::c#2 < (number) $28 Adding number conversion cast (unumber) $28 in (number~) scrollup1::$4 ← (word~) scrollup1::$3 + (number) $28 Adding number conversion cast (unumber) scrollup1::$4 in (number~) scrollup1::$4 ← (word~) scrollup1::$3 + (unumber)(number) $28 Adding number conversion cast (unumber) $28 in (word) scrollup1::line#1 ← (word) scrollup1::line#4 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*) scrollup2::line2#0 ← (const byte*) screen+(number) $28 -Adding number conversion cast (unumber) 0 in (word) scrollup3::line#0 ← (number) 0 Adding number conversion cast (unumber) $28*$18 in (bool~) scrollup3::$0 ← (word) scrollup3::line#2 < (number) $28*(number) $18 -Adding number conversion cast (unumber) 0 in (byte) scrollup3::c#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) scrollup3::$1 ← (byte) scrollup3::c#2 < (number) $28 Adding number conversion cast (unumber) $28 in (number~) scrollup3::$2 ← (word) scrollup3::l2#2 + (number) $28 Adding number conversion cast (unumber) scrollup3::$2 in (number~) scrollup3::$2 ← (word) scrollup3::l2#2 + (unumber)(number) $28 Adding number conversion cast (unumber) $28 in (word) scrollup3::line#1 ← (word) scrollup3::line#4 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) scrollup1::line#0 ← (unumber)(number) 0 -Inlining cast (byte) scrollup1::c#0 ← (unumber)(number) 0 -Inlining cast (word) scrollup3::line#0 ← (unumber)(number) 0 -Inlining cast (byte) scrollup3::c#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 @@ -353,11 +336,11 @@ Inlining constant with var siblings (const byte) scrollup2::c#0 Inlining constant with var siblings (const word) scrollup3::line#0 Inlining constant with var siblings (const byte) scrollup3::c#0 Constant inlined scrollup2::l#0 = (byte) 0 -Constant inlined scrollup3::line#0 = (byte) 0 +Constant inlined scrollup3::line#0 = (word) 0 Constant inlined scrollup3::c#0 = (byte) 0 Constant inlined scrollup2::c#0 = (byte) 0 Constant inlined scrollup1::c#0 = (byte) 0 -Constant inlined scrollup1::line#0 = (byte) 0 +Constant inlined scrollup1::line#0 = (word) 0 Constant inlined scrollup2::line2#0 = (const byte*) screen+(byte) $28 Constant inlined scrollup2::line1#0 = (const byte*) screen Successful SSA optimization Pass2ConstantInlining @@ -456,7 +439,7 @@ scrollup3: scope:[scrollup3] from main::@2 [11] phi() to:scrollup3::@1 scrollup3::@1: scope:[scrollup3] from scrollup3 scrollup3::@5 - [12] (word) scrollup3::line#2 ← phi( scrollup3/(byte) 0 scrollup3::@5/(word) scrollup3::line#1 ) + [12] (word) scrollup3::line#2 ← phi( scrollup3/(word) 0 scrollup3::@5/(word) scrollup3::line#1 ) [13] if((word) scrollup3::line#2<(word)(number) $28*(number) $18) goto scrollup3::@2 to:scrollup3::@return scrollup3::@return: scope:[scrollup3] from scrollup3::@1 @@ -513,7 +496,7 @@ scrollup1: scope:[scrollup1] from main [35] phi() to:scrollup1::@1 scrollup1::@1: scope:[scrollup1] from scrollup1 scrollup1::@4 - [36] (word) scrollup1::line#2 ← phi( scrollup1/(byte) 0 scrollup1::@4/(word) scrollup1::line#1 ) + [36] (word) scrollup1::line#2 ← phi( scrollup1/(word) 0 scrollup1::@4/(word) scrollup1::line#1 ) [37] if((word) scrollup1::line#2<(word)(number) $28*(number) $18) goto scrollup1::@2 to:scrollup1::@return scrollup1::@return: scope:[scrollup1] from scrollup1::@1 @@ -691,7 +674,7 @@ scrollup3: { .label __4 = $12 // [12] phi from scrollup3 to scrollup3::@1 [phi:scrollup3->scrollup3::@1] __b1_from_scrollup3: - // [12] phi (word) scrollup3::line#2 = (byte) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vbuc1 + // [12] phi (word) scrollup3::line#2 = (word) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z line lda #>0 @@ -876,7 +859,7 @@ scrollup1: { .label __6 = $1a // [36] phi from scrollup1 to scrollup1::@1 [phi:scrollup1->scrollup1::@1] __b1_from_scrollup1: - // [36] phi (word) scrollup1::line#2 = (byte) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vbuc1 + // [36] phi (word) scrollup1::line#2 = (word) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z line lda #>0 @@ -1116,7 +1099,7 @@ scrollup3: { .label __4 = 7 // [12] phi from scrollup3 to scrollup3::@1 [phi:scrollup3->scrollup3::@1] __b1_from_scrollup3: - // [12] phi (word) scrollup3::line#2 = (byte) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vbuc1 + // [12] phi (word) scrollup3::line#2 = (word) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z line lda #>0 @@ -1295,7 +1278,7 @@ scrollup1: { .label __6 = 7 // [36] phi from scrollup1 to scrollup1::@1 [phi:scrollup1->scrollup1::@1] __b1_from_scrollup1: - // [36] phi (word) scrollup1::line#2 = (byte) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vbuc1 + // [36] phi (word) scrollup1::line#2 = (word) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z line lda #>0 @@ -1583,7 +1566,7 @@ scrollup3: { .label __3 = 5 .label __4 = 7 // [12] phi from scrollup3 to scrollup3::@1 [phi:scrollup3->scrollup3::@1] - // [12] phi (word) scrollup3::line#2 = (byte) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vbuc1 + // [12] phi (word) scrollup3::line#2 = (word) 0 [phi:scrollup3->scrollup3::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z line sta.z line+1 @@ -1749,7 +1732,7 @@ scrollup1: { .label __5 = 9 .label __6 = 7 // [36] phi from scrollup1 to scrollup1::@1 [phi:scrollup1->scrollup1::@1] - // [36] phi (word) scrollup1::line#2 = (byte) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vbuc1 + // [36] phi (word) scrollup1::line#2 = (word) 0 [phi:scrollup1->scrollup1::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z line sta.z line+1 diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index 29a1ea7af..075f24dca 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -273,7 +273,7 @@ main: scope:[main] from @38 (byte*) print_char_cursor#52 ← phi( @38/(byte*) print_char_cursor#54 ) (byte*) print_line_cursor#18 ← phi( @38/(byte*) print_line_cursor#20 ) (byte*) print_screen#3 ← phi( @38/(byte*) print_screen#4 ) - (signed word) main::w1#0 ← (number) $4d2 + (signed word) main::w1#0 ← (signed word) $4d2 call print_cls to:main::@3 main::@3: scope:[main] from main @@ -597,7 +597,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (snumber) $4d2 in (signed word) main::w1#0 ← (number) $4d2 Adding number conversion cast (snumber) $5b in (number~) main::$1 ← (signed word) main::w1#2 - (number) $5b Adding number conversion cast (snumber) main::$1 in (number~) main::$1 ← (signed word) main::w1#2 - (snumber)(number) $5b Adding number conversion cast (snumber) $29 in (number~) main::$2 ← (signed word) main::w2#0 - (number) $29 @@ -607,7 +606,6 @@ Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#5 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast (signed word) main::w1#0 ← (snumber)(number) $4d2 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 @@ -616,7 +614,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 -Simplifying constant integer cast $4d2 Simplifying constant integer cast $5b Simplifying constant integer cast $29 Successful SSA optimization PassNCastSimplification @@ -626,7 +623,6 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 -Finalized signed number type (signed word) $4d2 Finalized signed number type (signed byte) $5b Finalized signed number type (signed byte) $29 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/test-word-size-arrays.log b/src/test/ref/test-word-size-arrays.log index 9d13cf95f..8f55e568b 100644 --- a/src/test/ref/test-word-size-arrays.log +++ b/src/test/ref/test-word-size-arrays.log @@ -26,11 +26,11 @@ main::@1: scope:[main] from main main::@6 to:main::@3 main::@2: scope:[main] from main::@1 (word) main::line#9 ← phi( main::@1/(word) main::line#3 ) - (byte) main::c#0 ← (number) 0 + (byte) main::c#0 ← (byte) 0 to:main::@4 main::@3: scope:[main] from main::@1 (word) main::line#10 ← phi( main::@1/(word) main::line#3 ) - (byte) main::c1#0 ← (number) 0 + (byte) main::c1#0 ← (byte) 0 to:main::@13 main::@4: scope:[main] from main::@2 main::@5 (word) main::line#7 ← phi( main::@2/(word) main::line#9 main::@5/(word) main::line#4 ) @@ -122,8 +122,6 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (word) main::line#1 ← (number) 0 Adding number conversion cast (unumber) $28*$18 in (bool~) main::$0 ← (word) main::line#3 < (number) $28*(number) $18 -Adding number conversion cast (unumber) 0 in (byte) main::c#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::c1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (bool~) main::$1 ← (byte) main::c#2 < (number) $28 Adding number conversion cast (unumber) $28 in (number~) main::$4 ← (word~) main::$3 + (number) $28 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (word~) main::$3 + (unumber)(number) $28 @@ -131,21 +129,15 @@ Adding number conversion cast (unumber) $28 in (word) main::line#2 ← (word) ma Adding number conversion cast (unumber) $28 in (bool~) main::$5 ← (byte) main::c1#2 < (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) main::line#1 ← (unumber)(number) 0 -Inlining cast (byte) main::c#0 ← (unumber)(number) 0 -Inlining cast (byte) main::c1#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 diff --git a/src/test/ref/tetris-npe.log b/src/test/ref/tetris-npe.log index 1fa2dace4..7fa3b1a96 100644 --- a/src/test/ref/tetris-npe.log +++ b/src/test/ref/tetris-npe.log @@ -14,7 +14,7 @@ Culled Empty Block (label) main::@14 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) ypos#0 ← (number) 0 + (byte) ypos#0 ← (byte) 0 (byte) counter#0 ← (const byte) RATE to:@1 @@ -112,19 +112,14 @@ SYMBOL TABLE SSA (byte) ypos#8 (byte) ypos#9 -Adding number conversion cast (unumber) 0 in (byte) ypos#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) main::$0 ← *((const byte*) RASTER) != (number) $ff Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (byte) counter#1 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) ypos#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/textbox.asm b/src/test/ref/textbox.asm index c970ef874..debefc5e7 100644 --- a/src/test/ref/textbox.asm +++ b/src/test/ref/textbox.asm @@ -94,8 +94,9 @@ main: { } // textbox(byte zp(2) x1, byte zp(3) y1, byte zp(4) x2, byte zp(5) y2, byte* zp(6) text) textbox: { - .label __8 = $d - .label __17 = $a + .label __3 = $b + .label __9 = $f + .label __18 = $a .label x1 = 2 .label y1 = 3 .label x2 = 4 @@ -105,20 +106,33 @@ textbox: { .label z = $b .label i = 9 .label text = 6 - .label __31 = $d + .label __32 = $f + .label __33 = $d + .label __34 = $b jsr draw_window inc.z y ldy.z x1 iny sty.z x lda.z y - asl - asl - clc - adc.z y - sta.z z + sta.z __3 lda #0 - sta.z z+1 + sta.z __3+1 + lda.z __3 + asl + sta.z __33 + lda.z __3+1 + rol + sta.z __33+1 + asl.z __33 + rol.z __33+1 + lda.z __34 + clc + adc.z __33 + sta.z __34 + lda.z __34+1 + adc.z __33+1 + sta.z __34+1 asl.z z rol.z z+1 asl.z z @@ -137,21 +151,21 @@ textbox: { lda.z x clc adc.z z - sta.z __8 + sta.z __9 lda #0 adc.z z+1 - sta.z __8+1 + sta.z __9+1 clc - lda.z __31 + lda.z __32 adc #screen - sta.z __31+1 + sta.z __32+1 ldy.z i lda (text),y ldy #0 - sta (__31),y + sta (__32),y ldy.z i lda (text),y cmp #$20 @@ -173,10 +187,10 @@ textbox: { lda.z x2 sec sbc.z x1 - sta.z __17 + sta.z __18 cpy.z x2 bcc __b2 - cpx.z __17 + cpx.z __18 bcc __b6 __b2: inc.z i diff --git a/src/test/ref/textbox.cfg b/src/test/ref/textbox.cfg index 889338e36..6e1220c35 100644 --- a/src/test/ref/textbox.cfg +++ b/src/test/ref/textbox.cfg @@ -40,7 +40,7 @@ main::@2: scope:[main] from main::@1 [19] call textbox to:main::@4 main::@4: scope:[main] from main::@2 main::@5 - [20] (word) main::wait#2 ← phi( main::@2/(byte) 0 main::@5/(word) main::wait#1 ) + [20] (word) main::wait#2 ← phi( main::@2/(word) 0 main::@5/(word) main::wait#1 ) [21] if((word) main::wait#2<(word) $88b8) goto main::@5 to:main::@6 main::@6: scope:[main] from main::@4 @@ -66,173 +66,174 @@ textbox: scope:[textbox] from main::@2 main::@3 main::@8 main::@9 textbox::@12: scope:[textbox] from textbox [30] (byte) textbox::y#0 ← (byte) textbox::y1#4 + (byte) 1 [31] (byte) textbox::x#0 ← (byte) textbox::x1#4 + (byte) 1 - [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 - [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 - [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 - [35] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return + [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 + [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 + [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 + [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 + [36] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return to:textbox::@13 textbox::@13: scope:[textbox] from textbox::@12 - [36] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return + [37] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return to:textbox::@1 textbox::@1: scope:[textbox] from textbox::@13 textbox::@8 - [37] (byte) textbox::y#12 ← phi( textbox::@8/(byte) textbox::y#11 textbox::@13/(byte) textbox::y#0 ) - [37] (byte) textbox::i#2 ← phi( textbox::@8/(byte) textbox::i#1 textbox::@13/(byte) 0 ) - [37] (byte) textbox::x#10 ← phi( textbox::@8/(byte) textbox::x#7 textbox::@13/(byte) textbox::x#0 ) - [37] (word) textbox::z#3 ← phi( textbox::@8/(word) textbox::z#4 textbox::@13/(word) textbox::z#0 ) - [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 - [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 - [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) - [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 + [38] (byte) textbox::y#12 ← phi( textbox::@8/(byte) textbox::y#11 textbox::@13/(byte) textbox::y#0 ) + [38] (byte) textbox::i#2 ← phi( textbox::@8/(byte) textbox::i#1 textbox::@13/(byte) 0 ) + [38] (byte) textbox::x#10 ← phi( textbox::@8/(byte) textbox::x#7 textbox::@13/(byte) textbox::x#0 ) + [38] (word) textbox::z#3 ← phi( textbox::@8/(word) textbox::z#4 textbox::@13/(word) textbox::z#0 ) + [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 + [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 + [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) + [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 to:textbox::@10 textbox::@10: scope:[textbox] from textbox::@1 - [42] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 + [43] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 to:textbox::@3 textbox::@3: scope:[textbox] from textbox::@10 textbox::@4 - [43] (byte) textbox::c#2 ← phi( textbox::@10/(byte) 0 textbox::@4/(byte) textbox::c#1 ) - [43] (byte) textbox::ls#2 ← phi( textbox::@10/(byte) textbox::ls#0 textbox::@4/(byte) textbox::ls#1 ) - [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 + [44] (byte) textbox::c#2 ← phi( textbox::@10/(byte) 0 textbox::@4/(byte) textbox::c#1 ) + [44] (byte) textbox::ls#2 ← phi( textbox::@10/(byte) textbox::ls#0 textbox::@4/(byte) textbox::ls#1 ) + [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 to:textbox::@14 textbox::@14: scope:[textbox] from textbox::@3 - [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 + [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 to:textbox::@5 textbox::@5: scope:[textbox] from textbox::@14 textbox::@3 - [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 - [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 - [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@2 + [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 + [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 + [49] if((byte~) textbox::$16<(byte) textbox::x2#4) goto textbox::@2 to:textbox::@15 textbox::@15: scope:[textbox] from textbox::@5 - [49] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@6 + [50] if((byte) textbox::c#2<(byte~) textbox::$18) goto textbox::@6 to:textbox::@2 textbox::@2: scope:[textbox] from textbox::@1 textbox::@15 textbox::@5 textbox::@7 - [50] (word) textbox::z#5 ← phi( textbox::@7/(word) textbox::z#1 textbox::@1/(word) textbox::z#3 textbox::@5/(word) textbox::z#3 ) - [50] (byte) textbox::y#5 ← phi( textbox::@7/(byte) textbox::y#1 textbox::@1/(byte) textbox::y#12 textbox::@5/(byte) textbox::y#12 ) - [50] (byte) textbox::x#5 ← phi( textbox::@7/(byte) textbox::x#15 textbox::@1/(byte) textbox::x#10 textbox::@5/(byte) textbox::x#10 ) - [51] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 - [52] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 - [53] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 + [51] (word) textbox::z#5 ← phi( textbox::@7/(word) textbox::z#1 textbox::@1/(word) textbox::z#3 textbox::@5/(word) textbox::z#3 ) + [51] (byte) textbox::y#5 ← phi( textbox::@7/(byte) textbox::y#1 textbox::@1/(byte) textbox::y#12 textbox::@5/(byte) textbox::y#12 ) + [51] (byte) textbox::x#5 ← phi( textbox::@7/(byte) textbox::x#15 textbox::@1/(byte) textbox::x#10 textbox::@5/(byte) textbox::x#10 ) + [52] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 + [53] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 + [54] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 to:textbox::@11 textbox::@11: scope:[textbox] from textbox::@2 - [54] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 - [55] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 - [56] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 + [55] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 + [56] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 + [57] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 to:textbox::@return textbox::@return: scope:[textbox] from textbox::@11 textbox::@12 textbox::@13 textbox::@6 textbox::@8 - [57] return + [58] return to:@return textbox::@9: scope:[textbox] from textbox::@11 - [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 - [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 - [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 + [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 + [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 + [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 to:textbox::@8 textbox::@8: scope:[textbox] from textbox::@2 textbox::@9 - [61] (byte) textbox::y#11 ← phi( textbox::@9/(byte) textbox::y#2 textbox::@2/(byte) textbox::y#5 ) - [61] (byte) textbox::x#7 ← phi( textbox::@9/(byte) textbox::x#12 textbox::@2/(byte) textbox::x#1 ) - [61] (word) textbox::z#4 ← phi( textbox::@9/(word) textbox::z#2 textbox::@2/(word) textbox::z#5 ) - [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 + [62] (byte) textbox::y#11 ← phi( textbox::@9/(byte) textbox::y#2 textbox::@2/(byte) textbox::y#5 ) + [62] (byte) textbox::x#7 ← phi( textbox::@9/(byte) textbox::x#12 textbox::@2/(byte) textbox::x#1 ) + [62] (word) textbox::z#4 ← phi( textbox::@9/(word) textbox::z#2 textbox::@2/(word) textbox::z#5 ) + [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 to:textbox::@return textbox::@6: scope:[textbox] from textbox::@15 - [63] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 - [64] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 + [64] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 + [65] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 to:textbox::@return textbox::@7: scope:[textbox] from textbox::@6 - [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 - [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 - [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 - [68] (byte) textbox::x#15 ← (byte) textbox::x1#4 + [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 + [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 + [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 + [69] (byte) textbox::x#15 ← (byte) textbox::x1#4 to:textbox::@2 textbox::@4: scope:[textbox] from textbox::@14 - [69] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 - [70] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 + [70] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 + [71] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 to:textbox::@3 (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) draw_window: scope:[draw_window] from textbox - [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 - [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 - [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 - [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 - [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 - [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 - [77] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 + [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 + [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 + [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 + [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 + [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 + [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 + [78] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 to:draw_window::@1 draw_window::@1: scope:[draw_window] from draw_window draw_window::@2 - [78] (byte) draw_window::x#2 ← phi( draw_window/(byte) draw_window::x#0 draw_window::@2/(byte) draw_window::x#1 ) - [79] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 + [79] (byte) draw_window::x#2 ← phi( draw_window/(byte) draw_window::x#0 draw_window::@2/(byte) draw_window::x#1 ) + [80] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 to:draw_window::@3 draw_window::@3: scope:[draw_window] from draw_window::@1 - [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 - [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 - [82] *((byte*~) draw_window::$29) ← (byte) $55 - [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 - [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 - [85] *((byte*~) draw_window::$30) ← (byte) $49 - [86] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 + [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 + [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 + [83] *((byte*~) draw_window::$29) ← (byte) $55 + [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 + [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 + [86] *((byte*~) draw_window::$30) ← (byte) $49 + [87] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 to:draw_window::@4 draw_window::@4: scope:[draw_window] from draw_window::@3 draw_window::@5 - [87] (byte) draw_window::y#2 ← phi( draw_window::@3/(byte) draw_window::y#0 draw_window::@5/(byte) draw_window::y#1 ) - [88] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 + [88] (byte) draw_window::y#2 ← phi( draw_window::@3/(byte) draw_window::y#0 draw_window::@5/(byte) draw_window::y#1 ) + [89] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 to:draw_window::@6 draw_window::@6: scope:[draw_window] from draw_window::@4 - [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 - [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 - [91] *((byte*~) draw_window::$33) ← (byte) $4a - [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 - [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 - [94] *((byte*~) draw_window::$34) ← (byte) $4b - [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 - [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 - [97] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return + [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 + [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 + [92] *((byte*~) draw_window::$33) ← (byte) $4a + [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 + [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 + [95] *((byte*~) draw_window::$34) ← (byte) $4b + [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 + [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 + [98] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return to:draw_window::@13 draw_window::@13: scope:[draw_window] from draw_window::@6 - [98] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 + [99] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 to:draw_window::@return draw_window::@return: scope:[draw_window] from draw_window::@13 draw_window::@6 draw_window::@8 - [99] return + [100] return to:@return draw_window::@7: scope:[draw_window] from draw_window::@13 - [100] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 + [101] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 to:draw_window::@8 draw_window::@8: scope:[draw_window] from draw_window::@12 draw_window::@7 - [101] (byte) draw_window::y3#2 ← phi( draw_window::@7/(byte) draw_window::y3#0 draw_window::@12/(byte) draw_window::y3#1 ) - [102] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 + [102] (byte) draw_window::y3#2 ← phi( draw_window::@7/(byte) draw_window::y3#0 draw_window::@12/(byte) draw_window::y3#1 ) + [103] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 to:draw_window::@return draw_window::@9: scope:[draw_window] from draw_window::@8 - [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 - [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 - [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 - [106] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 + [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 + [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 + [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 + [107] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 to:draw_window::@10 draw_window::@10: scope:[draw_window] from draw_window::@11 draw_window::@9 - [107] (byte) draw_window::x3#2 ← phi( draw_window::@9/(byte) draw_window::x3#0 draw_window::@11/(byte) draw_window::x3#1 ) - [108] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 + [108] (byte) draw_window::x3#2 ← phi( draw_window::@9/(byte) draw_window::x3#0 draw_window::@11/(byte) draw_window::x3#1 ) + [109] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 to:draw_window::@12 draw_window::@12: scope:[draw_window] from draw_window::@10 - [109] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 + [110] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 to:draw_window::@8 draw_window::@11: scope:[draw_window] from draw_window::@10 - [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 - [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 - [112] *((byte*~) draw_window::$35) ← (byte) $20 - [113] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 + [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 + [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 + [113] *((byte*~) draw_window::$35) ← (byte) $20 + [114] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 to:draw_window::@10 draw_window::@5: scope:[draw_window] from draw_window::@4 - [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 - [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 - [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 - [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 - [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 - [119] *((byte*~) draw_window::$31) ← (byte) $42 - [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 - [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 - [122] *((byte*~) draw_window::$32) ← (byte) $42 - [123] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 + [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 + [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 + [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 + [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 + [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 + [120] *((byte*~) draw_window::$31) ← (byte) $42 + [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 + [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 + [123] *((byte*~) draw_window::$32) ← (byte) $42 + [124] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 to:draw_window::@4 draw_window::@2: scope:[draw_window] from draw_window::@1 - [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 - [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 - [126] *((byte*~) draw_window::$27) ← (byte) $43 - [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 - [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 - [129] *((byte*~) draw_window::$28) ← (byte) $43 - [130] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 + [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 + [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 + [127] *((byte*~) draw_window::$27) ← (byte) $43 + [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 + [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 + [130] *((byte*~) draw_window::$28) ← (byte) $43 + [131] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 to:draw_window::@1 diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index 7378273bd..b1cf48c26 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -45,7 +45,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @7 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@6 (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@6/(byte) main::x#1 ) @@ -66,7 +66,7 @@ main::@2: scope:[main] from main::@1 to:main::@15 main::@15: scope:[main] from main::@2 (byte) main::x#6 ← phi( main::@2/(byte) main::x#3 ) - (word) main::wait#0 ← (number) 0 + (word) main::wait#0 ← (word) 0 to:main::@4 main::@3: scope:[main] from main::@1 (byte) textbox::x1#1 ← (number) 0 @@ -139,14 +139,15 @@ textbox::@24: scope:[textbox] from textbox (byte) textbox::y#0 ← (number~) textbox::$1 (number~) textbox::$2 ← (byte) textbox::x1#5 + (number) 1 (byte) textbox::x#0 ← (number~) textbox::$2 - (number~) textbox::$3 ← (byte) textbox::y#0 * (number) $28 - (word) textbox::z#0 ← (number~) textbox::$3 - (byte) textbox::i#0 ← (number) 0 - (bool~) textbox::$4 ← (byte) textbox::x#0 == (byte) textbox::x2#5 - (bool~) textbox::$5 ← (byte) textbox::y#0 == (byte) textbox::y2#5 - (bool~) textbox::$6 ← (bool~) textbox::$4 || (bool~) textbox::$5 - (bool~) textbox::$7 ← ! (bool~) textbox::$6 - if((bool~) textbox::$7) goto textbox::@4 + (word~) textbox::$3 ← ((word)) (byte) textbox::y#0 + (number~) textbox::$4 ← (word~) textbox::$3 * (number) $28 + (word) textbox::z#0 ← (number~) textbox::$4 + (byte) textbox::i#0 ← (byte) 0 + (bool~) textbox::$5 ← (byte) textbox::x#0 == (byte) textbox::x2#5 + (bool~) textbox::$6 ← (byte) textbox::y#0 == (byte) textbox::y2#5 + (bool~) textbox::$7 ← (bool~) textbox::$5 || (bool~) textbox::$6 + (bool~) textbox::$8 ← ! (bool~) textbox::$7 + if((bool~) textbox::$8) goto textbox::@4 to:textbox::@return textbox::@return: scope:[textbox] from textbox::@12 textbox::@17 textbox::@20 textbox::@24 return @@ -160,11 +161,11 @@ textbox::@4: scope:[textbox] from textbox::@17 textbox::@24 (byte*) textbox::text#4 ← phi( textbox::@17/(byte*) textbox::text#6 textbox::@24/(byte*) textbox::text#7 ) (byte) textbox::x#4 ← phi( textbox::@17/(byte) textbox::x#7 textbox::@24/(byte) textbox::x#0 ) (word) textbox::z#3 ← phi( textbox::@17/(word) textbox::z#4 textbox::@24/(word) textbox::z#0 ) - (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#4 - *((const byte*) screen + (word~) textbox::$8) ← *((byte*) textbox::text#4 + (byte) textbox::i#2) - (bool~) textbox::$9 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) == (number) $20 - (bool~) textbox::$10 ← ! (bool~) textbox::$9 - if((bool~) textbox::$10) goto textbox::@5 + (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#4 + *((const byte*) screen + (word~) textbox::$9) ← *((byte*) textbox::text#4 + (byte) textbox::i#2) + (bool~) textbox::$10 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) == (number) $20 + (bool~) textbox::$11 ← ! (bool~) textbox::$10 + if((bool~) textbox::$11) goto textbox::@5 to:textbox::@19 textbox::@5: scope:[textbox] from textbox::@16 textbox::@4 textbox::@8 (word) textbox::z#5 ← phi( textbox::@16/(word) textbox::z#1 textbox::@4/(word) textbox::z#3 textbox::@8/(word) textbox::z#6 ) @@ -177,9 +178,9 @@ textbox::@5: scope:[textbox] from textbox::@16 textbox::@4 textbox::@8 (byte) textbox::i#3 ← phi( textbox::@16/(byte) textbox::i#6 textbox::@4/(byte) textbox::i#2 textbox::@8/(byte) textbox::i#7 ) (byte) textbox::i#1 ← ++ (byte) textbox::i#3 (byte) textbox::x#1 ← ++ (byte) textbox::x#5 - (bool~) textbox::$24 ← (byte) textbox::x#1 == (byte) textbox::x2#6 - (bool~) textbox::$25 ← ! (bool~) textbox::$24 - if((bool~) textbox::$25) goto textbox::@17 + (bool~) textbox::$25 ← (byte) textbox::x#1 == (byte) textbox::x2#6 + (bool~) textbox::$26 ← ! (bool~) textbox::$25 + if((bool~) textbox::$26) goto textbox::@17 to:textbox::@20 textbox::@19: scope:[textbox] from textbox::@4 (word) textbox::z#8 ← phi( textbox::@4/(word) textbox::z#3 ) @@ -190,9 +191,9 @@ textbox::@19: scope:[textbox] from textbox::@4 (byte) textbox::x#10 ← phi( textbox::@4/(byte) textbox::x#4 ) (byte*) textbox::text#8 ← phi( textbox::@4/(byte*) textbox::text#4 ) (byte) textbox::i#4 ← phi( textbox::@4/(byte) textbox::i#2 ) - (byte) textbox::c#0 ← (number) 0 - (number~) textbox::$11 ← (byte) textbox::i#4 + (number) 1 - (byte) textbox::ls#0 ← (number~) textbox::$11 + (byte) textbox::c#0 ← (byte) 0 + (number~) textbox::$12 ← (byte) textbox::i#4 + (number) 1 + (byte) textbox::ls#0 ← (number~) textbox::$12 to:textbox::@6 textbox::@6: scope:[textbox] from textbox::@19 textbox::@7 (word) textbox::z#7 ← phi( textbox::@19/(word) textbox::z#8 textbox::@7/(word) textbox::z#9 ) @@ -205,10 +206,10 @@ textbox::@6: scope:[textbox] from textbox::@19 textbox::@7 (byte) textbox::c#4 ← phi( textbox::@19/(byte) textbox::c#0 textbox::@7/(byte) textbox::c#1 ) (byte) textbox::ls#2 ← phi( textbox::@19/(byte) textbox::ls#0 textbox::@7/(byte) textbox::ls#1 ) (byte*) textbox::text#5 ← phi( textbox::@19/(byte*) textbox::text#8 textbox::@7/(byte*) textbox::text#9 ) - (bool~) textbox::$12 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) $20 - (bool~) textbox::$13 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) 0 - (bool~) textbox::$14 ← (bool~) textbox::$12 && (bool~) textbox::$13 - if((bool~) textbox::$14) goto textbox::@7 + (bool~) textbox::$13 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) $20 + (bool~) textbox::$14 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) 0 + (bool~) textbox::$15 ← (bool~) textbox::$13 && (bool~) textbox::$14 + if((bool~) textbox::$15) goto textbox::@7 to:textbox::@8 textbox::@7: scope:[textbox] from textbox::@6 (word) textbox::z#9 ← phi( textbox::@6/(word) textbox::z#7 ) @@ -234,13 +235,13 @@ textbox::@8: scope:[textbox] from textbox::@6 (byte) textbox::x2#7 ← phi( textbox::@6/(byte) textbox::x2#10 ) (byte) textbox::x#6 ← phi( textbox::@6/(byte) textbox::x#9 ) (byte) textbox::c#3 ← phi( textbox::@6/(byte) textbox::c#4 ) - (byte~) textbox::$15 ← (byte) textbox::c#3 + (byte) textbox::x#6 - (bool~) textbox::$16 ← (byte~) textbox::$15 >= (byte) textbox::x2#7 - (byte~) textbox::$17 ← (byte) textbox::x2#7 - (byte) textbox::x1#6 - (bool~) textbox::$18 ← (byte) textbox::c#3 < (byte~) textbox::$17 - (bool~) textbox::$19 ← (bool~) textbox::$16 && (bool~) textbox::$18 - (bool~) textbox::$20 ← ! (bool~) textbox::$19 - if((bool~) textbox::$20) goto textbox::@5 + (byte~) textbox::$16 ← (byte) textbox::c#3 + (byte) textbox::x#6 + (bool~) textbox::$17 ← (byte~) textbox::$16 >= (byte) textbox::x2#7 + (byte~) textbox::$18 ← (byte) textbox::x2#7 - (byte) textbox::x1#6 + (bool~) textbox::$19 ← (byte) textbox::c#3 < (byte~) textbox::$18 + (bool~) textbox::$20 ← (bool~) textbox::$17 && (bool~) textbox::$19 + (bool~) textbox::$21 ← ! (bool~) textbox::$20 + if((bool~) textbox::$21) goto textbox::@5 to:textbox::@12 textbox::@12: scope:[textbox] from textbox::@8 (byte*) textbox::text#16 ← phi( textbox::@8/(byte*) textbox::text#14 ) @@ -251,9 +252,9 @@ textbox::@12: scope:[textbox] from textbox::@8 (byte) textbox::x1#7 ← phi( textbox::@8/(byte) textbox::x1#6 ) (byte) textbox::x#2 ← (byte) textbox::x1#7 (byte) textbox::y#1 ← ++ (byte) textbox::y#3 - (bool~) textbox::$21 ← (byte) textbox::y#1 == (byte) textbox::y2#6 - (bool~) textbox::$22 ← ! (bool~) textbox::$21 - if((bool~) textbox::$22) goto textbox::@16 + (bool~) textbox::$22 ← (byte) textbox::y#1 == (byte) textbox::y2#6 + (bool~) textbox::$23 ← ! (bool~) textbox::$22 + if((bool~) textbox::$23) goto textbox::@16 to:textbox::@return textbox::@16: scope:[textbox] from textbox::@12 (byte) textbox::y2#10 ← phi( textbox::@12/(byte) textbox::y2#6 ) @@ -263,8 +264,8 @@ textbox::@16: scope:[textbox] from textbox::@12 (byte) textbox::x#8 ← phi( textbox::@12/(byte) textbox::x#2 ) (byte) textbox::i#6 ← phi( textbox::@12/(byte) textbox::i#10 ) (byte) textbox::y#4 ← phi( textbox::@12/(byte) textbox::y#1 ) - (number~) textbox::$23 ← (byte) textbox::y#4 * (number) $28 - (word) textbox::z#1 ← (number~) textbox::$23 + (number~) textbox::$24 ← (byte) textbox::y#4 * (number) $28 + (word) textbox::z#1 ← (number~) textbox::$24 to:textbox::@5 textbox::@17: scope:[textbox] from textbox::@18 textbox::@5 (byte) textbox::y2#13 ← phi( textbox::@18/(byte) textbox::y2#16 textbox::@5/(byte) textbox::y2#9 ) @@ -275,8 +276,8 @@ textbox::@17: scope:[textbox] from textbox::@18 textbox::@5 (word) textbox::z#4 ← phi( textbox::@18/(word) textbox::z#2 textbox::@5/(word) textbox::z#5 ) (byte) textbox::i#5 ← phi( textbox::@18/(byte) textbox::i#8 textbox::@5/(byte) textbox::i#1 ) (byte*) textbox::text#6 ← phi( textbox::@18/(byte*) textbox::text#10 textbox::@5/(byte*) textbox::text#11 ) - (bool~) textbox::$30 ← *((byte*) textbox::text#6 + (byte) textbox::i#5) != (number) 0 - if((bool~) textbox::$30) goto textbox::@4 + (bool~) textbox::$31 ← *((byte*) textbox::text#6 + (byte) textbox::i#5) != (number) 0 + if((bool~) textbox::$31) goto textbox::@4 to:textbox::@return textbox::@20: scope:[textbox] from textbox::@5 (byte) textbox::x2#16 ← phi( textbox::@5/(byte) textbox::x2#6 ) @@ -285,12 +286,12 @@ textbox::@20: scope:[textbox] from textbox::@5 (byte) textbox::y2#7 ← phi( textbox::@5/(byte) textbox::y2#9 ) (byte) textbox::y#5 ← phi( textbox::@5/(byte) textbox::y#8 ) (byte) textbox::x1#8 ← phi( textbox::@5/(byte) textbox::x1#10 ) - (number~) textbox::$26 ← (byte) textbox::x1#8 + (number) 1 - (byte) textbox::x#3 ← (number~) textbox::$26 + (number~) textbox::$27 ← (byte) textbox::x1#8 + (number) 1 + (byte) textbox::x#3 ← (number~) textbox::$27 (byte) textbox::y#2 ← ++ (byte) textbox::y#5 - (bool~) textbox::$27 ← (byte) textbox::y#2 == (byte) textbox::y2#7 - (bool~) textbox::$28 ← ! (bool~) textbox::$27 - if((bool~) textbox::$28) goto textbox::@18 + (bool~) textbox::$28 ← (byte) textbox::y#2 == (byte) textbox::y2#7 + (bool~) textbox::$29 ← ! (bool~) textbox::$28 + if((bool~) textbox::$29) goto textbox::@18 to:textbox::@return textbox::@18: scope:[textbox] from textbox::@20 (byte) textbox::y2#16 ← phi( textbox::@20/(byte) textbox::y2#7 ) @@ -300,8 +301,8 @@ textbox::@18: scope:[textbox] from textbox::@20 (byte) textbox::i#8 ← phi( textbox::@20/(byte) textbox::i#11 ) (byte*) textbox::text#10 ← phi( textbox::@20/(byte*) textbox::text#15 ) (byte) textbox::y#6 ← phi( textbox::@20/(byte) textbox::y#2 ) - (number~) textbox::$29 ← (byte) textbox::y#6 * (number) $28 - (word) textbox::z#2 ← (number~) textbox::$29 + (number~) textbox::$30 ← (byte) textbox::y#6 * (number) $28 + (word) textbox::z#2 ← (number~) textbox::$30 to:textbox::@17 (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) @@ -642,34 +643,35 @@ SYMBOL TABLE SSA (void()) textbox((byte) textbox::x1 , (byte) textbox::y1 , (byte) textbox::x2 , (byte) textbox::y2 , (byte*) textbox::text) (number~) textbox::$1 (bool~) textbox::$10 -(number~) textbox::$11 -(bool~) textbox::$12 +(bool~) textbox::$11 +(number~) textbox::$12 (bool~) textbox::$13 (bool~) textbox::$14 -(byte~) textbox::$15 -(bool~) textbox::$16 -(byte~) textbox::$17 -(bool~) textbox::$18 +(bool~) textbox::$15 +(byte~) textbox::$16 +(bool~) textbox::$17 +(byte~) textbox::$18 (bool~) textbox::$19 (number~) textbox::$2 (bool~) textbox::$20 (bool~) textbox::$21 (bool~) textbox::$22 -(number~) textbox::$23 -(bool~) textbox::$24 +(bool~) textbox::$23 +(number~) textbox::$24 (bool~) textbox::$25 -(number~) textbox::$26 -(bool~) textbox::$27 +(bool~) textbox::$26 +(number~) textbox::$27 (bool~) textbox::$28 -(number~) textbox::$29 -(number~) textbox::$3 -(bool~) textbox::$30 -(bool~) textbox::$4 +(bool~) textbox::$29 +(word~) textbox::$3 +(number~) textbox::$30 +(bool~) textbox::$31 +(number~) textbox::$4 (bool~) textbox::$5 (bool~) textbox::$6 (bool~) textbox::$7 -(word~) textbox::$8 -(bool~) textbox::$9 +(bool~) textbox::$8 +(word~) textbox::$9 (label) textbox::@12 (label) textbox::@16 (label) textbox::@17 @@ -828,13 +830,11 @@ SYMBOL TABLE SSA (word) textbox::z#8 (word) textbox::z#9 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 Adding number conversion cast (unumber) $f in (bool~) main::$3 ← (byte) main::x#2 < (number) $f Adding number conversion cast (unumber) 1 in (number~) main::$5 ← (byte~) main::$4 + (number) 1 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte~) main::$4 + (unumber)(number) 1 Adding number conversion cast (unumber) $a in (number~) main::$6 ← (byte) main::x#3 + (number) $a Adding number conversion cast (unumber) main::$6 in (number~) main::$6 ← (byte) main::x#3 + (unumber)(number) $a -Adding number conversion cast (unumber) 0 in (word) main::wait#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) textbox::x1#1 ← (number) 0 Adding number conversion cast (unumber) $c in (byte) textbox::y1#1 ← (number) $c Adding number conversion cast (unumber) $14 in (byte) textbox::x2#1 ← (number) $14 @@ -853,22 +853,20 @@ Adding number conversion cast (unumber) 1 in (number~) textbox::$1 ← (byte) te Adding number conversion cast (unumber) textbox::$1 in (number~) textbox::$1 ← (byte) textbox::y1#5 + (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (number~) textbox::$2 ← (byte) textbox::x1#5 + (number) 1 Adding number conversion cast (unumber) textbox::$2 in (number~) textbox::$2 ← (byte) textbox::x1#5 + (unumber)(number) 1 -Adding number conversion cast (unumber) $28 in (number~) textbox::$3 ← (byte) textbox::y#0 * (number) $28 -Adding number conversion cast (unumber) textbox::$3 in (number~) textbox::$3 ← (byte) textbox::y#0 * (unumber)(number) $28 -Adding number conversion cast (unumber) 0 in (byte) textbox::i#0 ← (number) 0 -Adding number conversion cast (unumber) $20 in (bool~) textbox::$9 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) == (number) $20 -Adding number conversion cast (unumber) 0 in (byte) textbox::c#0 ← (number) 0 -Adding number conversion cast (unumber) 1 in (number~) textbox::$11 ← (byte) textbox::i#4 + (number) 1 -Adding number conversion cast (unumber) textbox::$11 in (number~) textbox::$11 ← (byte) textbox::i#4 + (unumber)(number) 1 -Adding number conversion cast (unumber) $20 in (bool~) textbox::$12 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) $20 -Adding number conversion cast (unumber) 0 in (bool~) textbox::$13 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) 0 -Adding number conversion cast (unumber) $28 in (number~) textbox::$23 ← (byte) textbox::y#4 * (number) $28 -Adding number conversion cast (unumber) textbox::$23 in (number~) textbox::$23 ← (byte) textbox::y#4 * (unumber)(number) $28 -Adding number conversion cast (unumber) 0 in (bool~) textbox::$30 ← *((byte*) textbox::text#6 + (byte) textbox::i#5) != (number) 0 -Adding number conversion cast (unumber) 1 in (number~) textbox::$26 ← (byte) textbox::x1#8 + (number) 1 -Adding number conversion cast (unumber) textbox::$26 in (number~) textbox::$26 ← (byte) textbox::x1#8 + (unumber)(number) 1 -Adding number conversion cast (unumber) $28 in (number~) textbox::$29 ← (byte) textbox::y#6 * (number) $28 -Adding number conversion cast (unumber) textbox::$29 in (number~) textbox::$29 ← (byte) textbox::y#6 * (unumber)(number) $28 +Adding number conversion cast (unumber) $28 in (number~) textbox::$4 ← (word~) textbox::$3 * (number) $28 +Adding number conversion cast (unumber) textbox::$4 in (number~) textbox::$4 ← (word~) textbox::$3 * (unumber)(number) $28 +Adding number conversion cast (unumber) $20 in (bool~) textbox::$10 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) == (number) $20 +Adding number conversion cast (unumber) 1 in (number~) textbox::$12 ← (byte) textbox::i#4 + (number) 1 +Adding number conversion cast (unumber) textbox::$12 in (number~) textbox::$12 ← (byte) textbox::i#4 + (unumber)(number) 1 +Adding number conversion cast (unumber) $20 in (bool~) textbox::$13 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) $20 +Adding number conversion cast (unumber) 0 in (bool~) textbox::$14 ← *((byte*) textbox::text#5 + (byte) textbox::ls#2) != (number) 0 +Adding number conversion cast (unumber) $28 in (number~) textbox::$24 ← (byte) textbox::y#4 * (number) $28 +Adding number conversion cast (unumber) textbox::$24 in (number~) textbox::$24 ← (byte) textbox::y#4 * (unumber)(number) $28 +Adding number conversion cast (unumber) 0 in (bool~) textbox::$31 ← *((byte*) textbox::text#6 + (byte) textbox::i#5) != (number) 0 +Adding number conversion cast (unumber) 1 in (number~) textbox::$27 ← (byte) textbox::x1#8 + (number) 1 +Adding number conversion cast (unumber) textbox::$27 in (number~) textbox::$27 ← (byte) textbox::x1#8 + (unumber)(number) 1 +Adding number conversion cast (unumber) $28 in (number~) textbox::$30 ← (byte) textbox::y#6 * (number) $28 +Adding number conversion cast (unumber) textbox::$30 in (number~) textbox::$30 ← (byte) textbox::y#6 * (unumber)(number) $28 Adding number conversion cast (unumber) $28 in (number~) draw_window::$0 ← (byte) draw_window::y1#1 * (number) $28 Adding number conversion cast (unumber) draw_window::$0 in (number~) draw_window::$0 ← (byte) draw_window::y1#1 * (unumber)(number) $28 Adding number conversion cast (unumber) $28 in (number~) draw_window::$1 ← (byte) draw_window::y2#1 * (number) $28 @@ -897,8 +895,6 @@ Adding number conversion cast (unumber) 1 in (number~) draw_window::$24 ← (byt Adding number conversion cast (unumber) draw_window::$24 in (number~) draw_window::$24 ← (byte) draw_window::x1#5 + (unumber)(number) 1 Adding number conversion cast (unumber) $20 in *((const byte*) screen + (word~) draw_window::$26) ← (number) $20 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 -Inlining cast (word) main::wait#0 ← (unumber)(number) 0 Inlining cast (byte) textbox::x1#1 ← (unumber)(number) 0 Inlining cast (byte) textbox::y1#1 ← (unumber)(number) $c Inlining cast (byte) textbox::x2#1 ← (unumber)(number) $14 @@ -911,8 +907,7 @@ Inlining cast (byte) textbox::x1#3 ← (unumber)(number) $1e Inlining cast (byte) textbox::y1#3 ← (unumber)(number) 8 Inlining cast (byte) textbox::x2#3 ← (unumber)(number) $27 Inlining cast (byte) textbox::y2#3 ← (unumber)(number) $18 -Inlining cast (byte) textbox::i#0 ← (unumber)(number) 0 -Inlining cast (byte) textbox::c#0 ← (unumber)(number) 0 +Inlining cast (word~) textbox::$3 ← (word)(byte) textbox::y#0 Inlining cast *((const byte*) screen + (word~) draw_window::$14) ← (unumber)(number) $43 Inlining cast *((const byte*) screen + (word~) draw_window::$15) ← (unumber)(number) $43 Inlining cast *((const byte*) screen + (word~) draw_window::$2) ← (unumber)(number) $55 @@ -924,12 +919,10 @@ Inlining cast *((const byte*) screen + (word~) draw_window::$5) ← (unumber)(nu Inlining cast *((const byte*) screen + (word~) draw_window::$26) ← (unumber)(number) $20 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast 1 Simplifying constant integer cast $a Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $c Simplifying constant integer cast $14 Simplifying constant integer cast $18 @@ -946,9 +939,7 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 Simplifying constant integer cast $20 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $20 Simplifying constant integer cast 0 @@ -976,12 +967,10 @@ Simplifying constant integer cast $28 Simplifying constant integer cast 1 Simplifying constant integer cast $20 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c Finalized unsigned number type (byte) $14 Finalized unsigned number type (byte) $18 @@ -998,9 +987,7 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $20 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 0 @@ -1032,11 +1019,11 @@ Inferred type updated to byte in (unumber~) main::$5 ← (byte~) main::$4 + (byt Inferred type updated to byte in (unumber~) main::$6 ← (byte) main::x#3 + (byte) $a Inferred type updated to byte in (unumber~) textbox::$1 ← (byte) textbox::y1#5 + (byte) 1 Inferred type updated to byte in (unumber~) textbox::$2 ← (byte) textbox::x1#5 + (byte) 1 -Inferred type updated to byte in (unumber~) textbox::$3 ← (byte) textbox::y#0 * (byte) $28 -Inferred type updated to byte in (unumber~) textbox::$11 ← (byte) textbox::i#4 + (byte) 1 -Inferred type updated to byte in (unumber~) textbox::$23 ← (byte) textbox::y#4 * (byte) $28 -Inferred type updated to byte in (unumber~) textbox::$26 ← (byte) textbox::x1#8 + (byte) 1 -Inferred type updated to byte in (unumber~) textbox::$29 ← (byte) textbox::y#6 * (byte) $28 +Inferred type updated to word in (unumber~) textbox::$4 ← (word~) textbox::$3 * (byte) $28 +Inferred type updated to byte in (unumber~) textbox::$12 ← (byte) textbox::i#4 + (byte) 1 +Inferred type updated to byte in (unumber~) textbox::$24 ← (byte) textbox::y#4 * (byte) $28 +Inferred type updated to byte in (unumber~) textbox::$27 ← (byte) textbox::x1#8 + (byte) 1 +Inferred type updated to byte in (unumber~) textbox::$30 ← (byte) textbox::y#6 * (byte) $28 Inferred type updated to byte in (unumber~) draw_window::$0 ← (byte) draw_window::y1#1 * (byte) $28 Inferred type updated to byte in (unumber~) draw_window::$1 ← (byte) draw_window::y2#1 * (byte) $28 Inferred type updated to byte in (unumber~) draw_window::$12 ← (byte) draw_window::x1#1 + (byte) 1 @@ -1045,10 +1032,10 @@ Inferred type updated to byte in (unumber~) draw_window::$18 ← (byte) draw_win Inferred type updated to byte in (unumber~) draw_window::$21 ← (byte) draw_window::y1#4 + (byte) 1 Inferred type updated to byte in (unumber~) draw_window::$23 ← (byte) draw_window::y3#3 * (byte) $28 Inferred type updated to byte in (unumber~) draw_window::$24 ← (byte) draw_window::x1#5 + (byte) 1 -Inversing boolean not [67] (bool~) textbox::$10 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) != (byte) $20 from [66] (bool~) textbox::$9 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) == (byte) $20 -Inversing boolean not [73] (bool~) textbox::$25 ← (byte) textbox::x#1 != (byte) textbox::x2#6 from [72] (bool~) textbox::$24 ← (byte) textbox::x#1 == (byte) textbox::x2#6 -Inversing boolean not [99] (bool~) textbox::$22 ← (byte) textbox::y#1 != (byte) textbox::y2#6 from [98] (bool~) textbox::$21 ← (byte) textbox::y#1 == (byte) textbox::y2#6 -Inversing boolean not [112] (bool~) textbox::$28 ← (byte) textbox::y#2 != (byte) textbox::y2#7 from [111] (bool~) textbox::$27 ← (byte) textbox::y#2 == (byte) textbox::y2#7 +Inversing boolean not [68] (bool~) textbox::$11 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) != (byte) $20 from [67] (bool~) textbox::$10 ← *((byte*) textbox::text#4 + (byte) textbox::i#2) == (byte) $20 +Inversing boolean not [74] (bool~) textbox::$26 ← (byte) textbox::x#1 != (byte) textbox::x2#6 from [73] (bool~) textbox::$25 ← (byte) textbox::x#1 == (byte) textbox::x2#6 +Inversing boolean not [100] (bool~) textbox::$23 ← (byte) textbox::y#1 != (byte) textbox::y2#6 from [99] (bool~) textbox::$22 ← (byte) textbox::y#1 == (byte) textbox::y2#6 +Inversing boolean not [113] (bool~) textbox::$29 ← (byte) textbox::y#2 != (byte) textbox::y2#7 from [112] (bool~) textbox::$28 ← (byte) textbox::y#2 == (byte) textbox::y2#7 Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::x#2 = (byte) main::x#3 (byte) main::x#6 Alias (byte) textbox::x2#0 = (byte~) main::$5 @@ -1062,7 +1049,7 @@ Alias (byte) textbox::y2#4 = (byte) textbox::y2#5 Alias (byte*) textbox::text#12 = (byte*) textbox::text#7 Alias (byte) textbox::y#0 = (byte~) textbox::$1 Alias (byte) textbox::x#0 = (byte~) textbox::$2 -Alias (word) textbox::z#0 = (byte~) textbox::$3 +Alias (word) textbox::z#0 = (word~) textbox::$4 Alias (byte) textbox::i#2 = (byte) textbox::i#4 Alias (byte*) textbox::text#4 = (byte*) textbox::text#8 Alias (byte) textbox::x#10 = (byte) textbox::x#4 @@ -1071,7 +1058,7 @@ Alias (byte) textbox::x1#12 = (byte) textbox::x1#13 Alias (byte) textbox::y#12 = (byte) textbox::y#9 Alias (byte) textbox::y2#11 = (byte) textbox::y2#14 Alias (word) textbox::z#3 = (word) textbox::z#8 -Alias (byte) textbox::ls#0 = (byte~) textbox::$11 +Alias (byte) textbox::ls#0 = (byte~) textbox::$12 Alias (byte) textbox::ls#2 = (byte) textbox::ls#3 Alias (byte) textbox::c#2 = (byte) textbox::c#4 (byte) textbox::c#3 Alias (byte*) textbox::text#13 = (byte*) textbox::text#9 (byte*) textbox::text#5 (byte*) textbox::text#14 (byte*) textbox::text#16 @@ -1083,16 +1070,16 @@ Alias (byte) textbox::y#10 = (byte) textbox::y#13 (byte) textbox::y#7 (byte) tex Alias (byte) textbox::y2#10 = (byte) textbox::y2#15 (byte) textbox::y2#12 (byte) textbox::y2#8 (byte) textbox::y2#6 Alias (word) textbox::z#6 = (word) textbox::z#9 (word) textbox::z#7 Alias (byte) textbox::y#1 = (byte) textbox::y#4 -Alias (word) textbox::z#1 = (byte~) textbox::$23 +Alias (word) textbox::z#1 = (byte~) textbox::$24 Alias (byte) textbox::x1#10 = (byte) textbox::x1#8 (byte) textbox::x1#16 Alias (byte) textbox::y#5 = (byte) textbox::y#8 Alias (byte) textbox::y2#16 = (byte) textbox::y2#7 (byte) textbox::y2#9 Alias (byte*) textbox::text#10 = (byte*) textbox::text#15 (byte*) textbox::text#11 Alias (byte) textbox::i#1 = (byte) textbox::i#11 (byte) textbox::i#8 Alias (byte) textbox::x2#15 = (byte) textbox::x2#16 (byte) textbox::x2#6 -Alias (byte) textbox::x#12 = (byte) textbox::x#3 (byte~) textbox::$26 +Alias (byte) textbox::x#12 = (byte) textbox::x#3 (byte~) textbox::$27 Alias (byte) textbox::y#2 = (byte) textbox::y#6 -Alias (word) textbox::z#2 = (byte~) textbox::$29 +Alias (word) textbox::z#2 = (byte~) textbox::$30 Alias (word) draw_window::z#0 = (byte~) draw_window::$0 Alias (word) draw_window::q#0 = (byte~) draw_window::$1 Alias (byte) draw_window::x#0 = (byte~) draw_window::$12 @@ -1177,23 +1164,23 @@ Identical Phi Values (byte) textbox::y2#11 (byte) textbox::y2#4 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$3 [3] if((byte) main::x#2<(byte) $f) goto main::@2 Simple Condition (bool~) main::$8 [36] if((word) main::wait#2<(word) $88b8) goto main::@5 -Simple Condition (bool~) textbox::$10 [68] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@5 -Simple Condition (bool~) textbox::$25 [74] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@17 -Simple Condition (bool~) textbox::$22 [100] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@16 -Simple Condition (bool~) textbox::$30 [106] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@4 -Simple Condition (bool~) textbox::$28 [113] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@18 -Simple Condition (bool~) draw_window::$13 [126] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@3 -Simple Condition (bool~) draw_window::$17 [142] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@9 -Simple Condition (bool~) draw_window::$22 [168] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@16 -Simple Condition (bool~) draw_window::$25 [176] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@19 +Simple Condition (bool~) textbox::$11 [69] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@5 +Simple Condition (bool~) textbox::$26 [75] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@17 +Simple Condition (bool~) textbox::$23 [101] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@16 +Simple Condition (bool~) textbox::$31 [107] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@4 +Simple Condition (bool~) textbox::$29 [114] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@18 +Simple Condition (bool~) draw_window::$13 [127] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@3 +Simple Condition (bool~) draw_window::$17 [143] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@9 +Simple Condition (bool~) draw_window::$22 [169] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@16 +Simple Condition (bool~) draw_window::$25 [177] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@19 Successful SSA optimization Pass2ConditionalJumpSimplification -Rewriting ! if()-condition to reversed if() [60] (bool~) textbox::$7 ← ! (bool~) textbox::$6 -Rewriting || if()-condition to two if()s [59] (bool~) textbox::$6 ← (bool~) textbox::$4 || (bool~) textbox::$5 -Rewriting && if()-condition to two if()s [82] (bool~) textbox::$14 ← (bool~) textbox::$12 && (bool~) textbox::$13 -Rewriting ! if()-condition to reversed if() [93] (bool~) textbox::$20 ← ! (bool~) textbox::$19 -Rewriting && if()-condition to two if()s [92] (bool~) textbox::$19 ← (bool~) textbox::$16 && (bool~) textbox::$18 -Rewriting ! if()-condition to reversed if() [161] (bool~) draw_window::$11 ← ! (bool~) draw_window::$10 -Rewriting && if()-condition to two if()s [160] (bool~) draw_window::$10 ← (bool~) draw_window::$7 && (bool~) draw_window::$9 +Rewriting ! if()-condition to reversed if() [61] (bool~) textbox::$8 ← ! (bool~) textbox::$7 +Rewriting || if()-condition to two if()s [60] (bool~) textbox::$7 ← (bool~) textbox::$5 || (bool~) textbox::$6 +Rewriting && if()-condition to two if()s [83] (bool~) textbox::$15 ← (bool~) textbox::$13 && (bool~) textbox::$14 +Rewriting ! if()-condition to reversed if() [94] (bool~) textbox::$21 ← ! (bool~) textbox::$20 +Rewriting && if()-condition to two if()s [93] (bool~) textbox::$20 ← (bool~) textbox::$17 && (bool~) textbox::$19 +Rewriting ! if()-condition to reversed if() [162] (bool~) draw_window::$11 ← ! (bool~) draw_window::$10 +Rewriting && if()-condition to two if()s [161] (bool~) draw_window::$10 ← (bool~) draw_window::$7 && (bool~) draw_window::$9 Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte) main::x#0 = 0 Constant (const byte*) textbox::text#0 = text2 @@ -1218,34 +1205,34 @@ Constant (const byte) textbox::c#0 = 0 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [41] if(true) goto main::@13 Successful SSA optimization Pass2ConstantIfs -De-inlining pointer[w] to *(pointer+w) [65] *((const byte*) screen + (word~) textbox::$8) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -De-inlining pointer[w] to *(pointer+w) [129] *((const byte*) screen + (word~) draw_window::$14) ← (byte) $43 -De-inlining pointer[w] to *(pointer+w) [131] *((const byte*) screen + (word~) draw_window::$15) ← (byte) $43 -De-inlining pointer[w] to *(pointer+w) [135] *((const byte*) screen + (word~) draw_window::$2) ← (byte) $55 -De-inlining pointer[w] to *(pointer+w) [137] *((const byte*) screen + (word~) draw_window::$3) ← (byte) $49 -De-inlining pointer[w] to *(pointer+w) [147] *((const byte*) screen + (word~) draw_window::$19) ← (byte) $42 -De-inlining pointer[w] to *(pointer+w) [149] *((const byte*) screen + (word~) draw_window::$20) ← (byte) $42 -De-inlining pointer[w] to *(pointer+w) [153] *((const byte*) screen + (word~) draw_window::$4) ← (byte) $4a -De-inlining pointer[w] to *(pointer+w) [155] *((const byte*) screen + (word~) draw_window::$5) ← (byte) $4b -De-inlining pointer[w] to *(pointer+w) [179] *((const byte*) screen + (word~) draw_window::$26) ← (byte) $20 +De-inlining pointer[w] to *(pointer+w) [66] *((const byte*) screen + (word~) textbox::$9) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) +De-inlining pointer[w] to *(pointer+w) [130] *((const byte*) screen + (word~) draw_window::$14) ← (byte) $43 +De-inlining pointer[w] to *(pointer+w) [132] *((const byte*) screen + (word~) draw_window::$15) ← (byte) $43 +De-inlining pointer[w] to *(pointer+w) [136] *((const byte*) screen + (word~) draw_window::$2) ← (byte) $55 +De-inlining pointer[w] to *(pointer+w) [138] *((const byte*) screen + (word~) draw_window::$3) ← (byte) $49 +De-inlining pointer[w] to *(pointer+w) [148] *((const byte*) screen + (word~) draw_window::$19) ← (byte) $42 +De-inlining pointer[w] to *(pointer+w) [150] *((const byte*) screen + (word~) draw_window::$20) ← (byte) $42 +De-inlining pointer[w] to *(pointer+w) [154] *((const byte*) screen + (word~) draw_window::$4) ← (byte) $4a +De-inlining pointer[w] to *(pointer+w) [156] *((const byte*) screen + (word~) draw_window::$5) ← (byte) $4b +De-inlining pointer[w] to *(pointer+w) [180] *((const byte*) screen + (word~) draw_window::$26) ← (byte) $20 Successful SSA optimization Pass2DeInlineWordDerefIdx Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks -Simple Condition (bool~) textbox::$4 [26] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -Simple Condition (bool~) textbox::$12 [41] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) $20) goto textbox::@26 -Simple Condition (bool~) textbox::$16 [48] if((byte~) textbox::$15>=(byte) textbox::x2#4) goto textbox::@27 -Simple Condition (bool~) draw_window::$7 [97] if((byte~) draw_window::$6>(byte) 1) goto draw_window::@27 -Simple Condition (bool~) textbox::$5 [112] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -Simple Condition (bool~) textbox::$13 [113] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@7 -Simple Condition (bool~) textbox::$18 [114] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@12 -Simple Condition (bool~) draw_window::$9 [115] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 +Simple Condition (bool~) textbox::$5 [27] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return +Simple Condition (bool~) textbox::$13 [42] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) $20) goto textbox::@26 +Simple Condition (bool~) textbox::$17 [49] if((byte~) textbox::$16>=(byte) textbox::x2#4) goto textbox::@27 +Simple Condition (bool~) draw_window::$7 [98] if((byte~) draw_window::$6>(byte) 1) goto draw_window::@27 +Simple Condition (bool~) textbox::$6 [113] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return +Simple Condition (bool~) textbox::$14 [114] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@7 +Simple Condition (bool~) textbox::$19 [115] if((byte) textbox::c#2<(byte~) textbox::$18) goto textbox::@12 +Simple Condition (bool~) draw_window::$9 [116] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [41] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@8 -Negating conditional jump and destination [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@5 -Negating conditional jump and destination [97] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return +Negating conditional jump and destination [42] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@8 +Negating conditional jump and destination [49] if((byte~) textbox::$16<(byte) textbox::x2#4) goto textbox::@5 +Negating conditional jump and destination [98] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Rewriting conditional comparison [97] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return -Rewriting conditional comparison [115] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 +Rewriting conditional comparison [98] if((byte~) draw_window::$6<=(byte) 1) goto draw_window::@return +Rewriting conditional comparison [116] if((byte~) draw_window::$8>(byte) 1) goto draw_window::@14 Adding number conversion cast (unumber) 1+1 in if((byte~) draw_window::$6<(byte) 1+(number) 1) goto draw_window::@return Adding number conversion cast (unumber) 1 in if((byte~) draw_window::$6<(unumber)(byte) 1+(number) 1) goto draw_window::@return Adding number conversion cast (unumber) 1+1 in if((byte~) draw_window::$8>=(byte) 1+(number) 1) goto draw_window::@14 @@ -1259,13 +1246,13 @@ Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Rewriting multiplication to use shift and addition[23] (word) textbox::z#0 ← (byte) textbox::y#0 * (byte) $28 -Rewriting multiplication to use shift and addition[45] (word) textbox::z#1 ← (byte) textbox::y#1 * (byte) $28 -Rewriting multiplication to use shift and addition[51] (word) textbox::z#2 ← (byte) textbox::y#2 * (byte) $28 -Rewriting multiplication to use shift and addition[52] (word) draw_window::z#0 ← (byte) draw_window::y1#0 * (byte) $28 -Rewriting multiplication to use shift and addition[53] (word) draw_window::q#0 ← (byte) draw_window::y2#0 * (byte) $28 -Rewriting multiplication to use shift and addition[73] (word) draw_window::z#1 ← (byte) draw_window::y#2 * (byte) $28 -Rewriting multiplication to use shift and addition[93] (word) draw_window::z#2 ← (byte) draw_window::y3#2 * (byte) $28 +Rewriting multiplication to use shift and addition[24] (word) textbox::z#0 ← (word~) textbox::$3 * (byte) $28 +Rewriting multiplication to use shift and addition[46] (word) textbox::z#1 ← (byte) textbox::y#1 * (byte) $28 +Rewriting multiplication to use shift and addition[52] (word) textbox::z#2 ← (byte) textbox::y#2 * (byte) $28 +Rewriting multiplication to use shift and addition[53] (word) draw_window::z#0 ← (byte) draw_window::y1#0 * (byte) $28 +Rewriting multiplication to use shift and addition[54] (word) draw_window::q#0 ← (byte) draw_window::y2#0 * (byte) $28 +Rewriting multiplication to use shift and addition[74] (word) draw_window::z#1 ← (byte) draw_window::y#2 * (byte) $28 +Rewriting multiplication to use shift and addition[94] (word) draw_window::z#2 ← (byte) draw_window::y3#2 * (byte) $28 Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const word) main::wait#0 Inlining constant with var siblings (const byte*) textbox::text#0 @@ -1286,7 +1273,7 @@ Inlining constant with var siblings (const byte) textbox::y2#3 Inlining constant with var siblings (const byte*) textbox::text#3 Inlining constant with var siblings (const byte) textbox::i#0 Inlining constant with var siblings (const byte) textbox::c#0 -Constant inlined main::wait#0 = (byte) 0 +Constant inlined main::wait#0 = (word) 0 Constant inlined main::x#0 = (byte) 0 Constant inlined textbox::text#2 = (const byte*) text Constant inlined textbox::text#3 = (const byte*) text @@ -1307,9 +1294,9 @@ Constant inlined textbox::y1#1 = (byte) $c Constant inlined textbox::x2#3 = (byte) $27 Constant inlined textbox::i#0 = (byte) 0 Successful SSA optimization Pass2ConstantInlining -Alias (word) textbox::z#0 = (byte~) textbox::$34 -Alias (word) textbox::z#1 = (byte~) textbox::$37 -Alias (word) textbox::z#2 = (byte~) textbox::$40 +Alias (word) textbox::z#0 = (word~) textbox::$35 +Alias (word) textbox::z#1 = (byte~) textbox::$38 +Alias (word) textbox::z#2 = (byte~) textbox::$41 Alias (word) draw_window::z#0 = (byte~) draw_window::$38 Alias (word) draw_window::q#0 = (byte~) draw_window::$41 Alias (word) draw_window::z#1 = (byte~) draw_window::$44 @@ -1344,39 +1331,39 @@ Coalesced [23] textbox::x2#17 ← textbox::x2#0 Coalesced [24] textbox::y2#17 ← textbox::y2#0 Coalesced [30] main::x#8 ← main::x#1 Coalesced [32] main::wait#4 ← main::wait#1 -Coalesced [46] textbox::z#11 ← textbox::z#0 -Coalesced [47] textbox::x#14 ← textbox::x#0 -Coalesced [48] textbox::y#15 ← textbox::y#0 -Coalesced [55] textbox::ls#4 ← textbox::ls#0 -Coalesced [74] textbox::z#15 ← textbox::z#2 -Coalesced [75] textbox::x#18 ← textbox::x#12 -Coalesced [76] textbox::y#19 ← textbox::y#2 -Coalesced [79] textbox::z#10 ← textbox::z#4 -Coalesced [80] textbox::x#13 ← textbox::x#7 -Coalesced [81] textbox::i#13 ← textbox::i#1 -Coalesced [82] textbox::y#14 ← textbox::y#11 -Coalesced [83] textbox::z#16 ← textbox::z#5 -Coalesced [84] textbox::x#19 ← textbox::x#1 -Coalesced [85] textbox::y#20 ← textbox::y#5 -Not coalescing [91] textbox::x#15 ← textbox::x1#4 -Coalesced [92] textbox::y#16 ← textbox::y#1 -Coalesced [93] textbox::z#12 ← textbox::z#1 -Coalesced [94] textbox::x#17 ← textbox::x#10 -Coalesced (already) [95] textbox::y#18 ← textbox::y#12 -Coalesced (already) [96] textbox::z#14 ← textbox::z#3 -Coalesced [99] textbox::ls#5 ← textbox::ls#1 -Coalesced [100] textbox::c#5 ← textbox::c#1 -Coalesced (already) [101] textbox::x#16 ← textbox::x#10 -Coalesced (already) [102] textbox::y#17 ← textbox::y#12 -Coalesced (already) [103] textbox::z#13 ← textbox::z#3 -Coalesced [111] draw_window::x#4 ← draw_window::x#0 -Coalesced [121] draw_window::y#4 ← draw_window::y#0 -Coalesced [136] draw_window::y3#7 ← draw_window::y3#0 -Coalesced [143] draw_window::x3#4 ← draw_window::x3#0 -Coalesced [147] draw_window::y3#8 ← draw_window::y3#1 -Coalesced [152] draw_window::x3#5 ← draw_window::x3#1 -Coalesced [163] draw_window::y#5 ← draw_window::y#1 -Coalesced [171] draw_window::x#5 ← draw_window::x#1 +Coalesced [47] textbox::z#11 ← textbox::z#0 +Coalesced [48] textbox::x#14 ← textbox::x#0 +Coalesced [49] textbox::y#15 ← textbox::y#0 +Coalesced [56] textbox::ls#4 ← textbox::ls#0 +Coalesced [75] textbox::z#15 ← textbox::z#2 +Coalesced [76] textbox::x#18 ← textbox::x#12 +Coalesced [77] textbox::y#19 ← textbox::y#2 +Coalesced [80] textbox::z#10 ← textbox::z#4 +Coalesced [81] textbox::x#13 ← textbox::x#7 +Coalesced [82] textbox::i#13 ← textbox::i#1 +Coalesced [83] textbox::y#14 ← textbox::y#11 +Coalesced [84] textbox::z#16 ← textbox::z#5 +Coalesced [85] textbox::x#19 ← textbox::x#1 +Coalesced [86] textbox::y#20 ← textbox::y#5 +Not coalescing [92] textbox::x#15 ← textbox::x1#4 +Coalesced [93] textbox::y#16 ← textbox::y#1 +Coalesced [94] textbox::z#12 ← textbox::z#1 +Coalesced [95] textbox::x#17 ← textbox::x#10 +Coalesced (already) [96] textbox::y#18 ← textbox::y#12 +Coalesced (already) [97] textbox::z#14 ← textbox::z#3 +Coalesced [100] textbox::ls#5 ← textbox::ls#1 +Coalesced [101] textbox::c#5 ← textbox::c#1 +Coalesced (already) [102] textbox::x#16 ← textbox::x#10 +Coalesced (already) [103] textbox::y#17 ← textbox::y#12 +Coalesced (already) [104] textbox::z#13 ← textbox::z#3 +Coalesced [112] draw_window::x#4 ← draw_window::x#0 +Coalesced [122] draw_window::y#4 ← draw_window::y#0 +Coalesced [137] draw_window::y3#7 ← draw_window::y3#0 +Coalesced [144] draw_window::x3#4 ← draw_window::x3#0 +Coalesced [148] draw_window::y3#8 ← draw_window::y3#1 +Coalesced [153] draw_window::x3#5 ← draw_window::x3#1 +Coalesced [164] draw_window::y#5 ← draw_window::y#1 +Coalesced [172] draw_window::x#5 ← draw_window::x#1 Coalesced down to 17 phi equivalence classes Culled Empty Block (label) @8 Culled Empty Block (label) main::@18 @@ -1470,7 +1457,7 @@ main::@2: scope:[main] from main::@1 [19] call textbox to:main::@4 main::@4: scope:[main] from main::@2 main::@5 - [20] (word) main::wait#2 ← phi( main::@2/(byte) 0 main::@5/(word) main::wait#1 ) + [20] (word) main::wait#2 ← phi( main::@2/(word) 0 main::@5/(word) main::wait#1 ) [21] if((word) main::wait#2<(word) $88b8) goto main::@5 to:main::@6 main::@6: scope:[main] from main::@4 @@ -1496,175 +1483,176 @@ textbox: scope:[textbox] from main::@2 main::@3 main::@8 main::@9 textbox::@12: scope:[textbox] from textbox [30] (byte) textbox::y#0 ← (byte) textbox::y1#4 + (byte) 1 [31] (byte) textbox::x#0 ← (byte) textbox::x1#4 + (byte) 1 - [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 - [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 - [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 - [35] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return + [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 + [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 + [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 + [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 + [36] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return to:textbox::@13 textbox::@13: scope:[textbox] from textbox::@12 - [36] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return + [37] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return to:textbox::@1 textbox::@1: scope:[textbox] from textbox::@13 textbox::@8 - [37] (byte) textbox::y#12 ← phi( textbox::@8/(byte) textbox::y#11 textbox::@13/(byte) textbox::y#0 ) - [37] (byte) textbox::i#2 ← phi( textbox::@8/(byte) textbox::i#1 textbox::@13/(byte) 0 ) - [37] (byte) textbox::x#10 ← phi( textbox::@8/(byte) textbox::x#7 textbox::@13/(byte) textbox::x#0 ) - [37] (word) textbox::z#3 ← phi( textbox::@8/(word) textbox::z#4 textbox::@13/(word) textbox::z#0 ) - [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 - [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 - [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) - [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 + [38] (byte) textbox::y#12 ← phi( textbox::@8/(byte) textbox::y#11 textbox::@13/(byte) textbox::y#0 ) + [38] (byte) textbox::i#2 ← phi( textbox::@8/(byte) textbox::i#1 textbox::@13/(byte) 0 ) + [38] (byte) textbox::x#10 ← phi( textbox::@8/(byte) textbox::x#7 textbox::@13/(byte) textbox::x#0 ) + [38] (word) textbox::z#3 ← phi( textbox::@8/(word) textbox::z#4 textbox::@13/(word) textbox::z#0 ) + [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 + [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 + [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) + [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 to:textbox::@10 textbox::@10: scope:[textbox] from textbox::@1 - [42] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 + [43] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 to:textbox::@3 textbox::@3: scope:[textbox] from textbox::@10 textbox::@4 - [43] (byte) textbox::c#2 ← phi( textbox::@10/(byte) 0 textbox::@4/(byte) textbox::c#1 ) - [43] (byte) textbox::ls#2 ← phi( textbox::@10/(byte) textbox::ls#0 textbox::@4/(byte) textbox::ls#1 ) - [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 + [44] (byte) textbox::c#2 ← phi( textbox::@10/(byte) 0 textbox::@4/(byte) textbox::c#1 ) + [44] (byte) textbox::ls#2 ← phi( textbox::@10/(byte) textbox::ls#0 textbox::@4/(byte) textbox::ls#1 ) + [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 to:textbox::@14 textbox::@14: scope:[textbox] from textbox::@3 - [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 + [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 to:textbox::@5 textbox::@5: scope:[textbox] from textbox::@14 textbox::@3 - [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 - [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 - [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@2 + [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 + [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 + [49] if((byte~) textbox::$16<(byte) textbox::x2#4) goto textbox::@2 to:textbox::@15 textbox::@15: scope:[textbox] from textbox::@5 - [49] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@6 + [50] if((byte) textbox::c#2<(byte~) textbox::$18) goto textbox::@6 to:textbox::@2 textbox::@2: scope:[textbox] from textbox::@1 textbox::@15 textbox::@5 textbox::@7 - [50] (word) textbox::z#5 ← phi( textbox::@7/(word) textbox::z#1 textbox::@1/(word) textbox::z#3 textbox::@5/(word) textbox::z#3 ) - [50] (byte) textbox::y#5 ← phi( textbox::@7/(byte) textbox::y#1 textbox::@1/(byte) textbox::y#12 textbox::@5/(byte) textbox::y#12 ) - [50] (byte) textbox::x#5 ← phi( textbox::@7/(byte) textbox::x#15 textbox::@1/(byte) textbox::x#10 textbox::@5/(byte) textbox::x#10 ) - [51] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 - [52] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 - [53] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 + [51] (word) textbox::z#5 ← phi( textbox::@7/(word) textbox::z#1 textbox::@1/(word) textbox::z#3 textbox::@5/(word) textbox::z#3 ) + [51] (byte) textbox::y#5 ← phi( textbox::@7/(byte) textbox::y#1 textbox::@1/(byte) textbox::y#12 textbox::@5/(byte) textbox::y#12 ) + [51] (byte) textbox::x#5 ← phi( textbox::@7/(byte) textbox::x#15 textbox::@1/(byte) textbox::x#10 textbox::@5/(byte) textbox::x#10 ) + [52] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 + [53] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 + [54] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 to:textbox::@11 textbox::@11: scope:[textbox] from textbox::@2 - [54] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 - [55] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 - [56] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 + [55] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 + [56] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 + [57] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 to:textbox::@return textbox::@return: scope:[textbox] from textbox::@11 textbox::@12 textbox::@13 textbox::@6 textbox::@8 - [57] return + [58] return to:@return textbox::@9: scope:[textbox] from textbox::@11 - [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 - [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 - [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 + [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 + [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 + [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 to:textbox::@8 textbox::@8: scope:[textbox] from textbox::@2 textbox::@9 - [61] (byte) textbox::y#11 ← phi( textbox::@9/(byte) textbox::y#2 textbox::@2/(byte) textbox::y#5 ) - [61] (byte) textbox::x#7 ← phi( textbox::@9/(byte) textbox::x#12 textbox::@2/(byte) textbox::x#1 ) - [61] (word) textbox::z#4 ← phi( textbox::@9/(word) textbox::z#2 textbox::@2/(word) textbox::z#5 ) - [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 + [62] (byte) textbox::y#11 ← phi( textbox::@9/(byte) textbox::y#2 textbox::@2/(byte) textbox::y#5 ) + [62] (byte) textbox::x#7 ← phi( textbox::@9/(byte) textbox::x#12 textbox::@2/(byte) textbox::x#1 ) + [62] (word) textbox::z#4 ← phi( textbox::@9/(word) textbox::z#2 textbox::@2/(word) textbox::z#5 ) + [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 to:textbox::@return textbox::@6: scope:[textbox] from textbox::@15 - [63] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 - [64] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 + [64] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 + [65] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 to:textbox::@return textbox::@7: scope:[textbox] from textbox::@6 - [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 - [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 - [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 - [68] (byte) textbox::x#15 ← (byte) textbox::x1#4 + [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 + [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 + [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 + [69] (byte) textbox::x#15 ← (byte) textbox::x1#4 to:textbox::@2 textbox::@4: scope:[textbox] from textbox::@14 - [69] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 - [70] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 + [70] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 + [71] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 to:textbox::@3 (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) draw_window: scope:[draw_window] from textbox - [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 - [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 - [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 - [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 - [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 - [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 - [77] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 + [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 + [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 + [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 + [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 + [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 + [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 + [78] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 to:draw_window::@1 draw_window::@1: scope:[draw_window] from draw_window draw_window::@2 - [78] (byte) draw_window::x#2 ← phi( draw_window/(byte) draw_window::x#0 draw_window::@2/(byte) draw_window::x#1 ) - [79] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 + [79] (byte) draw_window::x#2 ← phi( draw_window/(byte) draw_window::x#0 draw_window::@2/(byte) draw_window::x#1 ) + [80] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 to:draw_window::@3 draw_window::@3: scope:[draw_window] from draw_window::@1 - [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 - [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 - [82] *((byte*~) draw_window::$29) ← (byte) $55 - [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 - [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 - [85] *((byte*~) draw_window::$30) ← (byte) $49 - [86] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 + [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 + [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 + [83] *((byte*~) draw_window::$29) ← (byte) $55 + [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 + [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 + [86] *((byte*~) draw_window::$30) ← (byte) $49 + [87] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 to:draw_window::@4 draw_window::@4: scope:[draw_window] from draw_window::@3 draw_window::@5 - [87] (byte) draw_window::y#2 ← phi( draw_window::@3/(byte) draw_window::y#0 draw_window::@5/(byte) draw_window::y#1 ) - [88] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 + [88] (byte) draw_window::y#2 ← phi( draw_window::@3/(byte) draw_window::y#0 draw_window::@5/(byte) draw_window::y#1 ) + [89] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 to:draw_window::@6 draw_window::@6: scope:[draw_window] from draw_window::@4 - [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 - [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 - [91] *((byte*~) draw_window::$33) ← (byte) $4a - [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 - [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 - [94] *((byte*~) draw_window::$34) ← (byte) $4b - [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 - [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 - [97] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return + [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 + [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 + [92] *((byte*~) draw_window::$33) ← (byte) $4a + [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 + [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 + [95] *((byte*~) draw_window::$34) ← (byte) $4b + [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 + [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 + [98] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return to:draw_window::@13 draw_window::@13: scope:[draw_window] from draw_window::@6 - [98] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 + [99] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 to:draw_window::@return draw_window::@return: scope:[draw_window] from draw_window::@13 draw_window::@6 draw_window::@8 - [99] return + [100] return to:@return draw_window::@7: scope:[draw_window] from draw_window::@13 - [100] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 + [101] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 to:draw_window::@8 draw_window::@8: scope:[draw_window] from draw_window::@12 draw_window::@7 - [101] (byte) draw_window::y3#2 ← phi( draw_window::@7/(byte) draw_window::y3#0 draw_window::@12/(byte) draw_window::y3#1 ) - [102] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 + [102] (byte) draw_window::y3#2 ← phi( draw_window::@7/(byte) draw_window::y3#0 draw_window::@12/(byte) draw_window::y3#1 ) + [103] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 to:draw_window::@return draw_window::@9: scope:[draw_window] from draw_window::@8 - [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 - [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 - [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 - [106] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 + [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 + [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 + [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 + [107] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 to:draw_window::@10 draw_window::@10: scope:[draw_window] from draw_window::@11 draw_window::@9 - [107] (byte) draw_window::x3#2 ← phi( draw_window::@9/(byte) draw_window::x3#0 draw_window::@11/(byte) draw_window::x3#1 ) - [108] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 + [108] (byte) draw_window::x3#2 ← phi( draw_window::@9/(byte) draw_window::x3#0 draw_window::@11/(byte) draw_window::x3#1 ) + [109] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 to:draw_window::@12 draw_window::@12: scope:[draw_window] from draw_window::@10 - [109] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 + [110] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 to:draw_window::@8 draw_window::@11: scope:[draw_window] from draw_window::@10 - [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 - [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 - [112] *((byte*~) draw_window::$35) ← (byte) $20 - [113] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 + [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 + [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 + [113] *((byte*~) draw_window::$35) ← (byte) $20 + [114] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 to:draw_window::@10 draw_window::@5: scope:[draw_window] from draw_window::@4 - [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 - [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 - [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 - [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 - [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 - [119] *((byte*~) draw_window::$31) ← (byte) $42 - [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 - [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 - [122] *((byte*~) draw_window::$32) ← (byte) $42 - [123] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 + [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 + [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 + [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 + [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 + [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 + [120] *((byte*~) draw_window::$31) ← (byte) $42 + [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 + [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 + [123] *((byte*~) draw_window::$32) ← (byte) $42 + [124] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 to:draw_window::@4 draw_window::@2: scope:[draw_window] from draw_window::@1 - [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 - [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 - [126] *((byte*~) draw_window::$27) ← (byte) $43 - [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 - [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 - [129] *((byte*~) draw_window::$28) ← (byte) $43 - [130] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 + [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 + [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 + [127] *((byte*~) draw_window::$27) ← (byte) $43 + [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 + [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 + [130] *((byte*~) draw_window::$28) ← (byte) $43 + [131] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 to:draw_window::@1 @@ -1737,16 +1725,17 @@ VARIABLE REGISTER WEIGHTS (byte) main::x#1 22.0 (byte) main::x#2 8.0 (void()) textbox((byte) textbox::x1 , (byte) textbox::y1 , (byte) textbox::x2 , (byte) textbox::y2 , (byte*) textbox::text) -(byte~) textbox::$15 101.0 -(byte~) textbox::$17 101.0 -(byte*~) textbox::$31 202.0 -(byte~) textbox::$32 4.0 -(byte~) textbox::$33 4.0 -(byte~) textbox::$35 202.0 +(byte~) textbox::$16 101.0 +(byte~) textbox::$18 101.0 +(word~) textbox::$3 3.0 +(byte*~) textbox::$32 202.0 +(word~) textbox::$33 4.0 +(word~) textbox::$34 4.0 (byte~) textbox::$36 202.0 -(byte~) textbox::$38 202.0 +(byte~) textbox::$37 202.0 (byte~) textbox::$39 202.0 -(word~) textbox::$8 202.0 +(byte~) textbox::$40 202.0 +(word~) textbox::$9 202.0 (byte) textbox::c (byte) textbox::c#1 2002.0 (byte) textbox::c#2 314.85714285714283 @@ -1758,9 +1747,9 @@ VARIABLE REGISTER WEIGHTS (byte) textbox::ls#1 1001.0 (byte) textbox::ls#2 1368.3333333333335 (byte*) textbox::text -(byte*) textbox::text#12 50.108695652173914 +(byte*) textbox::text#12 49.04255319148936 (byte) textbox::x -(byte) textbox::x#0 1.0 +(byte) textbox::x#0 0.8571428571428571 (byte) textbox::x#1 151.5 (byte) textbox::x#10 36.214285714285715 (byte) textbox::x#12 33.666666666666664 @@ -1769,12 +1758,12 @@ VARIABLE REGISTER WEIGHTS (byte) textbox::x#7 151.5 (byte) textbox::x1 (byte) textbox::x1#0 11.0 -(byte) textbox::x1#4 6.913043478260869 +(byte) textbox::x1#4 6.76595744680851 (byte) textbox::x2 (byte) textbox::x2#0 5.5 -(byte) textbox::x2#4 6.913043478260869 +(byte) textbox::x2#4 6.76595744680851 (byte) textbox::y -(byte) textbox::y#0 1.4285714285714284 +(byte) textbox::y#0 0.75 (byte) textbox::y#1 84.16666666666666 (byte) textbox::y#11 151.5 (byte) textbox::y#12 27.06666666666667 @@ -1785,7 +1774,7 @@ VARIABLE REGISTER WEIGHTS (byte) textbox::y1#4 2.5 (byte) textbox::y2 (byte) textbox::y2#0 7.333333333333333 -(byte) textbox::y2#4 4.717391304347826 +(byte) textbox::y2#4 4.617021276595745 (word) textbox::z (word) textbox::z#0 1.3333333333333333 (word) textbox::z#1 101.0 @@ -1817,16 +1806,17 @@ Added variable draw_window::x1#0 to live range equivalence class [ draw_window:: Added variable draw_window::y1#0 to live range equivalence class [ draw_window::y1#0 ] Added variable draw_window::x2#0 to live range equivalence class [ draw_window::x2#0 ] Added variable draw_window::y2#0 to live range equivalence class [ draw_window::y2#0 ] -Added variable textbox::$32 to live range equivalence class [ textbox::$32 ] +Added variable textbox::$3 to live range equivalence class [ textbox::$3 ] Added variable textbox::$33 to live range equivalence class [ textbox::$33 ] -Added variable textbox::$8 to live range equivalence class [ textbox::$8 ] -Added variable textbox::$31 to live range equivalence class [ textbox::$31 ] -Added variable textbox::$15 to live range equivalence class [ textbox::$15 ] -Added variable textbox::$17 to live range equivalence class [ textbox::$17 ] -Added variable textbox::$38 to live range equivalence class [ textbox::$38 ] +Added variable textbox::$34 to live range equivalence class [ textbox::$34 ] +Added variable textbox::$9 to live range equivalence class [ textbox::$9 ] +Added variable textbox::$32 to live range equivalence class [ textbox::$32 ] +Added variable textbox::$16 to live range equivalence class [ textbox::$16 ] +Added variable textbox::$18 to live range equivalence class [ textbox::$18 ] Added variable textbox::$39 to live range equivalence class [ textbox::$39 ] -Added variable textbox::$35 to live range equivalence class [ textbox::$35 ] +Added variable textbox::$40 to live range equivalence class [ textbox::$40 ] Added variable textbox::$36 to live range equivalence class [ textbox::$36 ] +Added variable textbox::$37 to live range equivalence class [ textbox::$37 ] Added variable draw_window::$36 to live range equivalence class [ draw_window::$36 ] Added variable draw_window::$37 to live range equivalence class [ draw_window::$37 ] Added variable draw_window::z#0 to live range equivalence class [ draw_window::z#0 ] @@ -1882,16 +1872,17 @@ Complete equivalence classes [ draw_window::y1#0 ] [ draw_window::x2#0 ] [ draw_window::y2#0 ] -[ textbox::$32 ] +[ textbox::$3 ] [ textbox::$33 ] -[ textbox::$8 ] -[ textbox::$31 ] -[ textbox::$15 ] -[ textbox::$17 ] -[ textbox::$38 ] +[ textbox::$34 ] +[ textbox::$9 ] +[ textbox::$32 ] +[ textbox::$16 ] +[ textbox::$18 ] [ textbox::$39 ] -[ textbox::$35 ] +[ textbox::$40 ] [ textbox::$36 ] +[ textbox::$37 ] [ draw_window::$36 ] [ draw_window::$37 ] [ draw_window::z#0 ] @@ -1946,48 +1937,49 @@ Allocated zp[1]:23 [ draw_window::x1#0 ] Allocated zp[1]:24 [ draw_window::y1#0 ] Allocated zp[1]:25 [ draw_window::x2#0 ] Allocated zp[1]:26 [ draw_window::y2#0 ] -Allocated zp[1]:27 [ textbox::$32 ] -Allocated zp[1]:28 [ textbox::$33 ] -Allocated zp[2]:29 [ textbox::$8 ] -Allocated zp[2]:31 [ textbox::$31 ] -Allocated zp[1]:33 [ textbox::$15 ] -Allocated zp[1]:34 [ textbox::$17 ] -Allocated zp[1]:35 [ textbox::$38 ] -Allocated zp[1]:36 [ textbox::$39 ] -Allocated zp[1]:37 [ textbox::$35 ] -Allocated zp[1]:38 [ textbox::$36 ] -Allocated zp[1]:39 [ draw_window::$36 ] -Allocated zp[1]:40 [ draw_window::$37 ] -Allocated zp[2]:41 [ draw_window::z#0 ] -Allocated zp[1]:43 [ draw_window::$39 ] -Allocated zp[1]:44 [ draw_window::$40 ] -Allocated zp[2]:45 [ draw_window::q#0 ] -Allocated zp[2]:47 [ draw_window::$2 ] -Allocated zp[2]:49 [ draw_window::$29 ] -Allocated zp[2]:51 [ draw_window::$3 ] -Allocated zp[2]:53 [ draw_window::$30 ] -Allocated zp[2]:55 [ draw_window::$4 ] -Allocated zp[2]:57 [ draw_window::$33 ] -Allocated zp[2]:59 [ draw_window::$5 ] -Allocated zp[2]:61 [ draw_window::$34 ] -Allocated zp[1]:63 [ draw_window::$6 ] -Allocated zp[1]:64 [ draw_window::$8 ] -Allocated zp[1]:65 [ draw_window::$45 ] -Allocated zp[1]:66 [ draw_window::$46 ] -Allocated zp[2]:67 [ draw_window::z#2 ] -Allocated zp[2]:69 [ draw_window::$26 ] -Allocated zp[2]:71 [ draw_window::$35 ] -Allocated zp[1]:73 [ draw_window::$42 ] -Allocated zp[1]:74 [ draw_window::$43 ] -Allocated zp[2]:75 [ draw_window::z#1 ] -Allocated zp[2]:77 [ draw_window::$19 ] -Allocated zp[2]:79 [ draw_window::$31 ] -Allocated zp[2]:81 [ draw_window::$20 ] -Allocated zp[2]:83 [ draw_window::$32 ] -Allocated zp[2]:85 [ draw_window::$14 ] -Allocated zp[2]:87 [ draw_window::$27 ] -Allocated zp[2]:89 [ draw_window::$15 ] -Allocated zp[2]:91 [ draw_window::$28 ] +Allocated zp[2]:27 [ textbox::$3 ] +Allocated zp[2]:29 [ textbox::$33 ] +Allocated zp[2]:31 [ textbox::$34 ] +Allocated zp[2]:33 [ textbox::$9 ] +Allocated zp[2]:35 [ textbox::$32 ] +Allocated zp[1]:37 [ textbox::$16 ] +Allocated zp[1]:38 [ textbox::$18 ] +Allocated zp[1]:39 [ textbox::$39 ] +Allocated zp[1]:40 [ textbox::$40 ] +Allocated zp[1]:41 [ textbox::$36 ] +Allocated zp[1]:42 [ textbox::$37 ] +Allocated zp[1]:43 [ draw_window::$36 ] +Allocated zp[1]:44 [ draw_window::$37 ] +Allocated zp[2]:45 [ draw_window::z#0 ] +Allocated zp[1]:47 [ draw_window::$39 ] +Allocated zp[1]:48 [ draw_window::$40 ] +Allocated zp[2]:49 [ draw_window::q#0 ] +Allocated zp[2]:51 [ draw_window::$2 ] +Allocated zp[2]:53 [ draw_window::$29 ] +Allocated zp[2]:55 [ draw_window::$3 ] +Allocated zp[2]:57 [ draw_window::$30 ] +Allocated zp[2]:59 [ draw_window::$4 ] +Allocated zp[2]:61 [ draw_window::$33 ] +Allocated zp[2]:63 [ draw_window::$5 ] +Allocated zp[2]:65 [ draw_window::$34 ] +Allocated zp[1]:67 [ draw_window::$6 ] +Allocated zp[1]:68 [ draw_window::$8 ] +Allocated zp[1]:69 [ draw_window::$45 ] +Allocated zp[1]:70 [ draw_window::$46 ] +Allocated zp[2]:71 [ draw_window::z#2 ] +Allocated zp[2]:73 [ draw_window::$26 ] +Allocated zp[2]:75 [ draw_window::$35 ] +Allocated zp[1]:77 [ draw_window::$42 ] +Allocated zp[1]:78 [ draw_window::$43 ] +Allocated zp[2]:79 [ draw_window::z#1 ] +Allocated zp[2]:81 [ draw_window::$19 ] +Allocated zp[2]:83 [ draw_window::$31 ] +Allocated zp[2]:85 [ draw_window::$20 ] +Allocated zp[2]:87 [ draw_window::$32 ] +Allocated zp[2]:89 [ draw_window::$14 ] +Allocated zp[2]:91 [ draw_window::$27 ] +Allocated zp[2]:93 [ draw_window::$15 ] +Allocated zp[2]:95 [ draw_window::$28 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -2152,7 +2144,7 @@ main: { jsr textbox // [20] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: - // [20] phi (word) main::wait#2 = (byte) 0 [phi:main::@2->main::@4#0] -- vwuz1=vbuc1 + // [20] phi (word) main::wait#2 = (word) 0 [phi:main::@2->main::@4#0] -- vwuz1=vwuc1 lda #<0 sta.z wait lda #>0 @@ -2196,9 +2188,10 @@ main: { // textbox // textbox(byte zp(5) x1, byte zp(6) y1, byte zp(7) x2, byte zp(8) y2, byte* zp(9) text) textbox: { - .label __8 = $1d - .label __15 = $21 - .label __17 = $22 + .label __3 = $1b + .label __9 = $21 + .label __16 = $25 + .label __18 = $26 .label x1 = 5 .label y1 = 6 .label x2 = 7 @@ -2211,13 +2204,13 @@ textbox: { // scan ahead to determine next word length .label c = $d .label text = 9 - .label __31 = $1f - .label __32 = $1b - .label __33 = $1c - .label __35 = $25 - .label __36 = $26 - .label __38 = $23 - .label __39 = $24 + .label __32 = $23 + .label __33 = $1d + .label __34 = $1f + .label __36 = $29 + .label __37 = $2a + .label __39 = $27 + .label __40 = $28 // [25] (byte) draw_window::x1#0 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 lda.z x1 sta.z draw_window.x1 @@ -2243,78 +2236,90 @@ textbox: { ldy.z x1 iny sty.z x - // [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 -- vwuz1=_word_vbuz2 lda.z y - asl - asl - sta.z __32 - // [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __32 - clc - adc.z y - sta.z __33 - // [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 -- vwuz1=vbuz2_rol_3 - lda.z __33 - sta.z z + sta.z __3 lda #0 + sta.z __3+1 + // [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 -- vwuz1=vwuz2_rol_2 + lda.z __3 + asl + sta.z __33 + lda.z __3+1 + rol + sta.z __33+1 + asl.z __33 + rol.z __33+1 + // [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 -- vwuz1=vwuz2_plus_vwuz3 + lda.z __33 + clc + adc.z __3 + sta.z __34 + lda.z __33+1 + adc.z __3+1 + sta.z __34+1 + // [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 -- vwuz1=vwuz2_rol_3 + lda.z __34 + asl + sta.z z + lda.z __34+1 + rol sta.z z+1 asl.z z rol.z z+1 asl.z z rol.z z+1 - asl.z z - rol.z z+1 - // [35] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 + // [36] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 lda.z x cmp.z x2 beq __breturn jmp __b13 // textbox::@13 __b13: - // [36] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 + // [37] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 lda.z y cmp.z y2 beq __breturn - // [37] phi from textbox::@13 to textbox::@1 [phi:textbox::@13->textbox::@1] + // [38] phi from textbox::@13 to textbox::@1 [phi:textbox::@13->textbox::@1] __b1_from___b13: - // [37] phi (byte) textbox::y#12 = (byte) textbox::y#0 [phi:textbox::@13->textbox::@1#0] -- register_copy - // [37] phi (byte) textbox::i#2 = (byte) 0 [phi:textbox::@13->textbox::@1#1] -- vbuz1=vbuc1 + // [38] phi (byte) textbox::y#12 = (byte) textbox::y#0 [phi:textbox::@13->textbox::@1#0] -- register_copy + // [38] phi (byte) textbox::i#2 = (byte) 0 [phi:textbox::@13->textbox::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [37] phi (byte) textbox::x#10 = (byte) textbox::x#0 [phi:textbox::@13->textbox::@1#2] -- register_copy - // [37] phi (word) textbox::z#3 = (word) textbox::z#0 [phi:textbox::@13->textbox::@1#3] -- register_copy + // [38] phi (byte) textbox::x#10 = (byte) textbox::x#0 [phi:textbox::@13->textbox::@1#2] -- register_copy + // [38] phi (word) textbox::z#3 = (word) textbox::z#0 [phi:textbox::@13->textbox::@1#3] -- register_copy jmp __b1 - // [37] phi from textbox::@8 to textbox::@1 [phi:textbox::@8->textbox::@1] + // [38] phi from textbox::@8 to textbox::@1 [phi:textbox::@8->textbox::@1] __b1_from___b8: - // [37] phi (byte) textbox::y#12 = (byte) textbox::y#11 [phi:textbox::@8->textbox::@1#0] -- register_copy - // [37] phi (byte) textbox::i#2 = (byte) textbox::i#1 [phi:textbox::@8->textbox::@1#1] -- register_copy - // [37] phi (byte) textbox::x#10 = (byte) textbox::x#7 [phi:textbox::@8->textbox::@1#2] -- register_copy - // [37] phi (word) textbox::z#3 = (word) textbox::z#4 [phi:textbox::@8->textbox::@1#3] -- register_copy + // [38] phi (byte) textbox::y#12 = (byte) textbox::y#11 [phi:textbox::@8->textbox::@1#0] -- register_copy + // [38] phi (byte) textbox::i#2 = (byte) textbox::i#1 [phi:textbox::@8->textbox::@1#1] -- register_copy + // [38] phi (byte) textbox::x#10 = (byte) textbox::x#7 [phi:textbox::@8->textbox::@1#2] -- register_copy + // [38] phi (word) textbox::z#3 = (word) textbox::z#4 [phi:textbox::@8->textbox::@1#3] -- register_copy jmp __b1 // textbox::@1 __b1: - // [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 -- vwuz1=vwuz2_plus_vbuz3 + // [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 -- vwuz1=vwuz2_plus_vbuz3 lda.z x clc adc.z z - sta.z __8 + sta.z __9 lda #0 adc.z z+1 - sta.z __8+1 - // [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 -- pbuz1=pbuc1_plus_vwuz2 - lda.z __8 + sta.z __9+1 + // [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 -- pbuz1=pbuc1_plus_vwuz2 + lda.z __9 clc adc #screen - sta.z __31+1 - // [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -- _deref_pbuz1=pbuz2_derefidx_vbuz3 + sta.z __32+1 + // [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -- _deref_pbuz1=pbuz2_derefidx_vbuz3 ldy.z i lda (text),y ldy #0 - sta (__31),y - // [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 + sta (__32),y + // [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 ldy.z i lda (text),y cmp #$20 @@ -2322,20 +2327,20 @@ textbox: { jmp __b10 // textbox::@10 __b10: - // [42] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [43] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z i iny sty.z ls - // [43] phi from textbox::@10 to textbox::@3 [phi:textbox::@10->textbox::@3] + // [44] phi from textbox::@10 to textbox::@3 [phi:textbox::@10->textbox::@3] __b3_from___b10: - // [43] phi (byte) textbox::c#2 = (byte) 0 [phi:textbox::@10->textbox::@3#0] -- vbuz1=vbuc1 + // [44] phi (byte) textbox::c#2 = (byte) 0 [phi:textbox::@10->textbox::@3#0] -- vbuz1=vbuc1 lda #0 sta.z c - // [43] phi (byte) textbox::ls#2 = (byte) textbox::ls#0 [phi:textbox::@10->textbox::@3#1] -- register_copy + // [44] phi (byte) textbox::ls#2 = (byte) textbox::ls#0 [phi:textbox::@10->textbox::@3#1] -- register_copy jmp __b3 // textbox::@3 __b3: - // [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 + // [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1 lda #$20 ldy.z ls cmp (text),y @@ -2343,7 +2348,7 @@ textbox: { jmp __b14 // textbox::@14 __b14: - // [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 + // [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 ldy.z ls lda (text),y cmp #0 @@ -2351,80 +2356,80 @@ textbox: { jmp __b5 // textbox::@5 __b5: - // [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 -- vbuz1=vbuz2_plus_vbuz3 + // [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 -- vbuz1=vbuz2_plus_vbuz3 lda.z c clc adc.z x - sta.z __15 - // [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 -- vbuz1=vbuz2_minus_vbuz3 + sta.z __16 + // [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 -- vbuz1=vbuz2_minus_vbuz3 lda.z x2 sec sbc.z x1 - sta.z __17 - // [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@2 -- vbuz1_lt_vbuz2_then_la1 - lda.z __15 + sta.z __18 + // [49] if((byte~) textbox::$16<(byte) textbox::x2#4) goto textbox::@2 -- vbuz1_lt_vbuz2_then_la1 + lda.z __16 cmp.z x2 bcc __b2_from___b5 jmp __b15 // textbox::@15 __b15: - // [49] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@6 -- vbuz1_lt_vbuz2_then_la1 + // [50] if((byte) textbox::c#2<(byte~) textbox::$18) goto textbox::@6 -- vbuz1_lt_vbuz2_then_la1 lda.z c - cmp.z __17 + cmp.z __18 bcc __b6 - // [50] phi from textbox::@15 to textbox::@2 [phi:textbox::@15->textbox::@2] + // [51] phi from textbox::@15 to textbox::@2 [phi:textbox::@15->textbox::@2] __b2_from___b15: jmp __b2 - // [50] phi from textbox::@1 textbox::@5 textbox::@7 to textbox::@2 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2] + // [51] phi from textbox::@1 textbox::@5 textbox::@7 to textbox::@2 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2] __b2_from___b1: __b2_from___b5: __b2_from___b7: - // [50] phi (word) textbox::z#5 = (word) textbox::z#3 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#0] -- register_copy - // [50] phi (byte) textbox::y#5 = (byte) textbox::y#12 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#1] -- register_copy - // [50] phi (byte) textbox::x#5 = (byte) textbox::x#10 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#2] -- register_copy + // [51] phi (word) textbox::z#5 = (word) textbox::z#3 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#0] -- register_copy + // [51] phi (byte) textbox::y#5 = (byte) textbox::y#12 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#1] -- register_copy + // [51] phi (byte) textbox::x#5 = (byte) textbox::x#10 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#2] -- register_copy jmp __b2 // textbox::@2 __b2: - // [51] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 -- vbuz1=_inc_vbuz1 + // [52] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [52] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 -- vbuz1=_inc_vbuz1 + // [53] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 -- vbuz1=_inc_vbuz1 inc.z x - // [53] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 -- vbuz1_neq_vbuz2_then_la1 + // [54] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 -- vbuz1_neq_vbuz2_then_la1 lda.z x cmp.z x2 bne __b8_from___b2 jmp __b11 // textbox::@11 __b11: - // [54] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [55] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z x1 iny sty.z x - // [55] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 -- vbuz1=_inc_vbuz1 + // [56] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [56] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 -- vbuz1_neq_vbuz2_then_la1 + // [57] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 -- vbuz1_neq_vbuz2_then_la1 lda.z y cmp.z y2 bne __b9 jmp __breturn // textbox::@return __breturn: - // [57] return + // [58] return rts // textbox::@9 __b9: - // [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z y asl asl - sta.z __38 - // [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __38 + sta.z __39 + // [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __39 clc adc.z y - sta.z __39 - // [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 -- vwuz1=vbuz2_rol_3 - lda.z __39 + sta.z __40 + // [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 -- vwuz1=vbuz2_rol_3 + lda.z __40 sta.z z lda #0 sta.z z+1 @@ -2434,16 +2439,16 @@ textbox: { rol.z z+1 asl.z z rol.z z+1 - // [61] phi from textbox::@2 textbox::@9 to textbox::@8 [phi:textbox::@2/textbox::@9->textbox::@8] + // [62] phi from textbox::@2 textbox::@9 to textbox::@8 [phi:textbox::@2/textbox::@9->textbox::@8] __b8_from___b2: __b8_from___b9: - // [61] phi (byte) textbox::y#11 = (byte) textbox::y#5 [phi:textbox::@2/textbox::@9->textbox::@8#0] -- register_copy - // [61] phi (byte) textbox::x#7 = (byte) textbox::x#1 [phi:textbox::@2/textbox::@9->textbox::@8#1] -- register_copy - // [61] phi (word) textbox::z#4 = (word) textbox::z#5 [phi:textbox::@2/textbox::@9->textbox::@8#2] -- register_copy + // [62] phi (byte) textbox::y#11 = (byte) textbox::y#5 [phi:textbox::@2/textbox::@9->textbox::@8#0] -- register_copy + // [62] phi (byte) textbox::x#7 = (byte) textbox::x#1 [phi:textbox::@2/textbox::@9->textbox::@8#1] -- register_copy + // [62] phi (word) textbox::z#4 = (word) textbox::z#5 [phi:textbox::@2/textbox::@9->textbox::@8#2] -- register_copy jmp __b8 // textbox::@8 __b8: - // [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 + // [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 ldy.z i lda (text),y cmp #0 @@ -2451,106 +2456,26 @@ textbox: { jmp __breturn // textbox::@6 __b6: - // [63] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 -- vbuz1=_inc_vbuz1 + // [64] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 -- vbuz1=_inc_vbuz1 inc.z y - // [64] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 -- vbuz1_neq_vbuz2_then_la1 + // [65] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 -- vbuz1_neq_vbuz2_then_la1 lda.z y cmp.z y2 bne __b7 jmp __breturn // textbox::@7 __b7: - // [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z y asl asl - sta.z __35 - // [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __35 + sta.z __36 + // [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __36 clc adc.z y - sta.z __36 - // [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 -- vwuz1=vbuz2_rol_3 - lda.z __36 - sta.z z - lda #0 - sta.z z+1 - asl.z z - rol.z z+1 - asl.z z - rol.z z+1 - asl.z z - rol.z z+1 - // [68] (byte) textbox::x#15 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 - lda.z x1 - sta.z x - jmp __b2_from___b7 - // textbox::@4 - __b4: - // [69] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 -- vbuz1=_inc_vbuz1 - inc.z ls - // [70] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 -- vbuz1=_inc_vbuz1 - inc.z c - // [43] phi from textbox::@4 to textbox::@3 [phi:textbox::@4->textbox::@3] - __b3_from___b4: - // [43] phi (byte) textbox::c#2 = (byte) textbox::c#1 [phi:textbox::@4->textbox::@3#0] -- register_copy - // [43] phi (byte) textbox::ls#2 = (byte) textbox::ls#1 [phi:textbox::@4->textbox::@3#1] -- register_copy - jmp __b3 -} - // draw_window -// draw_window(byte zp($17) x1, byte zp($18) y1, byte zp($19) x2, byte zp($1a) y2) -draw_window: { - .label __2 = $2f - .label __3 = $33 - .label __4 = $37 - .label __5 = $3b - .label __6 = $3f - .label __8 = $40 - .label __14 = $55 - .label __15 = $59 - .label __19 = $4d - .label __20 = $51 - .label __26 = $45 - .label x1 = $17 - .label y1 = $18 - .label x2 = $19 - .label y2 = $1a - .label z = $29 - .label q = $2d - .label x = $12 - .label y = $13 - .label z_1 = $4b - .label y3 = $14 - .label z_2 = $43 - .label x3 = $15 - .label __27 = $57 - .label __28 = $5b - .label __29 = $31 - .label __30 = $35 - .label __31 = $4f - .label __32 = $53 - .label __33 = $39 - .label __34 = $3d - .label __35 = $47 - .label __36 = $27 - .label __37 = $28 - .label __39 = $2b - .label __40 = $2c - .label __42 = $49 - .label __43 = $4a - .label __45 = $41 - .label __46 = $42 - // [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 - lda.z y1 - asl - asl - sta.z __36 - // [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 -- vbuz1=vbuz2_plus_vbuz3 - lda.z __36 - clc - adc.z y1 sta.z __37 - // [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 -- vwuz1=vbuz2_rol_3 + // [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 -- vwuz1=vbuz2_rol_3 lda.z __37 sta.z z lda #0 @@ -2561,17 +2486,97 @@ draw_window: { rol.z z+1 asl.z z rol.z z+1 - // [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [69] (byte) textbox::x#15 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 + lda.z x1 + sta.z x + jmp __b2_from___b7 + // textbox::@4 + __b4: + // [70] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 -- vbuz1=_inc_vbuz1 + inc.z ls + // [71] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 -- vbuz1=_inc_vbuz1 + inc.z c + // [44] phi from textbox::@4 to textbox::@3 [phi:textbox::@4->textbox::@3] + __b3_from___b4: + // [44] phi (byte) textbox::c#2 = (byte) textbox::c#1 [phi:textbox::@4->textbox::@3#0] -- register_copy + // [44] phi (byte) textbox::ls#2 = (byte) textbox::ls#1 [phi:textbox::@4->textbox::@3#1] -- register_copy + jmp __b3 +} + // draw_window +// draw_window(byte zp($17) x1, byte zp($18) y1, byte zp($19) x2, byte zp($1a) y2) +draw_window: { + .label __2 = $33 + .label __3 = $37 + .label __4 = $3b + .label __5 = $3f + .label __6 = $43 + .label __8 = $44 + .label __14 = $59 + .label __15 = $5d + .label __19 = $51 + .label __20 = $55 + .label __26 = $49 + .label x1 = $17 + .label y1 = $18 + .label x2 = $19 + .label y2 = $1a + .label z = $2d + .label q = $31 + .label x = $12 + .label y = $13 + .label z_1 = $4f + .label y3 = $14 + .label z_2 = $47 + .label x3 = $15 + .label __27 = $5b + .label __28 = $5f + .label __29 = $35 + .label __30 = $39 + .label __31 = $53 + .label __32 = $57 + .label __33 = $3d + .label __34 = $41 + .label __35 = $4b + .label __36 = $2b + .label __37 = $2c + .label __39 = $2f + .label __40 = $30 + .label __42 = $4d + .label __43 = $4e + .label __45 = $45 + .label __46 = $46 + // [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 + lda.z y1 + asl + asl + sta.z __36 + // [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 -- vbuz1=vbuz2_plus_vbuz3 + lda.z __36 + clc + adc.z y1 + sta.z __37 + // [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 -- vwuz1=vbuz2_rol_3 + lda.z __37 + sta.z z + lda #0 + sta.z z+1 + asl.z z + rol.z z+1 + asl.z z + rol.z z+1 + asl.z z + rol.z z+1 + // [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z y2 asl asl sta.z __39 - // [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 -- vbuz1=vbuz2_plus_vbuz3 + // [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 -- vbuz1=vbuz2_plus_vbuz3 lda.z __39 clc adc.z y2 sta.z __40 - // [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 -- vwuz1=vbuz2_rol_3 + // [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 -- vwuz1=vbuz2_rol_3 lda.z __40 sta.z q lda #0 @@ -2582,26 +2587,26 @@ draw_window: { rol.z q+1 asl.z q rol.z q+1 - // [77] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [78] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z x1 iny sty.z x - // [78] phi from draw_window draw_window::@2 to draw_window::@1 [phi:draw_window/draw_window::@2->draw_window::@1] + // [79] phi from draw_window draw_window::@2 to draw_window::@1 [phi:draw_window/draw_window::@2->draw_window::@1] __b1_from_draw_window: __b1_from___b2: - // [78] phi (byte) draw_window::x#2 = (byte) draw_window::x#0 [phi:draw_window/draw_window::@2->draw_window::@1#0] -- register_copy + // [79] phi (byte) draw_window::x#2 = (byte) draw_window::x#0 [phi:draw_window/draw_window::@2->draw_window::@1#0] -- register_copy jmp __b1 // draw horizontal lines // draw_window::@1 __b1: - // [79] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 -- vbuz1_lt_vbuz2_then_la1 + // [80] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 -- vbuz1_lt_vbuz2_then_la1 lda.z x cmp.z x2 bcc __b2 jmp __b3 // draw_window::@3 __b3: - // [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z z @@ -2609,7 +2614,7 @@ draw_window: { lda #0 adc.z z+1 sta.z __2+1 - // [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 -- pbuz1=pbuc1_plus_vwuz2 + // [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 -- pbuz1=pbuc1_plus_vwuz2 lda.z __2 clc adc #screen sta.z __29+1 - // [82] *((byte*~) draw_window::$29) ← (byte) $55 -- _deref_pbuz1=vbuc1 + // [83] *((byte*~) draw_window::$29) ← (byte) $55 -- _deref_pbuz1=vbuc1 // draw upper corners lda #$55 ldy #0 sta (__29),y - // [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz2_plus_vbuz3 + // [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x2 clc adc.z z @@ -2630,7 +2635,7 @@ draw_window: { lda #0 adc.z z+1 sta.z __3+1 - // [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 -- pbuz1=pbuc1_plus_vwuz2 + // [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 -- pbuz1=pbuc1_plus_vwuz2 lda.z __3 clc adc #screen sta.z __30+1 - // [85] *((byte*~) draw_window::$30) ← (byte) $49 -- _deref_pbuz1=vbuc1 + // [86] *((byte*~) draw_window::$30) ← (byte) $49 -- _deref_pbuz1=vbuc1 lda #$49 ldy #0 sta (__30),y - // [86] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [87] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z y1 iny sty.z y - // [87] phi from draw_window::@3 draw_window::@5 to draw_window::@4 [phi:draw_window::@3/draw_window::@5->draw_window::@4] + // [88] phi from draw_window::@3 draw_window::@5 to draw_window::@4 [phi:draw_window::@3/draw_window::@5->draw_window::@4] __b4_from___b3: __b4_from___b5: - // [87] phi (byte) draw_window::y#2 = (byte) draw_window::y#0 [phi:draw_window::@3/draw_window::@5->draw_window::@4#0] -- register_copy + // [88] phi (byte) draw_window::y#2 = (byte) draw_window::y#0 [phi:draw_window::@3/draw_window::@5->draw_window::@4#0] -- register_copy jmp __b4 // draw vertical lines // draw_window::@4 __b4: - // [88] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 -- vbuz1_lt_vbuz2_then_la1 + // [89] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 -- vbuz1_lt_vbuz2_then_la1 lda.z y cmp.z y2 bcc __b5 jmp __b6 // draw_window::@6 __b6: - // [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z q @@ -2669,7 +2674,7 @@ draw_window: { lda #0 adc.z q+1 sta.z __4+1 - // [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 -- pbuz1=pbuc1_plus_vwuz2 + // [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 -- pbuz1=pbuc1_plus_vwuz2 lda.z __4 clc adc #screen sta.z __33+1 - // [91] *((byte*~) draw_window::$33) ← (byte) $4a -- _deref_pbuz1=vbuc1 + // [92] *((byte*~) draw_window::$33) ← (byte) $4a -- _deref_pbuz1=vbuc1 // draw lower corners lda #$4a ldy #0 sta (__33),y - // [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz2_plus_vbuz3 + // [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x2 clc adc.z q @@ -2690,7 +2695,7 @@ draw_window: { lda #0 adc.z q+1 sta.z __5+1 - // [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 -- pbuz1=pbuc1_plus_vwuz2 + // [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 -- pbuz1=pbuc1_plus_vwuz2 lda.z __5 clc adc #screen sta.z __34+1 - // [94] *((byte*~) draw_window::$34) ← (byte) $4b -- _deref_pbuz1=vbuc1 + // [95] *((byte*~) draw_window::$34) ← (byte) $4b -- _deref_pbuz1=vbuc1 lda #$4b ldy #0 sta (__34),y - // [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 -- vbuz1=vbuz2_minus_vbuz3 + // [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z x2 sec sbc.z x1 sta.z __6 - // [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 -- vbuz1=vbuz2_minus_vbuz3 + // [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 -- vbuz1=vbuz2_minus_vbuz3 lda.z y2 sec sbc.z y1 sta.z __8 - // [97] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return -- vbuz1_lt_vbuc1_then_la1 + // [98] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return -- vbuz1_lt_vbuc1_then_la1 lda.z __6 cmp #1+1 bcc __breturn jmp __b13 // draw_window::@13 __b13: - // [98] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 -- vbuz1_ge_vbuc1_then_la1 + // [99] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 -- vbuz1_ge_vbuc1_then_la1 lda.z __8 cmp #1+1 bcs __b7 jmp __breturn // draw_window::@return __breturn: - // [99] return + // [100] return rts // draw_window::@7 __b7: - // [100] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [101] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z y1 iny sty.z y3 - // [101] phi from draw_window::@12 draw_window::@7 to draw_window::@8 [phi:draw_window::@12/draw_window::@7->draw_window::@8] + // [102] phi from draw_window::@12 draw_window::@7 to draw_window::@8 [phi:draw_window::@12/draw_window::@7->draw_window::@8] __b8_from___b12: __b8_from___b7: - // [101] phi (byte) draw_window::y3#2 = (byte) draw_window::y3#1 [phi:draw_window::@12/draw_window::@7->draw_window::@8#0] -- register_copy + // [102] phi (byte) draw_window::y3#2 = (byte) draw_window::y3#1 [phi:draw_window::@12/draw_window::@7->draw_window::@8#0] -- register_copy jmp __b8 // blank inside // draw_window::@8 __b8: - // [102] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 -- vbuz1_lt_vbuz2_then_la1 + // [103] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 -- vbuz1_lt_vbuz2_then_la1 lda.z y3 cmp.z y2 bcc __b9 jmp __breturn // draw_window::@9 __b9: - // [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z y3 asl asl sta.z __45 - // [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 -- vbuz1=vbuz2_plus_vbuz3 + // [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 -- vbuz1=vbuz2_plus_vbuz3 lda.z __45 clc adc.z y3 sta.z __46 - // [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 -- vwuz1=vbuz2_rol_3 + // [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 -- vwuz1=vbuz2_rol_3 lda.z __46 sta.z z_2 lda #0 @@ -2770,30 +2775,30 @@ draw_window: { rol.z z_2+1 asl.z z_2 rol.z z_2+1 - // [106] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [107] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z x1 iny sty.z x3 - // [107] phi from draw_window::@11 draw_window::@9 to draw_window::@10 [phi:draw_window::@11/draw_window::@9->draw_window::@10] + // [108] phi from draw_window::@11 draw_window::@9 to draw_window::@10 [phi:draw_window::@11/draw_window::@9->draw_window::@10] __b10_from___b11: __b10_from___b9: - // [107] phi (byte) draw_window::x3#2 = (byte) draw_window::x3#1 [phi:draw_window::@11/draw_window::@9->draw_window::@10#0] -- register_copy + // [108] phi (byte) draw_window::x3#2 = (byte) draw_window::x3#1 [phi:draw_window::@11/draw_window::@9->draw_window::@10#0] -- register_copy jmp __b10 // draw_window::@10 __b10: - // [108] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 -- vbuz1_lt_vbuz2_then_la1 + // [109] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 -- vbuz1_lt_vbuz2_then_la1 lda.z x3 cmp.z x2 bcc __b11 jmp __b12 // draw_window::@12 __b12: - // [109] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 -- vbuz1=_inc_vbuz1 + // [110] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 -- vbuz1=_inc_vbuz1 inc.z y3 jmp __b8_from___b12 // draw_window::@11 __b11: - // [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 -- vwuz1=vwuz2_plus_vbuz3 + // [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 -- vwuz1=vwuz2_plus_vbuz3 lda.z x3 clc adc.z z_2 @@ -2801,7 +2806,7 @@ draw_window: { lda #0 adc.z z_2+1 sta.z __26+1 - // [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 -- pbuz1=pbuc1_plus_vwuz2 + // [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 -- pbuz1=pbuc1_plus_vwuz2 lda.z __26 clc adc #screen sta.z __35+1 - // [112] *((byte*~) draw_window::$35) ← (byte) $20 -- _deref_pbuz1=vbuc1 + // [113] *((byte*~) draw_window::$35) ← (byte) $20 -- _deref_pbuz1=vbuc1 lda #$20 ldy #0 sta (__35),y - // [113] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 -- vbuz1=_inc_vbuz1 + // [114] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 -- vbuz1=_inc_vbuz1 inc.z x3 jmp __b10_from___b11 // draw_window::@5 __b5: - // [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z y asl asl sta.z __42 - // [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 -- vbuz1=vbuz2_plus_vbuz3 + // [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 -- vbuz1=vbuz2_plus_vbuz3 lda.z __42 clc adc.z y sta.z __43 - // [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 -- vwuz1=vbuz2_rol_3 + // [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 -- vwuz1=vbuz2_rol_3 lda.z __43 sta.z z_1 lda #0 @@ -2839,7 +2844,7 @@ draw_window: { rol.z z_1+1 asl.z z_1 rol.z z_1+1 - // [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z z_1 @@ -2847,7 +2852,7 @@ draw_window: { lda #0 adc.z z_1+1 sta.z __19+1 - // [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 -- pbuz1=pbuc1_plus_vwuz2 + // [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 -- pbuz1=pbuc1_plus_vwuz2 lda.z __19 clc adc #screen sta.z __31+1 - // [119] *((byte*~) draw_window::$31) ← (byte) $42 -- _deref_pbuz1=vbuc1 + // [120] *((byte*~) draw_window::$31) ← (byte) $42 -- _deref_pbuz1=vbuc1 lda #$42 ldy #0 sta (__31),y - // [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 -- vwuz1=vwuz2_plus_vbuz3 + // [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x2 clc adc.z z_1 @@ -2867,7 +2872,7 @@ draw_window: { lda #0 adc.z z_1+1 sta.z __20+1 - // [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 -- pbuz1=pbuc1_plus_vwuz2 + // [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 -- pbuz1=pbuc1_plus_vwuz2 lda.z __20 clc adc #screen sta.z __32+1 - // [122] *((byte*~) draw_window::$32) ← (byte) $42 -- _deref_pbuz1=vbuc1 + // [123] *((byte*~) draw_window::$32) ← (byte) $42 -- _deref_pbuz1=vbuc1 lda #$42 ldy #0 sta (__32),y - // [123] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 -- vbuz1=_inc_vbuz1 + // [124] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 -- vbuz1=_inc_vbuz1 inc.z y jmp __b4_from___b5 // draw_window::@2 __b2: - // [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuz3 + // [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuz3 lda.z x clc adc.z z @@ -2892,7 +2897,7 @@ draw_window: { lda #0 adc.z z+1 sta.z __14+1 - // [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 -- pbuz1=pbuc1_plus_vwuz2 + // [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 -- pbuz1=pbuc1_plus_vwuz2 lda.z __14 clc adc #screen sta.z __27+1 - // [126] *((byte*~) draw_window::$27) ← (byte) $43 -- _deref_pbuz1=vbuc1 + // [127] *((byte*~) draw_window::$27) ← (byte) $43 -- _deref_pbuz1=vbuc1 lda #$43 ldy #0 sta (__27),y - // [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuz3 + // [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuz3 lda.z x clc adc.z q @@ -2912,7 +2917,7 @@ draw_window: { lda #0 adc.z q+1 sta.z __15+1 - // [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 -- pbuz1=pbuc1_plus_vwuz2 + // [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 -- pbuz1=pbuc1_plus_vwuz2 lda.z __15 clc adc #screen sta.z __28+1 - // [129] *((byte*~) draw_window::$28) ← (byte) $43 -- _deref_pbuz1=vbuc1 + // [130] *((byte*~) draw_window::$28) ← (byte) $43 -- _deref_pbuz1=vbuc1 lda #$43 ldy #0 sta (__28),y - // [130] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 -- vbuz1=_inc_vbuz1 + // [131] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 -- vbuz1=_inc_vbuz1 inc.z x jmp __b1_from___b2 } @@ -2940,17 +2945,18 @@ Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::x Statement [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a [ main::x#2 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#2 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] Statement [21] if((word) main::wait#2<(word) $88b8) goto main::@5 [ main::x#2 main::wait#2 ] ( main:2 [ main::x#2 main::wait#2 ] ) always clobbers reg byte a -Statement [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a +Statement [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] Removing always clobbered register reg byte a as potential for zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] Removing always clobbered register reg byte a as potential for zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] Removing always clobbered register reg byte a as potential for zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] -Statement [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a -Statement [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a -Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a +Statement [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] ) always clobbers reg byte a +Statement [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] ) always clobbers reg byte a +Statement [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a +Statement [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:11 [ textbox::i#2 textbox::i#1 ] -Statement [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a -Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] ) always clobbers reg byte a +Statement [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] Removing always clobbered register reg byte y as potential for zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] Removing always clobbered register reg byte y as potential for zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] @@ -2958,210 +2964,212 @@ Removing always clobbered register reg byte y as potential for zp[1]:14 [ textbo Removing always clobbered register reg byte y as potential for zp[1]:11 [ textbox::i#2 textbox::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::x#2 main::x#1 ] -Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] Removing always clobbered register reg byte a as potential for zp[1]:13 [ textbox::c#2 textbox::c#1 ] -Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a -Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:33 [ textbox::$15 ] -Statement [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a -Statement [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a -Statement [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a -Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y -Statement [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a -Statement [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a -Statement [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a -Statement [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a +Statement [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] ) always clobbers reg byte a +Statement [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:37 [ textbox::$16 ] +Statement [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a +Statement [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] ) always clobbers reg byte a +Statement [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a +Statement [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y +Statement [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a +Statement [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] ) always clobbers reg byte a +Statement [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a +Statement [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] Removing always clobbered register reg byte a as potential for zp[1]:23 [ draw_window::x1#0 ] Removing always clobbered register reg byte a as potential for zp[1]:24 [ draw_window::y1#0 ] Removing always clobbered register reg byte a as potential for zp[1]:25 [ draw_window::x2#0 ] Removing always clobbered register reg byte a as potential for zp[1]:26 [ draw_window::y2#0 ] -Statement [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a -Statement [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a -Statement [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a -Statement [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a -Statement [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a -Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a -Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a -Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a +Statement [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a +Statement [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a +Statement [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a +Statement [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a +Statement [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a +Statement [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a +Statement [83] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] Removing always clobbered register reg byte y as potential for zp[1]:23 [ draw_window::x1#0 ] Removing always clobbered register reg byte y as potential for zp[1]:24 [ draw_window::y1#0 ] Removing always clobbered register reg byte y as potential for zp[1]:25 [ draw_window::x2#0 ] Removing always clobbered register reg byte y as potential for zp[1]:26 [ draw_window::y2#0 ] -Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a -Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a -Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a -Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a -Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a -Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a -Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y -Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a -Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:63 [ draw_window::$6 ] -Statement [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a +Statement [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a +Statement [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a +Statement [86] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a +Statement [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a +Statement [92] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a +Statement [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a +Statement [95] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y +Statement [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a +Statement [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:67 [ draw_window::$6 ] +Statement [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] -Statement [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a -Statement [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a -Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a +Statement [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a +Statement [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a +Statement [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] -Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a -Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y +Statement [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a +Statement [113] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] Removing always clobbered register reg byte y as potential for zp[1]:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] -Statement [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a +Statement [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] -Statement [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a -Statement [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a -Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a -Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a -Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y +Statement [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a +Statement [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a +Statement [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a +Statement [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a +Statement [120] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] -Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a -Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a -Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y -Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a +Statement [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a +Statement [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a +Statement [123] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] -Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a -Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a +Statement [127] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] -Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a -Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a -Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a +Statement [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a +Statement [130] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y Statement [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 [ main::x#2 main::$4 ] ( main:2 [ main::x#2 main::$4 ] ) always clobbers reg byte a Statement [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a [ main::x#2 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#2 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:2 [ main::x#2 main::x#1 ] Removing always clobbered register reg byte x as potential for zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] Statement [21] if((word) main::wait#2<(word) $88b8) goto main::@5 [ main::x#2 main::wait#2 ] ( main:2 [ main::x#2 main::wait#2 ] ) always clobbers reg byte a Statement [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a -Statement [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a -Statement [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a -Statement [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a -Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a -Statement [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a -Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a -Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a -Statement [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a -Statement [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a -Statement [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a -Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y -Statement [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a -Statement [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a -Statement [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a -Statement [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a -Statement [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a -Statement [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a -Statement [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a -Statement [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a -Statement [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a -Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a -Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a -Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a -Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a -Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a -Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a -Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a -Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a -Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y -Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a -Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a -Statement [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a -Statement [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a -Statement [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a -Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a -Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a -Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y -Statement [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a -Statement [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a -Statement [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a -Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a -Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a -Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y -Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a -Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a -Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y -Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a -Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a -Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a -Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a -Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] ) always clobbers reg byte a +Statement [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] ) always clobbers reg byte a +Statement [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] ) always clobbers reg byte a +Statement [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a +Statement [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] ) always clobbers reg byte a +Statement [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] ) always clobbers reg byte a +Statement [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] ) always clobbers reg byte a +Statement [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] ) always clobbers reg byte a +Statement [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a +Statement [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] ) always clobbers reg byte a +Statement [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a +Statement [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y +Statement [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a +Statement [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] ) always clobbers reg byte a +Statement [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a +Statement [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a +Statement [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a +Statement [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a +Statement [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a +Statement [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a +Statement [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a +Statement [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a +Statement [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a +Statement [83] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a +Statement [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a +Statement [86] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a +Statement [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a +Statement [92] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a +Statement [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a +Statement [95] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y +Statement [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a +Statement [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a +Statement [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a +Statement [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a +Statement [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a +Statement [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a +Statement [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a +Statement [113] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y +Statement [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a +Statement [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a +Statement [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a +Statement [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a +Statement [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a +Statement [120] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y +Statement [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a +Statement [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a +Statement [123] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a +Statement [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a +Statement [127] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a +Statement [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a +Statement [130] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y Statement [6] if((byte) main::x#2<(byte) $f) goto main::@2 [ main::x#2 ] ( main:2 [ main::x#2 ] ) always clobbers reg byte a Statement [14] (byte~) main::$4 ← (byte) main::x#2 + (byte) main::x#2 [ main::x#2 main::$4 ] ( main:2 [ main::x#2 main::$4 ] ) always clobbers reg byte a Statement [16] (byte) textbox::y2#0 ← (byte) main::x#2 + (byte) $a [ main::x#2 textbox::x2#0 textbox::y2#0 ] ( main:2 [ main::x#2 textbox::x2#0 textbox::y2#0 ] ) always clobbers reg byte a reg byte x Statement [21] if((word) main::wait#2<(word) $88b8) goto main::@5 [ main::x#2 main::wait#2 ] ( main:2 [ main::x#2 main::wait#2 ] ) always clobbers reg byte a Statement [22] (byte) main::x#1 ← (byte) main::x#2 + (byte) 2 [ main::x#1 ] ( main:2 [ main::x#1 ] ) always clobbers reg byte a -Statement [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$32 ] ) always clobbers reg byte a -Statement [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$33 ] ) always clobbers reg byte a -Statement [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a -Statement [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$8 ] ) always clobbers reg byte a -Statement [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$31 ] ) always clobbers reg byte a -Statement [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y -Statement [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a -Statement [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 ] ) always clobbers reg byte a -Statement [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$15 textbox::$17 ] ) always clobbers reg byte a -Statement [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$38 ] ) always clobbers reg byte a -Statement [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a -Statement [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a -Statement [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y -Statement [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$35 ] ) always clobbers reg byte a -Statement [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a -Statement [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a -Statement [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a -Statement [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a -Statement [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a -Statement [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a -Statement [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a -Statement [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a -Statement [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a -Statement [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a -Statement [82] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a -Statement [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a -Statement [85] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a -Statement [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a -Statement [91] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y -Statement [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a -Statement [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a -Statement [94] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y -Statement [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a -Statement [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a -Statement [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a -Statement [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a -Statement [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a -Statement [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a -Statement [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a -Statement [112] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y -Statement [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a -Statement [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a -Statement [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a -Statement [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a -Statement [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a -Statement [119] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y -Statement [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a -Statement [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a -Statement [122] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y -Statement [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a -Statement [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a -Statement [126] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y -Statement [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a -Statement [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a -Statement [129] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 ] ) always clobbers reg byte a +Statement [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$3 textbox::$33 ] ) always clobbers reg byte a +Statement [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::$34 ] ) always clobbers reg byte a +Statement [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::y#0 textbox::x#0 textbox::z#0 ] ) always clobbers reg byte a +Statement [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$9 ] ) always clobbers reg byte a +Statement [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::$32 ] ) always clobbers reg byte a +Statement [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 ] ) always clobbers reg byte a reg byte y +Statement [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::ls#2 textbox::c#2 ] ) always clobbers reg byte a +Statement [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 ] ) always clobbers reg byte a +Statement [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#3 textbox::x#10 textbox::i#2 textbox::y#12 textbox::c#2 textbox::$16 textbox::$18 ] ) always clobbers reg byte a +Statement [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$39 ] ) always clobbers reg byte a +Statement [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::$40 ] ) always clobbers reg byte a +Statement [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#1 textbox::x#12 textbox::y#2 textbox::z#2 ] ) always clobbers reg byte a +Statement [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::z#4 textbox::x#7 textbox::i#1 textbox::y#11 ] ) always clobbers reg byte a reg byte y +Statement [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$36 ] ) always clobbers reg byte a +Statement [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::$37 ] ) always clobbers reg byte a +Statement [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ( main:2::textbox:8 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:10 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:12 [ textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] main:2::textbox:19 [ main::x#2 textbox::x1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 textbox::i#2 textbox::y#1 textbox::z#1 ] ) always clobbers reg byte a +Statement [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$36 ] ) always clobbers reg byte a +Statement [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$37 ] ) always clobbers reg byte a +Statement [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 ] ) always clobbers reg byte a +Statement [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$39 ] ) always clobbers reg byte a +Statement [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::$40 ] ) always clobbers reg byte a +Statement [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a +Statement [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$2 ] ) always clobbers reg byte a +Statement [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::$29 ] ) always clobbers reg byte a +Statement [83] *((byte*~) draw_window::$29) ← (byte) $55 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$3 ] ) always clobbers reg byte a +Statement [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$30 ] ) always clobbers reg byte a +Statement [86] *((byte*~) draw_window::$30) ← (byte) $49 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$4 ] ) always clobbers reg byte a +Statement [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::$33 ] ) always clobbers reg byte a +Statement [92] *((byte*~) draw_window::$33) ← (byte) $4a [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 ] ) always clobbers reg byte a reg byte y +Statement [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$5 ] ) always clobbers reg byte a +Statement [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$34 ] ) always clobbers reg byte a +Statement [95] *((byte*~) draw_window::$34) ← (byte) $4b [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 ] ) always clobbers reg byte a reg byte y +Statement [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 ] ) always clobbers reg byte a +Statement [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::$6 draw_window::$8 ] ) always clobbers reg byte a +Statement [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$45 ] ) always clobbers reg byte a +Statement [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::$46 ] ) always clobbers reg byte a +Statement [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 ] ) always clobbers reg byte a +Statement [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$26 ] ) always clobbers reg byte a +Statement [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 draw_window::$35 ] ) always clobbers reg byte a +Statement [113] *((byte*~) draw_window::$35) ← (byte) $20 [ draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::x2#0 draw_window::y2#0 draw_window::y3#2 draw_window::z#2 draw_window::x3#2 ] ) always clobbers reg byte a reg byte y +Statement [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$42 ] ) always clobbers reg byte a +Statement [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$43 ] ) always clobbers reg byte a +Statement [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a +Statement [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$19 ] ) always clobbers reg byte a +Statement [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 draw_window::$31 ] ) always clobbers reg byte a +Statement [120] *((byte*~) draw_window::$31) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::z#1 ] ) always clobbers reg byte a reg byte y +Statement [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$20 ] ) always clobbers reg byte a +Statement [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 draw_window::$32 ] ) always clobbers reg byte a +Statement [123] *((byte*~) draw_window::$32) ← (byte) $42 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::q#0 draw_window::y#2 ] ) always clobbers reg byte a reg byte y +Statement [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$14 ] ) always clobbers reg byte a +Statement [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$27 ] ) always clobbers reg byte a +Statement [127] *((byte*~) draw_window::$27) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y +Statement [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$15 ] ) always clobbers reg byte a +Statement [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 draw_window::$28 ] ) always clobbers reg byte a +Statement [130] *((byte*~) draw_window::$28) ← (byte) $43 [ draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ( main:2::textbox:8::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:10::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:12::draw_window:29 [ textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] main:2::textbox:19::draw_window:29 [ main::x#2 textbox::x1#4 textbox::y1#4 textbox::x2#4 textbox::y2#4 textbox::text#12 draw_window::x1#0 draw_window::y1#0 draw_window::x2#0 draw_window::y2#0 draw_window::z#0 draw_window::q#0 draw_window::x#2 ] ) always clobbers reg byte a reg byte y Potential registers zp[1]:2 [ main::x#2 main::x#1 ] : zp[1]:2 , Potential registers zp[2]:3 [ main::wait#2 main::wait#1 ] : zp[2]:3 , Potential registers zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] : zp[1]:5 , reg byte x , @@ -3184,157 +3192,157 @@ Potential registers zp[1]:23 [ draw_window::x1#0 ] : zp[1]:23 , reg byte x , Potential registers zp[1]:24 [ draw_window::y1#0 ] : zp[1]:24 , reg byte x , Potential registers zp[1]:25 [ draw_window::x2#0 ] : zp[1]:25 , reg byte x , Potential registers zp[1]:26 [ draw_window::y2#0 ] : zp[1]:26 , reg byte x , -Potential registers zp[1]:27 [ textbox::$32 ] : zp[1]:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:28 [ textbox::$33 ] : zp[1]:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:29 [ textbox::$8 ] : zp[2]:29 , -Potential registers zp[2]:31 [ textbox::$31 ] : zp[2]:31 , -Potential registers zp[1]:33 [ textbox::$15 ] : zp[1]:33 , reg byte x , reg byte y , -Potential registers zp[1]:34 [ textbox::$17 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:35 [ textbox::$38 ] : zp[1]:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:36 [ textbox::$39 ] : zp[1]:36 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:37 [ textbox::$35 ] : zp[1]:37 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:38 [ textbox::$36 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:39 [ draw_window::$36 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:40 [ draw_window::$37 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:41 [ draw_window::z#0 ] : zp[2]:41 , -Potential registers zp[1]:43 [ draw_window::$39 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:44 [ draw_window::$40 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:45 [ draw_window::q#0 ] : zp[2]:45 , -Potential registers zp[2]:47 [ draw_window::$2 ] : zp[2]:47 , -Potential registers zp[2]:49 [ draw_window::$29 ] : zp[2]:49 , -Potential registers zp[2]:51 [ draw_window::$3 ] : zp[2]:51 , -Potential registers zp[2]:53 [ draw_window::$30 ] : zp[2]:53 , -Potential registers zp[2]:55 [ draw_window::$4 ] : zp[2]:55 , -Potential registers zp[2]:57 [ draw_window::$33 ] : zp[2]:57 , -Potential registers zp[2]:59 [ draw_window::$5 ] : zp[2]:59 , -Potential registers zp[2]:61 [ draw_window::$34 ] : zp[2]:61 , -Potential registers zp[1]:63 [ draw_window::$6 ] : zp[1]:63 , reg byte x , reg byte y , -Potential registers zp[1]:64 [ draw_window::$8 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:65 [ draw_window::$45 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:66 [ draw_window::$46 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:67 [ draw_window::z#2 ] : zp[2]:67 , -Potential registers zp[2]:69 [ draw_window::$26 ] : zp[2]:69 , -Potential registers zp[2]:71 [ draw_window::$35 ] : zp[2]:71 , -Potential registers zp[1]:73 [ draw_window::$42 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:74 [ draw_window::$43 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:75 [ draw_window::z#1 ] : zp[2]:75 , -Potential registers zp[2]:77 [ draw_window::$19 ] : zp[2]:77 , -Potential registers zp[2]:79 [ draw_window::$31 ] : zp[2]:79 , -Potential registers zp[2]:81 [ draw_window::$20 ] : zp[2]:81 , -Potential registers zp[2]:83 [ draw_window::$32 ] : zp[2]:83 , -Potential registers zp[2]:85 [ draw_window::$14 ] : zp[2]:85 , -Potential registers zp[2]:87 [ draw_window::$27 ] : zp[2]:87 , -Potential registers zp[2]:89 [ draw_window::$15 ] : zp[2]:89 , -Potential registers zp[2]:91 [ draw_window::$28 ] : zp[2]:91 , +Potential registers zp[2]:27 [ textbox::$3 ] : zp[2]:27 , +Potential registers zp[2]:29 [ textbox::$33 ] : zp[2]:29 , +Potential registers zp[2]:31 [ textbox::$34 ] : zp[2]:31 , +Potential registers zp[2]:33 [ textbox::$9 ] : zp[2]:33 , +Potential registers zp[2]:35 [ textbox::$32 ] : zp[2]:35 , +Potential registers zp[1]:37 [ textbox::$16 ] : zp[1]:37 , reg byte x , reg byte y , +Potential registers zp[1]:38 [ textbox::$18 ] : zp[1]:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:39 [ textbox::$39 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:40 [ textbox::$40 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:41 [ textbox::$36 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:42 [ textbox::$37 ] : zp[1]:42 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:43 [ draw_window::$36 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:44 [ draw_window::$37 ] : zp[1]:44 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:45 [ draw_window::z#0 ] : zp[2]:45 , +Potential registers zp[1]:47 [ draw_window::$39 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:48 [ draw_window::$40 ] : zp[1]:48 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:49 [ draw_window::q#0 ] : zp[2]:49 , +Potential registers zp[2]:51 [ draw_window::$2 ] : zp[2]:51 , +Potential registers zp[2]:53 [ draw_window::$29 ] : zp[2]:53 , +Potential registers zp[2]:55 [ draw_window::$3 ] : zp[2]:55 , +Potential registers zp[2]:57 [ draw_window::$30 ] : zp[2]:57 , +Potential registers zp[2]:59 [ draw_window::$4 ] : zp[2]:59 , +Potential registers zp[2]:61 [ draw_window::$33 ] : zp[2]:61 , +Potential registers zp[2]:63 [ draw_window::$5 ] : zp[2]:63 , +Potential registers zp[2]:65 [ draw_window::$34 ] : zp[2]:65 , +Potential registers zp[1]:67 [ draw_window::$6 ] : zp[1]:67 , reg byte x , reg byte y , +Potential registers zp[1]:68 [ draw_window::$8 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:69 [ draw_window::$45 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:70 [ draw_window::$46 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:71 [ draw_window::z#2 ] : zp[2]:71 , +Potential registers zp[2]:73 [ draw_window::$26 ] : zp[2]:73 , +Potential registers zp[2]:75 [ draw_window::$35 ] : zp[2]:75 , +Potential registers zp[1]:77 [ draw_window::$42 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:78 [ draw_window::$43 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:79 [ draw_window::z#1 ] : zp[2]:79 , +Potential registers zp[2]:81 [ draw_window::$19 ] : zp[2]:81 , +Potential registers zp[2]:83 [ draw_window::$31 ] : zp[2]:83 , +Potential registers zp[2]:85 [ draw_window::$20 ] : zp[2]:85 , +Potential registers zp[2]:87 [ draw_window::$32 ] : zp[2]:87 , +Potential registers zp[2]:89 [ draw_window::$14 ] : zp[2]:89 , +Potential registers zp[2]:91 [ draw_window::$27 ] : zp[2]:91 , +Potential registers zp[2]:93 [ draw_window::$15 ] : zp[2]:93 , +Potential registers zp[2]:95 [ draw_window::$28 ] : zp[2]:95 , REGISTER UPLIFT SCOPES -Uplift Scope [draw_window] 3,025: zp[1]:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] 2,002: zp[2]:69 [ draw_window::$26 ] 2,002: zp[2]:71 [ draw_window::$35 ] 269.38: zp[1]:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] 252.09: zp[1]:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] 248.25: zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] 202: zp[1]:65 [ draw_window::$45 ] 202: zp[1]:66 [ draw_window::$46 ] 202: zp[1]:73 [ draw_window::$42 ] 202: zp[1]:74 [ draw_window::$43 ] 202: zp[2]:77 [ draw_window::$19 ] 202: zp[2]:79 [ draw_window::$31 ] 202: zp[2]:81 [ draw_window::$20 ] 202: zp[2]:83 [ draw_window::$32 ] 202: zp[2]:85 [ draw_window::$14 ] 202: zp[2]:87 [ draw_window::$27 ] 202: zp[2]:89 [ draw_window::$15 ] 202: zp[2]:91 [ draw_window::$28 ] 137.75: zp[2]:67 [ draw_window::z#2 ] 75.75: zp[2]:75 [ draw_window::z#1 ] 19.85: zp[1]:25 [ draw_window::x2#0 ] 6.29: zp[2]:41 [ draw_window::z#0 ] 4: zp[1]:39 [ draw_window::$36 ] 4: zp[1]:40 [ draw_window::$37 ] 4: zp[1]:43 [ draw_window::$39 ] 4: zp[1]:44 [ draw_window::$40 ] 4: zp[2]:47 [ draw_window::$2 ] 4: zp[2]:49 [ draw_window::$29 ] 4: zp[2]:51 [ draw_window::$3 ] 4: zp[2]:53 [ draw_window::$30 ] 4: zp[2]:55 [ draw_window::$4 ] 4: zp[2]:57 [ draw_window::$33 ] 4: zp[2]:59 [ draw_window::$5 ] 4: zp[2]:61 [ draw_window::$34 ] 3.5: zp[1]:26 [ draw_window::y2#0 ] 3.37: zp[1]:23 [ draw_window::x1#0 ] 3.24: zp[2]:45 [ draw_window::q#0 ] 2: zp[1]:63 [ draw_window::$6 ] 2: zp[1]:64 [ draw_window::$8 ] 0.25: zp[1]:24 [ draw_window::y1#0 ] -Uplift Scope [textbox] 2,571.33: zp[1]:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] 2,316.86: zp[1]:13 [ textbox::c#2 textbox::c#1 ] 777.88: zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] 585.83: zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] 466.16: zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] 202: zp[2]:29 [ textbox::$8 ] 202: zp[2]:31 [ textbox::$31 ] 202: zp[1]:35 [ textbox::$38 ] 202: zp[1]:36 [ textbox::$39 ] 202: zp[1]:37 [ textbox::$35 ] 202: zp[1]:38 [ textbox::$36 ] 101: zp[1]:33 [ textbox::$15 ] 101: zp[1]:34 [ textbox::$17 ] 50.5: zp[1]:11 [ textbox::i#2 textbox::i#1 ] 50.11: zp[2]:9 [ textbox::text#12 ] 24.5: zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] 17.91: zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] 12.41: zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] 12.05: zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] 4: zp[1]:27 [ textbox::$32 ] 4: zp[1]:28 [ textbox::$33 ] +Uplift Scope [draw_window] 3,025: zp[1]:21 [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] 2,002: zp[2]:73 [ draw_window::$26 ] 2,002: zp[2]:75 [ draw_window::$35 ] 269.38: zp[1]:18 [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] 252.09: zp[1]:19 [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] 248.25: zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] 202: zp[1]:69 [ draw_window::$45 ] 202: zp[1]:70 [ draw_window::$46 ] 202: zp[1]:77 [ draw_window::$42 ] 202: zp[1]:78 [ draw_window::$43 ] 202: zp[2]:81 [ draw_window::$19 ] 202: zp[2]:83 [ draw_window::$31 ] 202: zp[2]:85 [ draw_window::$20 ] 202: zp[2]:87 [ draw_window::$32 ] 202: zp[2]:89 [ draw_window::$14 ] 202: zp[2]:91 [ draw_window::$27 ] 202: zp[2]:93 [ draw_window::$15 ] 202: zp[2]:95 [ draw_window::$28 ] 137.75: zp[2]:71 [ draw_window::z#2 ] 75.75: zp[2]:79 [ draw_window::z#1 ] 19.85: zp[1]:25 [ draw_window::x2#0 ] 6.29: zp[2]:45 [ draw_window::z#0 ] 4: zp[1]:43 [ draw_window::$36 ] 4: zp[1]:44 [ draw_window::$37 ] 4: zp[1]:47 [ draw_window::$39 ] 4: zp[1]:48 [ draw_window::$40 ] 4: zp[2]:51 [ draw_window::$2 ] 4: zp[2]:53 [ draw_window::$29 ] 4: zp[2]:55 [ draw_window::$3 ] 4: zp[2]:57 [ draw_window::$30 ] 4: zp[2]:59 [ draw_window::$4 ] 4: zp[2]:61 [ draw_window::$33 ] 4: zp[2]:63 [ draw_window::$5 ] 4: zp[2]:65 [ draw_window::$34 ] 3.5: zp[1]:26 [ draw_window::y2#0 ] 3.37: zp[1]:23 [ draw_window::x1#0 ] 3.24: zp[2]:49 [ draw_window::q#0 ] 2: zp[1]:67 [ draw_window::$6 ] 2: zp[1]:68 [ draw_window::$8 ] 0.25: zp[1]:24 [ draw_window::y1#0 ] +Uplift Scope [textbox] 2,571.33: zp[1]:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] 2,316.86: zp[1]:13 [ textbox::c#2 textbox::c#1 ] 777.74: zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] 585.83: zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] 465.48: zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] 202: zp[2]:33 [ textbox::$9 ] 202: zp[2]:35 [ textbox::$32 ] 202: zp[1]:39 [ textbox::$39 ] 202: zp[1]:40 [ textbox::$40 ] 202: zp[1]:41 [ textbox::$36 ] 202: zp[1]:42 [ textbox::$37 ] 101: zp[1]:37 [ textbox::$16 ] 101: zp[1]:38 [ textbox::$18 ] 50.5: zp[1]:11 [ textbox::i#2 textbox::i#1 ] 49.04: zp[2]:9 [ textbox::text#12 ] 24.5: zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] 17.77: zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] 12.27: zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] 11.95: zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] 4: zp[2]:29 [ textbox::$33 ] 4: zp[2]:31 [ textbox::$34 ] 3: zp[2]:27 [ textbox::$3 ] Uplift Scope [main] 353.5: zp[2]:3 [ main::wait#2 main::wait#1 ] 30: zp[1]:2 [ main::x#2 main::x#1 ] 22: zp[1]:22 [ main::$4 ] Uplift Scope [] -Uplifting [draw_window] best 192514 combination reg byte x [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] zp[2]:69 [ draw_window::$26 ] zp[2]:71 [ draw_window::$35 ] reg byte x [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] reg byte a [ draw_window::$45 ] reg byte a [ draw_window::$46 ] zp[1]:73 [ draw_window::$42 ] zp[1]:74 [ draw_window::$43 ] zp[2]:77 [ draw_window::$19 ] zp[2]:79 [ draw_window::$31 ] zp[2]:81 [ draw_window::$20 ] zp[2]:83 [ draw_window::$32 ] zp[2]:85 [ draw_window::$14 ] zp[2]:87 [ draw_window::$27 ] zp[2]:89 [ draw_window::$15 ] zp[2]:91 [ draw_window::$28 ] zp[2]:67 [ draw_window::z#2 ] zp[2]:75 [ draw_window::z#1 ] zp[1]:25 [ draw_window::x2#0 ] zp[2]:41 [ draw_window::z#0 ] zp[1]:39 [ draw_window::$36 ] zp[1]:40 [ draw_window::$37 ] zp[1]:43 [ draw_window::$39 ] zp[1]:44 [ draw_window::$40 ] zp[2]:47 [ draw_window::$2 ] zp[2]:49 [ draw_window::$29 ] zp[2]:51 [ draw_window::$3 ] zp[2]:53 [ draw_window::$30 ] zp[2]:55 [ draw_window::$4 ] zp[2]:57 [ draw_window::$33 ] zp[2]:59 [ draw_window::$5 ] zp[2]:61 [ draw_window::$34 ] zp[1]:26 [ draw_window::y2#0 ] zp[1]:23 [ draw_window::x1#0 ] zp[2]:45 [ draw_window::q#0 ] zp[1]:63 [ draw_window::$6 ] zp[1]:64 [ draw_window::$8 ] zp[1]:24 [ draw_window::y1#0 ] +Uplifting [draw_window] best 192545 combination reg byte x [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] zp[2]:73 [ draw_window::$26 ] zp[2]:75 [ draw_window::$35 ] reg byte x [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] reg byte a [ draw_window::$45 ] reg byte a [ draw_window::$46 ] zp[1]:77 [ draw_window::$42 ] zp[1]:78 [ draw_window::$43 ] zp[2]:81 [ draw_window::$19 ] zp[2]:83 [ draw_window::$31 ] zp[2]:85 [ draw_window::$20 ] zp[2]:87 [ draw_window::$32 ] zp[2]:89 [ draw_window::$14 ] zp[2]:91 [ draw_window::$27 ] zp[2]:93 [ draw_window::$15 ] zp[2]:95 [ draw_window::$28 ] zp[2]:71 [ draw_window::z#2 ] zp[2]:79 [ draw_window::z#1 ] zp[1]:25 [ draw_window::x2#0 ] zp[2]:45 [ draw_window::z#0 ] zp[1]:43 [ draw_window::$36 ] zp[1]:44 [ draw_window::$37 ] zp[1]:47 [ draw_window::$39 ] zp[1]:48 [ draw_window::$40 ] zp[2]:51 [ draw_window::$2 ] zp[2]:53 [ draw_window::$29 ] zp[2]:55 [ draw_window::$3 ] zp[2]:57 [ draw_window::$30 ] zp[2]:59 [ draw_window::$4 ] zp[2]:61 [ draw_window::$33 ] zp[2]:63 [ draw_window::$5 ] zp[2]:65 [ draw_window::$34 ] zp[1]:26 [ draw_window::y2#0 ] zp[1]:23 [ draw_window::x1#0 ] zp[2]:49 [ draw_window::q#0 ] zp[1]:67 [ draw_window::$6 ] zp[1]:68 [ draw_window::$8 ] zp[1]:24 [ draw_window::y1#0 ] Limited combination testing to 100 combinations of 201326592 possible. -Uplifting [textbox] best 176214 combination reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] zp[2]:29 [ textbox::$8 ] zp[2]:31 [ textbox::$31 ] reg byte a [ textbox::$38 ] zp[1]:36 [ textbox::$39 ] zp[1]:37 [ textbox::$35 ] zp[1]:38 [ textbox::$36 ] zp[1]:33 [ textbox::$15 ] zp[1]:34 [ textbox::$17 ] zp[1]:11 [ textbox::i#2 textbox::i#1 ] zp[2]:9 [ textbox::text#12 ] zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] zp[1]:27 [ textbox::$32 ] zp[1]:28 [ textbox::$33 ] -Limited combination testing to 100 combinations of 28311552 possible. -Uplifting [main] best 176174 combination zp[2]:3 [ main::wait#2 main::wait#1 ] zp[1]:2 [ main::x#2 main::x#1 ] reg byte a [ main::$4 ] -Uplifting [] best 176174 combination +Uplifting [textbox] best 176245 combination reg byte y [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] reg byte x [ textbox::c#2 textbox::c#1 ] zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] zp[2]:33 [ textbox::$9 ] zp[2]:35 [ textbox::$32 ] reg byte a [ textbox::$39 ] zp[1]:40 [ textbox::$40 ] zp[1]:41 [ textbox::$36 ] zp[1]:42 [ textbox::$37 ] zp[1]:37 [ textbox::$16 ] zp[1]:38 [ textbox::$18 ] zp[1]:11 [ textbox::i#2 textbox::i#1 ] zp[2]:9 [ textbox::text#12 ] zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] zp[2]:29 [ textbox::$33 ] zp[2]:31 [ textbox::$34 ] zp[2]:27 [ textbox::$3 ] +Limited combination testing to 100 combinations of 1769472 possible. +Uplifting [main] best 176205 combination zp[2]:3 [ main::wait#2 main::wait#1 ] zp[1]:2 [ main::x#2 main::x#1 ] reg byte a [ main::$4 ] +Uplifting [] best 176205 combination Attempting to uplift remaining variables inzp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] -Uplifting [textbox] best 176174 combination zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] +Uplifting [textbox] best 176205 combination zp[1]:14 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] Attempting to uplift remaining variables inzp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] -Uplifting [textbox] best 176174 combination zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] +Uplifting [textbox] best 176205 combination zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] Attempting to uplift remaining variables inzp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] -Uplifting [draw_window] best 176174 combination zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] -Attempting to uplift remaining variables inzp[1]:36 [ textbox::$39 ] -Uplifting [textbox] best 175574 combination reg byte a [ textbox::$39 ] -Attempting to uplift remaining variables inzp[1]:37 [ textbox::$35 ] -Uplifting [textbox] best 174974 combination reg byte a [ textbox::$35 ] -Attempting to uplift remaining variables inzp[1]:38 [ textbox::$36 ] -Uplifting [textbox] best 174374 combination reg byte a [ textbox::$36 ] -Attempting to uplift remaining variables inzp[1]:73 [ draw_window::$42 ] -Uplifting [draw_window] best 174174 combination reg byte a [ draw_window::$42 ] -Attempting to uplift remaining variables inzp[1]:74 [ draw_window::$43 ] -Uplifting [draw_window] best 173574 combination reg byte a [ draw_window::$43 ] -Attempting to uplift remaining variables inzp[1]:33 [ textbox::$15 ] -Uplifting [textbox] best 173174 combination reg byte y [ textbox::$15 ] -Attempting to uplift remaining variables inzp[1]:34 [ textbox::$17 ] -Uplifting [textbox] best 173174 combination zp[1]:34 [ textbox::$17 ] +Uplifting [draw_window] best 176205 combination zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] +Attempting to uplift remaining variables inzp[1]:40 [ textbox::$40 ] +Uplifting [textbox] best 175605 combination reg byte a [ textbox::$40 ] +Attempting to uplift remaining variables inzp[1]:41 [ textbox::$36 ] +Uplifting [textbox] best 175005 combination reg byte a [ textbox::$36 ] +Attempting to uplift remaining variables inzp[1]:42 [ textbox::$37 ] +Uplifting [textbox] best 174405 combination reg byte a [ textbox::$37 ] +Attempting to uplift remaining variables inzp[1]:77 [ draw_window::$42 ] +Uplifting [draw_window] best 174205 combination reg byte a [ draw_window::$42 ] +Attempting to uplift remaining variables inzp[1]:78 [ draw_window::$43 ] +Uplifting [draw_window] best 173605 combination reg byte a [ draw_window::$43 ] +Attempting to uplift remaining variables inzp[1]:37 [ textbox::$16 ] +Uplifting [textbox] best 173205 combination reg byte y [ textbox::$16 ] +Attempting to uplift remaining variables inzp[1]:38 [ textbox::$18 ] +Uplifting [textbox] best 173205 combination zp[1]:38 [ textbox::$18 ] Attempting to uplift remaining variables inzp[1]:11 [ textbox::i#2 textbox::i#1 ] -Uplifting [textbox] best 173174 combination zp[1]:11 [ textbox::i#2 textbox::i#1 ] +Uplifting [textbox] best 173205 combination zp[1]:11 [ textbox::i#2 textbox::i#1 ] Attempting to uplift remaining variables inzp[1]:2 [ main::x#2 main::x#1 ] -Uplifting [main] best 173174 combination zp[1]:2 [ main::x#2 main::x#1 ] +Uplifting [main] best 173205 combination zp[1]:2 [ main::x#2 main::x#1 ] Attempting to uplift remaining variables inzp[1]:6 [ textbox::y1#4 textbox::y1#0 ] -Uplifting [textbox] best 173174 combination zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] +Uplifting [textbox] best 173205 combination zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] Attempting to uplift remaining variables inzp[1]:25 [ draw_window::x2#0 ] -Uplifting [draw_window] best 173174 combination zp[1]:25 [ draw_window::x2#0 ] +Uplifting [draw_window] best 173205 combination zp[1]:25 [ draw_window::x2#0 ] Attempting to uplift remaining variables inzp[1]:5 [ textbox::x1#4 textbox::x1#0 ] -Uplifting [textbox] best 173174 combination zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] +Uplifting [textbox] best 173205 combination zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] Attempting to uplift remaining variables inzp[1]:7 [ textbox::x2#4 textbox::x2#0 ] -Uplifting [textbox] best 173174 combination zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] +Uplifting [textbox] best 173205 combination zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] Attempting to uplift remaining variables inzp[1]:8 [ textbox::y2#4 textbox::y2#0 ] -Uplifting [textbox] best 173174 combination zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] -Attempting to uplift remaining variables inzp[1]:27 [ textbox::$32 ] -Uplifting [textbox] best 173168 combination reg byte a [ textbox::$32 ] -Attempting to uplift remaining variables inzp[1]:28 [ textbox::$33 ] -Uplifting [textbox] best 173162 combination reg byte a [ textbox::$33 ] -Attempting to uplift remaining variables inzp[1]:39 [ draw_window::$36 ] -Uplifting [draw_window] best 173156 combination reg byte a [ draw_window::$36 ] -Attempting to uplift remaining variables inzp[1]:40 [ draw_window::$37 ] -Uplifting [draw_window] best 173150 combination reg byte a [ draw_window::$37 ] -Attempting to uplift remaining variables inzp[1]:43 [ draw_window::$39 ] -Uplifting [draw_window] best 173144 combination reg byte a [ draw_window::$39 ] -Attempting to uplift remaining variables inzp[1]:44 [ draw_window::$40 ] -Uplifting [draw_window] best 173138 combination reg byte a [ draw_window::$40 ] +Uplifting [textbox] best 173205 combination zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] +Attempting to uplift remaining variables inzp[1]:43 [ draw_window::$36 ] +Uplifting [draw_window] best 173199 combination reg byte a [ draw_window::$36 ] +Attempting to uplift remaining variables inzp[1]:44 [ draw_window::$37 ] +Uplifting [draw_window] best 173193 combination reg byte a [ draw_window::$37 ] +Attempting to uplift remaining variables inzp[1]:47 [ draw_window::$39 ] +Uplifting [draw_window] best 173187 combination reg byte a [ draw_window::$39 ] +Attempting to uplift remaining variables inzp[1]:48 [ draw_window::$40 ] +Uplifting [draw_window] best 173181 combination reg byte a [ draw_window::$40 ] Attempting to uplift remaining variables inzp[1]:26 [ draw_window::y2#0 ] -Uplifting [draw_window] best 173138 combination zp[1]:26 [ draw_window::y2#0 ] +Uplifting [draw_window] best 173181 combination zp[1]:26 [ draw_window::y2#0 ] Attempting to uplift remaining variables inzp[1]:23 [ draw_window::x1#0 ] -Uplifting [draw_window] best 173138 combination zp[1]:23 [ draw_window::x1#0 ] -Attempting to uplift remaining variables inzp[1]:63 [ draw_window::$6 ] -Uplifting [draw_window] best 173134 combination reg byte x [ draw_window::$6 ] -Attempting to uplift remaining variables inzp[1]:64 [ draw_window::$8 ] -Uplifting [draw_window] best 173128 combination reg byte a [ draw_window::$8 ] +Uplifting [draw_window] best 173181 combination zp[1]:23 [ draw_window::x1#0 ] +Attempting to uplift remaining variables inzp[1]:67 [ draw_window::$6 ] +Uplifting [draw_window] best 173177 combination reg byte x [ draw_window::$6 ] +Attempting to uplift remaining variables inzp[1]:68 [ draw_window::$8 ] +Uplifting [draw_window] best 173171 combination reg byte a [ draw_window::$8 ] Attempting to uplift remaining variables inzp[1]:24 [ draw_window::y1#0 ] -Uplifting [draw_window] best 173128 combination zp[1]:24 [ draw_window::y1#0 ] +Uplifting [draw_window] best 173171 combination zp[1]:24 [ draw_window::y1#0 ] Coalescing zero page register [ zp[1]:2 [ main::x#2 main::x#1 ] ] with [ zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] ] with [ zp[1]:15 [ textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] ] - score: 1 Coalescing zero page register [ zp[1]:6 [ textbox::y1#4 textbox::y1#0 textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 ] ] with [ zp[1]:24 [ draw_window::y1#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] ] with [ zp[1]:25 [ draw_window::x2#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] ] with [ zp[1]:26 [ draw_window::y2#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:29 [ textbox::$8 ] ] with [ zp[2]:31 [ textbox::$31 ] ] - score: 1 -Coalescing zero page register [ zp[2]:41 [ draw_window::z#0 ] ] with [ zp[2]:51 [ draw_window::$3 ] ] - score: 1 -Coalescing zero page register [ zp[2]:45 [ draw_window::q#0 ] ] with [ zp[2]:59 [ draw_window::$5 ] ] - score: 1 -Coalescing zero page register [ zp[2]:47 [ draw_window::$2 ] ] with [ zp[2]:49 [ draw_window::$29 ] ] - score: 1 -Coalescing zero page register [ zp[2]:55 [ draw_window::$4 ] ] with [ zp[2]:57 [ draw_window::$33 ] ] - score: 1 -Coalescing zero page register [ zp[2]:69 [ draw_window::$26 ] ] with [ zp[2]:71 [ draw_window::$35 ] ] - score: 1 -Coalescing zero page register [ zp[2]:75 [ draw_window::z#1 ] ] with [ zp[2]:81 [ draw_window::$20 ] ] - score: 1 -Coalescing zero page register [ zp[2]:77 [ draw_window::$19 ] ] with [ zp[2]:79 [ draw_window::$31 ] ] - score: 1 -Coalescing zero page register [ zp[2]:85 [ draw_window::$14 ] ] with [ zp[2]:87 [ draw_window::$27 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ draw_window::$15 ] ] with [ zp[2]:91 [ draw_window::$28 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] ] with [ zp[2]:31 [ textbox::$34 ] ] - score: 1 +Coalescing zero page register [ zp[2]:33 [ textbox::$9 ] ] with [ zp[2]:35 [ textbox::$32 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ draw_window::z#0 ] ] with [ zp[2]:55 [ draw_window::$3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:49 [ draw_window::q#0 ] ] with [ zp[2]:63 [ draw_window::$5 ] ] - score: 1 +Coalescing zero page register [ zp[2]:51 [ draw_window::$2 ] ] with [ zp[2]:53 [ draw_window::$29 ] ] - score: 1 +Coalescing zero page register [ zp[2]:59 [ draw_window::$4 ] ] with [ zp[2]:61 [ draw_window::$33 ] ] - score: 1 +Coalescing zero page register [ zp[2]:73 [ draw_window::$26 ] ] with [ zp[2]:75 [ draw_window::$35 ] ] - score: 1 +Coalescing zero page register [ zp[2]:79 [ draw_window::z#1 ] ] with [ zp[2]:85 [ draw_window::$20 ] ] - score: 1 +Coalescing zero page register [ zp[2]:81 [ draw_window::$19 ] ] with [ zp[2]:83 [ draw_window::$31 ] ] - score: 1 +Coalescing zero page register [ zp[2]:89 [ draw_window::$14 ] ] with [ zp[2]:91 [ draw_window::$27 ] ] - score: 1 +Coalescing zero page register [ zp[2]:93 [ draw_window::$15 ] ] with [ zp[2]:95 [ draw_window::$28 ] ] - score: 1 Coalescing zero page register [ zp[1]:2 [ main::x#2 main::x#1 textbox::x1#4 textbox::x1#0 ] ] with [ zp[1]:23 [ draw_window::x1#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:41 [ draw_window::z#0 draw_window::$3 ] ] with [ zp[2]:53 [ draw_window::$30 ] ] - score: 1 -Coalescing zero page register [ zp[2]:45 [ draw_window::q#0 draw_window::$5 ] ] with [ zp[2]:61 [ draw_window::$34 ] ] - score: 1 -Coalescing zero page register [ zp[2]:75 [ draw_window::z#1 draw_window::$20 ] ] with [ zp[2]:83 [ draw_window::$32 ] ] - score: 1 +Coalescing zero page register [ zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 textbox::$34 ] ] with [ zp[2]:27 [ textbox::$3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:45 [ draw_window::z#0 draw_window::$3 ] ] with [ zp[2]:57 [ draw_window::$30 ] ] - score: 1 +Coalescing zero page register [ zp[2]:49 [ draw_window::q#0 draw_window::$5 ] ] with [ zp[2]:65 [ draw_window::$34 ] ] - score: 1 +Coalescing zero page register [ zp[2]:79 [ draw_window::z#1 draw_window::$20 ] ] with [ zp[2]:87 [ draw_window::$32 ] ] - score: 1 Coalescing zero page register [ zp[2]:9 [ textbox::text#12 ] ] with [ zp[2]:3 [ main::wait#2 main::wait#1 ] ] Coalescing zero page register [ zp[1]:20 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 ] ] with [ zp[1]:11 [ textbox::i#2 textbox::i#1 ] ] -Coalescing zero page register [ zp[2]:41 [ draw_window::z#0 draw_window::$3 draw_window::$30 ] ] with [ zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] ] -Coalescing zero page register [ zp[2]:45 [ draw_window::q#0 draw_window::$5 draw_window::$34 ] ] with [ zp[2]:29 [ textbox::$8 textbox::$31 ] ] +Coalescing zero page register [ zp[2]:45 [ draw_window::z#0 draw_window::$3 draw_window::$30 ] ] with [ zp[2]:16 [ textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 textbox::$34 textbox::$3 ] ] +Coalescing zero page register [ zp[2]:49 [ draw_window::q#0 draw_window::$5 draw_window::$34 ] ] with [ zp[2]:29 [ textbox::$33 ] ] +Coalescing zero page register [ zp[2]:51 [ draw_window::$2 draw_window::$29 ] ] with [ zp[2]:33 [ textbox::$9 textbox::$32 ] ] Allocated (was zp[1]:6) zp[1]:3 [ textbox::y1#4 textbox::y1#0 textbox::y#5 textbox::y#1 textbox::y#12 textbox::y#11 textbox::y#0 textbox::y#2 draw_window::y1#0 ] Allocated (was zp[1]:7) zp[1]:4 [ textbox::x2#4 textbox::x2#0 draw_window::x2#0 ] Allocated (was zp[1]:8) zp[1]:5 [ textbox::y2#4 textbox::y2#0 draw_window::y2#0 ] Allocated (was zp[2]:9) zp[2]:6 [ textbox::text#12 main::wait#2 main::wait#1 ] Allocated (was zp[1]:14) zp[1]:8 [ textbox::x#5 textbox::x#15 textbox::x#10 textbox::x#7 textbox::x#0 textbox::x#12 textbox::x#1 ] Allocated (was zp[1]:20) zp[1]:9 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 textbox::i#2 textbox::i#1 ] -Allocated (was zp[1]:34) zp[1]:10 [ textbox::$17 ] -Allocated (was zp[2]:41) zp[2]:11 [ draw_window::z#0 draw_window::$3 draw_window::$30 textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] -Allocated (was zp[2]:45) zp[2]:13 [ draw_window::q#0 draw_window::$5 draw_window::$34 textbox::$8 textbox::$31 ] -Allocated (was zp[2]:47) zp[2]:15 [ draw_window::$2 draw_window::$29 ] -Allocated (was zp[2]:55) zp[2]:17 [ draw_window::$4 draw_window::$33 ] -Allocated (was zp[2]:67) zp[2]:19 [ draw_window::z#2 ] -Allocated (was zp[2]:69) zp[2]:21 [ draw_window::$26 draw_window::$35 ] -Allocated (was zp[2]:75) zp[2]:23 [ draw_window::z#1 draw_window::$20 draw_window::$32 ] -Allocated (was zp[2]:77) zp[2]:25 [ draw_window::$19 draw_window::$31 ] -Allocated (was zp[2]:85) zp[2]:27 [ draw_window::$14 draw_window::$27 ] -Allocated (was zp[2]:89) zp[2]:29 [ draw_window::$15 draw_window::$28 ] +Allocated (was zp[1]:38) zp[1]:10 [ textbox::$18 ] +Allocated (was zp[2]:45) zp[2]:11 [ draw_window::z#0 draw_window::$3 draw_window::$30 textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 textbox::$34 textbox::$3 ] +Allocated (was zp[2]:49) zp[2]:13 [ draw_window::q#0 draw_window::$5 draw_window::$34 textbox::$33 ] +Allocated (was zp[2]:51) zp[2]:15 [ draw_window::$2 draw_window::$29 textbox::$9 textbox::$32 ] +Allocated (was zp[2]:59) zp[2]:17 [ draw_window::$4 draw_window::$33 ] +Allocated (was zp[2]:71) zp[2]:19 [ draw_window::z#2 ] +Allocated (was zp[2]:73) zp[2]:21 [ draw_window::$26 draw_window::$35 ] +Allocated (was zp[2]:79) zp[2]:23 [ draw_window::z#1 draw_window::$20 draw_window::$32 ] +Allocated (was zp[2]:81) zp[2]:25 [ draw_window::$19 draw_window::$31 ] +Allocated (was zp[2]:89) zp[2]:27 [ draw_window::$14 draw_window::$27 ] +Allocated (was zp[2]:93) zp[2]:29 [ draw_window::$15 draw_window::$28 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -3494,7 +3502,7 @@ main: { jsr textbox // [20] phi from main::@2 to main::@4 [phi:main::@2->main::@4] __b4_from___b2: - // [20] phi (word) main::wait#2 = (byte) 0 [phi:main::@2->main::@4#0] -- vwuz1=vbuc1 + // [20] phi (word) main::wait#2 = (word) 0 [phi:main::@2->main::@4#0] -- vwuz1=vwuc1 lda #<0 sta.z wait lda #>0 @@ -3538,8 +3546,9 @@ main: { // textbox // textbox(byte zp(2) x1, byte zp(3) y1, byte zp(4) x2, byte zp(5) y2, byte* zp(6) text) textbox: { - .label __8 = $d - .label __17 = $a + .label __3 = $b + .label __9 = $f + .label __18 = $a .label x1 = 2 .label y1 = 3 .label x2 = 4 @@ -3549,7 +3558,9 @@ textbox: { .label z = $b .label i = 9 .label text = 6 - .label __31 = $d + .label __32 = $f + .label __33 = $d + .label __34 = $b // [25] (byte) draw_window::x1#0 ← (byte) textbox::x1#4 // [26] (byte) draw_window::y1#0 ← (byte) textbox::y1#4 // [27] (byte) draw_window::x2#0 ← (byte) textbox::x2#4 @@ -3565,74 +3576,86 @@ textbox: { ldy.z x1 iny sty.z x - // [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 -- vwuz1=_word_vbuz2 lda.z y - asl - asl - // [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z y - // [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 -- vwuz1=vbuaa_rol_3 - sta.z z + sta.z __3 lda #0 - sta.z z+1 + sta.z __3+1 + // [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 -- vwuz1=vwuz2_rol_2 + lda.z __3 + asl + sta.z __33 + lda.z __3+1 + rol + sta.z __33+1 + asl.z __33 + rol.z __33+1 + // [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 -- vwuz1=vwuz2_plus_vwuz1 + lda.z __34 + clc + adc.z __33 + sta.z __34 + lda.z __34+1 + adc.z __33+1 + sta.z __34+1 + // [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z z rol.z z+1 asl.z z rol.z z+1 asl.z z rol.z z+1 - // [35] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 + // [36] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 lda.z x cmp.z x2 beq __breturn jmp __b13 // textbox::@13 __b13: - // [36] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 + // [37] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 lda.z y cmp.z y2 beq __breturn - // [37] phi from textbox::@13 to textbox::@1 [phi:textbox::@13->textbox::@1] + // [38] phi from textbox::@13 to textbox::@1 [phi:textbox::@13->textbox::@1] __b1_from___b13: - // [37] phi (byte) textbox::y#12 = (byte) textbox::y#0 [phi:textbox::@13->textbox::@1#0] -- register_copy - // [37] phi (byte) textbox::i#2 = (byte) 0 [phi:textbox::@13->textbox::@1#1] -- vbuz1=vbuc1 + // [38] phi (byte) textbox::y#12 = (byte) textbox::y#0 [phi:textbox::@13->textbox::@1#0] -- register_copy + // [38] phi (byte) textbox::i#2 = (byte) 0 [phi:textbox::@13->textbox::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [37] phi (byte) textbox::x#10 = (byte) textbox::x#0 [phi:textbox::@13->textbox::@1#2] -- register_copy - // [37] phi (word) textbox::z#3 = (word) textbox::z#0 [phi:textbox::@13->textbox::@1#3] -- register_copy + // [38] phi (byte) textbox::x#10 = (byte) textbox::x#0 [phi:textbox::@13->textbox::@1#2] -- register_copy + // [38] phi (word) textbox::z#3 = (word) textbox::z#0 [phi:textbox::@13->textbox::@1#3] -- register_copy jmp __b1 - // [37] phi from textbox::@8 to textbox::@1 [phi:textbox::@8->textbox::@1] + // [38] phi from textbox::@8 to textbox::@1 [phi:textbox::@8->textbox::@1] __b1_from___b8: - // [37] phi (byte) textbox::y#12 = (byte) textbox::y#11 [phi:textbox::@8->textbox::@1#0] -- register_copy - // [37] phi (byte) textbox::i#2 = (byte) textbox::i#1 [phi:textbox::@8->textbox::@1#1] -- register_copy - // [37] phi (byte) textbox::x#10 = (byte) textbox::x#7 [phi:textbox::@8->textbox::@1#2] -- register_copy - // [37] phi (word) textbox::z#3 = (word) textbox::z#4 [phi:textbox::@8->textbox::@1#3] -- register_copy + // [38] phi (byte) textbox::y#12 = (byte) textbox::y#11 [phi:textbox::@8->textbox::@1#0] -- register_copy + // [38] phi (byte) textbox::i#2 = (byte) textbox::i#1 [phi:textbox::@8->textbox::@1#1] -- register_copy + // [38] phi (byte) textbox::x#10 = (byte) textbox::x#7 [phi:textbox::@8->textbox::@1#2] -- register_copy + // [38] phi (word) textbox::z#3 = (word) textbox::z#4 [phi:textbox::@8->textbox::@1#3] -- register_copy jmp __b1 // textbox::@1 __b1: - // [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 -- vwuz1=vwuz2_plus_vbuz3 + // [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 -- vwuz1=vwuz2_plus_vbuz3 lda.z x clc adc.z z - sta.z __8 + sta.z __9 lda #0 adc.z z+1 - sta.z __8+1 - // [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 -- pbuz1=pbuc1_plus_vwuz1 + sta.z __9+1 + // [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 -- pbuz1=pbuc1_plus_vwuz1 clc - lda.z __31 + lda.z __32 adc #screen - sta.z __31+1 - // [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -- _deref_pbuz1=pbuz2_derefidx_vbuz3 + sta.z __32+1 + // [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -- _deref_pbuz1=pbuz2_derefidx_vbuz3 ldy.z i lda (text),y ldy #0 - sta (__31),y - // [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 + sta (__32),y + // [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 ldy.z i lda (text),y cmp #$20 @@ -3640,99 +3663,99 @@ textbox: { jmp __b10 // textbox::@10 __b10: - // [42] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 -- vbuyy=vbuz1_plus_1 + // [43] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 -- vbuyy=vbuz1_plus_1 ldy.z i iny - // [43] phi from textbox::@10 to textbox::@3 [phi:textbox::@10->textbox::@3] + // [44] phi from textbox::@10 to textbox::@3 [phi:textbox::@10->textbox::@3] __b3_from___b10: - // [43] phi (byte) textbox::c#2 = (byte) 0 [phi:textbox::@10->textbox::@3#0] -- vbuxx=vbuc1 + // [44] phi (byte) textbox::c#2 = (byte) 0 [phi:textbox::@10->textbox::@3#0] -- vbuxx=vbuc1 ldx #0 - // [43] phi (byte) textbox::ls#2 = (byte) textbox::ls#0 [phi:textbox::@10->textbox::@3#1] -- register_copy + // [44] phi (byte) textbox::ls#2 = (byte) textbox::ls#0 [phi:textbox::@10->textbox::@3#1] -- register_copy jmp __b3 // textbox::@3 __b3: - // [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 + // [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 lda #$20 cmp (text),y beq __b5 jmp __b14 // textbox::@14 __b14: - // [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 -- pbuz1_derefidx_vbuyy_neq_0_then_la1 + // [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 -- pbuz1_derefidx_vbuyy_neq_0_then_la1 lda (text),y cmp #0 bne __b4 jmp __b5 // textbox::@5 __b5: - // [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 -- vbuyy=vbuxx_plus_vbuz1 + // [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 -- vbuyy=vbuxx_plus_vbuz1 txa clc adc.z x tay - // [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 -- vbuz1=vbuz2_minus_vbuz3 + // [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 -- vbuz1=vbuz2_minus_vbuz3 lda.z x2 sec sbc.z x1 - sta.z __17 - // [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@2 -- vbuyy_lt_vbuz1_then_la1 + sta.z __18 + // [49] if((byte~) textbox::$16<(byte) textbox::x2#4) goto textbox::@2 -- vbuyy_lt_vbuz1_then_la1 cpy.z x2 bcc __b2_from___b5 jmp __b15 // textbox::@15 __b15: - // [49] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@6 -- vbuxx_lt_vbuz1_then_la1 - cpx.z __17 + // [50] if((byte) textbox::c#2<(byte~) textbox::$18) goto textbox::@6 -- vbuxx_lt_vbuz1_then_la1 + cpx.z __18 bcc __b6 - // [50] phi from textbox::@15 to textbox::@2 [phi:textbox::@15->textbox::@2] + // [51] phi from textbox::@15 to textbox::@2 [phi:textbox::@15->textbox::@2] __b2_from___b15: jmp __b2 - // [50] phi from textbox::@1 textbox::@5 textbox::@7 to textbox::@2 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2] + // [51] phi from textbox::@1 textbox::@5 textbox::@7 to textbox::@2 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2] __b2_from___b1: __b2_from___b5: __b2_from___b7: - // [50] phi (word) textbox::z#5 = (word) textbox::z#3 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#0] -- register_copy - // [50] phi (byte) textbox::y#5 = (byte) textbox::y#12 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#1] -- register_copy - // [50] phi (byte) textbox::x#5 = (byte) textbox::x#10 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#2] -- register_copy + // [51] phi (word) textbox::z#5 = (word) textbox::z#3 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#0] -- register_copy + // [51] phi (byte) textbox::y#5 = (byte) textbox::y#12 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#1] -- register_copy + // [51] phi (byte) textbox::x#5 = (byte) textbox::x#10 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#2] -- register_copy jmp __b2 // textbox::@2 __b2: - // [51] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 -- vbuz1=_inc_vbuz1 + // [52] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [52] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 -- vbuz1=_inc_vbuz1 + // [53] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 -- vbuz1=_inc_vbuz1 inc.z x - // [53] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 -- vbuz1_neq_vbuz2_then_la1 + // [54] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 -- vbuz1_neq_vbuz2_then_la1 lda.z x cmp.z x2 bne __b8_from___b2 jmp __b11 // textbox::@11 __b11: - // [54] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [55] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z x1 iny sty.z x - // [55] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 -- vbuz1=_inc_vbuz1 + // [56] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 -- vbuz1=_inc_vbuz1 inc.z y - // [56] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 -- vbuz1_neq_vbuz2_then_la1 + // [57] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 -- vbuz1_neq_vbuz2_then_la1 lda.z y cmp.z y2 bne __b9 jmp __breturn // textbox::@return __breturn: - // [57] return + // [58] return rts // textbox::@9 __b9: - // [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y asl asl - // [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 -- vbuaa=vbuaa_plus_vbuz1 + // [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y - // [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z lda #0 sta.z z+1 @@ -3742,16 +3765,16 @@ textbox: { rol.z z+1 asl.z z rol.z z+1 - // [61] phi from textbox::@2 textbox::@9 to textbox::@8 [phi:textbox::@2/textbox::@9->textbox::@8] + // [62] phi from textbox::@2 textbox::@9 to textbox::@8 [phi:textbox::@2/textbox::@9->textbox::@8] __b8_from___b2: __b8_from___b9: - // [61] phi (byte) textbox::y#11 = (byte) textbox::y#5 [phi:textbox::@2/textbox::@9->textbox::@8#0] -- register_copy - // [61] phi (byte) textbox::x#7 = (byte) textbox::x#1 [phi:textbox::@2/textbox::@9->textbox::@8#1] -- register_copy - // [61] phi (word) textbox::z#4 = (word) textbox::z#5 [phi:textbox::@2/textbox::@9->textbox::@8#2] -- register_copy + // [62] phi (byte) textbox::y#11 = (byte) textbox::y#5 [phi:textbox::@2/textbox::@9->textbox::@8#0] -- register_copy + // [62] phi (byte) textbox::x#7 = (byte) textbox::x#1 [phi:textbox::@2/textbox::@9->textbox::@8#1] -- register_copy + // [62] phi (word) textbox::z#4 = (word) textbox::z#5 [phi:textbox::@2/textbox::@9->textbox::@8#2] -- register_copy jmp __b8 // textbox::@8 __b8: - // [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 + // [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 ldy.z i lda (text),y cmp #0 @@ -3759,23 +3782,23 @@ textbox: { jmp __breturn // textbox::@6 __b6: - // [63] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 -- vbuz1=_inc_vbuz1 + // [64] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 -- vbuz1=_inc_vbuz1 inc.z y - // [64] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 -- vbuz1_neq_vbuz2_then_la1 + // [65] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 -- vbuz1_neq_vbuz2_then_la1 lda.z y cmp.z y2 bne __b7 jmp __breturn // textbox::@7 __b7: - // [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y asl asl - // [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 -- vbuaa=vbuaa_plus_vbuz1 + // [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y - // [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z lda #0 sta.z z+1 @@ -3785,20 +3808,20 @@ textbox: { rol.z z+1 asl.z z rol.z z+1 - // [68] (byte) textbox::x#15 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 + // [69] (byte) textbox::x#15 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 lda.z x1 sta.z x jmp __b2_from___b7 // textbox::@4 __b4: - // [69] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 -- vbuyy=_inc_vbuyy + // [70] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 -- vbuyy=_inc_vbuyy iny - // [70] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 -- vbuxx=_inc_vbuxx + // [71] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 -- vbuxx=_inc_vbuxx inx - // [43] phi from textbox::@4 to textbox::@3 [phi:textbox::@4->textbox::@3] + // [44] phi from textbox::@4 to textbox::@3 [phi:textbox::@4->textbox::@3] __b3_from___b4: - // [43] phi (byte) textbox::c#2 = (byte) textbox::c#1 [phi:textbox::@4->textbox::@3#0] -- register_copy - // [43] phi (byte) textbox::ls#2 = (byte) textbox::ls#1 [phi:textbox::@4->textbox::@3#1] -- register_copy + // [44] phi (byte) textbox::c#2 = (byte) textbox::c#1 [phi:textbox::@4->textbox::@3#0] -- register_copy + // [44] phi (byte) textbox::ls#2 = (byte) textbox::ls#1 [phi:textbox::@4->textbox::@3#1] -- register_copy jmp __b3 } // draw_window @@ -3831,14 +3854,14 @@ draw_window: { .label __33 = $11 .label __34 = $d .label __35 = $15 - // [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y1 asl asl - // [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 -- vbuaa=vbuaa_plus_vbuz1 + // [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y1 - // [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z lda #0 sta.z z+1 @@ -3848,14 +3871,14 @@ draw_window: { rol.z z+1 asl.z z rol.z z+1 - // [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y2 asl asl - // [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 -- vbuaa=vbuaa_plus_vbuz1 + // [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y2 - // [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z q lda #0 sta.z q+1 @@ -3865,24 +3888,24 @@ draw_window: { rol.z q+1 asl.z q rol.z q+1 - // [77] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [78] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z x1 inx - // [78] phi from draw_window draw_window::@2 to draw_window::@1 [phi:draw_window/draw_window::@2->draw_window::@1] + // [79] phi from draw_window draw_window::@2 to draw_window::@1 [phi:draw_window/draw_window::@2->draw_window::@1] __b1_from_draw_window: __b1_from___b2: - // [78] phi (byte) draw_window::x#2 = (byte) draw_window::x#0 [phi:draw_window/draw_window::@2->draw_window::@1#0] -- register_copy + // [79] phi (byte) draw_window::x#2 = (byte) draw_window::x#0 [phi:draw_window/draw_window::@2->draw_window::@1#0] -- register_copy jmp __b1 // draw horizontal lines // draw_window::@1 __b1: - // [79] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 -- vbuxx_lt_vbuz1_then_la1 + // [80] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 -- vbuxx_lt_vbuz1_then_la1 cpx.z x2 bcc __b2 jmp __b3 // draw_window::@3 __b3: - // [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z z @@ -3890,7 +3913,7 @@ draw_window: { lda #0 adc.z z+1 sta.z __2+1 - // [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 -- pbuz1=pbuc1_plus_vwuz1 + // [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __29 adc #screen sta.z __29+1 - // [82] *((byte*~) draw_window::$29) ← (byte) $55 -- _deref_pbuz1=vbuc1 + // [83] *((byte*~) draw_window::$29) ← (byte) $55 -- _deref_pbuz1=vbuc1 // draw upper corners lda #$55 ldy #0 sta (__29),y - // [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 + // [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z x2 clc adc.z __3 @@ -3911,7 +3934,7 @@ draw_window: { bcc !+ inc.z __3+1 !: - // [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 -- pbuz1=pbuc1_plus_vwuz1 + // [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __30 adc #screen sta.z __30+1 - // [85] *((byte*~) draw_window::$30) ← (byte) $49 -- _deref_pbuz1=vbuc1 + // [86] *((byte*~) draw_window::$30) ← (byte) $49 -- _deref_pbuz1=vbuc1 lda #$49 ldy #0 sta (__30),y - // [86] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [87] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z y1 inx - // [87] phi from draw_window::@3 draw_window::@5 to draw_window::@4 [phi:draw_window::@3/draw_window::@5->draw_window::@4] + // [88] phi from draw_window::@3 draw_window::@5 to draw_window::@4 [phi:draw_window::@3/draw_window::@5->draw_window::@4] __b4_from___b3: __b4_from___b5: - // [87] phi (byte) draw_window::y#2 = (byte) draw_window::y#0 [phi:draw_window::@3/draw_window::@5->draw_window::@4#0] -- register_copy + // [88] phi (byte) draw_window::y#2 = (byte) draw_window::y#0 [phi:draw_window::@3/draw_window::@5->draw_window::@4#0] -- register_copy jmp __b4 // draw vertical lines // draw_window::@4 __b4: - // [88] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 -- vbuxx_lt_vbuz1_then_la1 + // [89] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 -- vbuxx_lt_vbuz1_then_la1 cpx.z y2 bcc __b5 jmp __b6 // draw_window::@6 __b6: - // [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z q @@ -3948,7 +3971,7 @@ draw_window: { lda #0 adc.z q+1 sta.z __4+1 - // [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 -- pbuz1=pbuc1_plus_vwuz1 + // [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __33 adc #screen sta.z __33+1 - // [91] *((byte*~) draw_window::$33) ← (byte) $4a -- _deref_pbuz1=vbuc1 + // [92] *((byte*~) draw_window::$33) ← (byte) $4a -- _deref_pbuz1=vbuc1 // draw lower corners lda #$4a ldy #0 sta (__33),y - // [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 + // [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z x2 clc adc.z __5 @@ -3969,7 +3992,7 @@ draw_window: { bcc !+ inc.z __5+1 !: - // [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 -- pbuz1=pbuc1_plus_vwuz1 + // [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __34 adc #screen sta.z __34+1 - // [94] *((byte*~) draw_window::$34) ← (byte) $4b -- _deref_pbuz1=vbuc1 + // [95] *((byte*~) draw_window::$34) ← (byte) $4b -- _deref_pbuz1=vbuc1 lda #$4b ldy #0 sta (__34),y - // [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 -- vbuxx=vbuz1_minus_vbuz2 + // [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 -- vbuxx=vbuz1_minus_vbuz2 lda.z x2 sec sbc.z x1 tax - // [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 -- vbuaa=vbuz1_minus_vbuz2 + // [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 -- vbuaa=vbuz1_minus_vbuz2 lda.z y2 sec sbc.z y1 - // [97] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return -- vbuxx_lt_vbuc1_then_la1 + // [98] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return -- vbuxx_lt_vbuc1_then_la1 cpx #1+1 bcc __breturn jmp __b13 // draw_window::@13 __b13: - // [98] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 -- vbuaa_ge_vbuc1_then_la1 + // [99] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 -- vbuaa_ge_vbuc1_then_la1 cmp #1+1 bcs __b7 jmp __breturn // draw_window::@return __breturn: - // [99] return + // [100] return rts // draw_window::@7 __b7: - // [100] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [101] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z y1 iny sty.z y3 - // [101] phi from draw_window::@12 draw_window::@7 to draw_window::@8 [phi:draw_window::@12/draw_window::@7->draw_window::@8] + // [102] phi from draw_window::@12 draw_window::@7 to draw_window::@8 [phi:draw_window::@12/draw_window::@7->draw_window::@8] __b8_from___b12: __b8_from___b7: - // [101] phi (byte) draw_window::y3#2 = (byte) draw_window::y3#1 [phi:draw_window::@12/draw_window::@7->draw_window::@8#0] -- register_copy + // [102] phi (byte) draw_window::y3#2 = (byte) draw_window::y3#1 [phi:draw_window::@12/draw_window::@7->draw_window::@8#0] -- register_copy jmp __b8 // blank inside // draw_window::@8 __b8: - // [102] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 -- vbuz1_lt_vbuz2_then_la1 + // [103] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 -- vbuz1_lt_vbuz2_then_la1 lda.z y3 cmp.z y2 bcc __b9 jmp __breturn // draw_window::@9 __b9: - // [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y3 asl asl - // [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 -- vbuaa=vbuaa_plus_vbuz1 + // [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y3 - // [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z_2 lda #0 sta.z z_2+1 @@ -4042,28 +4065,28 @@ draw_window: { rol.z z_2+1 asl.z z_2 rol.z z_2+1 - // [106] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [107] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z x1 inx - // [107] phi from draw_window::@11 draw_window::@9 to draw_window::@10 [phi:draw_window::@11/draw_window::@9->draw_window::@10] + // [108] phi from draw_window::@11 draw_window::@9 to draw_window::@10 [phi:draw_window::@11/draw_window::@9->draw_window::@10] __b10_from___b11: __b10_from___b9: - // [107] phi (byte) draw_window::x3#2 = (byte) draw_window::x3#1 [phi:draw_window::@11/draw_window::@9->draw_window::@10#0] -- register_copy + // [108] phi (byte) draw_window::x3#2 = (byte) draw_window::x3#1 [phi:draw_window::@11/draw_window::@9->draw_window::@10#0] -- register_copy jmp __b10 // draw_window::@10 __b10: - // [108] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 -- vbuxx_lt_vbuz1_then_la1 + // [109] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 -- vbuxx_lt_vbuz1_then_la1 cpx.z x2 bcc __b11 jmp __b12 // draw_window::@12 __b12: - // [109] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 -- vbuz1=_inc_vbuz1 + // [110] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 -- vbuz1=_inc_vbuz1 inc.z y3 jmp __b8_from___b12 // draw_window::@11 __b11: - // [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 -- vwuz1=vwuz2_plus_vbuxx + // [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 -- vwuz1=vwuz2_plus_vbuxx txa clc adc.z z_2 @@ -4071,7 +4094,7 @@ draw_window: { lda #0 adc.z z_2+1 sta.z __26+1 - // [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 -- pbuz1=pbuc1_plus_vwuz1 + // [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __35 adc #screen sta.z __35+1 - // [112] *((byte*~) draw_window::$35) ← (byte) $20 -- _deref_pbuz1=vbuc1 + // [113] *((byte*~) draw_window::$35) ← (byte) $20 -- _deref_pbuz1=vbuc1 lda #$20 ldy #0 sta (__35),y - // [113] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 -- vbuxx=_inc_vbuxx + // [114] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 -- vbuxx=_inc_vbuxx inx jmp __b10_from___b11 // draw_window::@5 __b5: - // [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 -- vbuaa=vbuaa_plus_vbuxx + // [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 -- vbuaa=vbuaa_plus_vbuxx stx.z $ff clc adc.z $ff - // [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z_1 lda #0 sta.z z_1+1 @@ -4106,7 +4129,7 @@ draw_window: { rol.z z_1+1 asl.z z_1 rol.z z_1+1 - // [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z z_1 @@ -4114,7 +4137,7 @@ draw_window: { lda #0 adc.z z_1+1 sta.z __19+1 - // [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 -- pbuz1=pbuc1_plus_vwuz1 + // [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __31 adc #screen sta.z __31+1 - // [119] *((byte*~) draw_window::$31) ← (byte) $42 -- _deref_pbuz1=vbuc1 + // [120] *((byte*~) draw_window::$31) ← (byte) $42 -- _deref_pbuz1=vbuc1 lda #$42 ldy #0 sta (__31),y - // [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 + // [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z x2 clc adc.z __20 @@ -4134,7 +4157,7 @@ draw_window: { bcc !+ inc.z __20+1 !: - // [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 -- pbuz1=pbuc1_plus_vwuz1 + // [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __32 adc #screen sta.z __32+1 - // [122] *((byte*~) draw_window::$32) ← (byte) $42 -- _deref_pbuz1=vbuc1 + // [123] *((byte*~) draw_window::$32) ← (byte) $42 -- _deref_pbuz1=vbuc1 lda #$42 ldy #0 sta (__32),y - // [123] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 -- vbuxx=_inc_vbuxx + // [124] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 -- vbuxx=_inc_vbuxx inx jmp __b4_from___b5 // draw_window::@2 __b2: - // [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx + // [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx txa clc adc.z z @@ -4159,7 +4182,7 @@ draw_window: { lda #0 adc.z z+1 sta.z __14+1 - // [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 -- pbuz1=pbuc1_plus_vwuz1 + // [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __27 adc #screen sta.z __27+1 - // [126] *((byte*~) draw_window::$27) ← (byte) $43 -- _deref_pbuz1=vbuc1 + // [127] *((byte*~) draw_window::$27) ← (byte) $43 -- _deref_pbuz1=vbuc1 lda #$43 ldy #0 sta (__27),y - // [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx + // [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx txa clc adc.z q @@ -4179,7 +4202,7 @@ draw_window: { lda #0 adc.z q+1 sta.z __15+1 - // [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 -- pbuz1=pbuc1_plus_vwuz1 + // [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __28 adc #screen sta.z __28+1 - // [129] *((byte*~) draw_window::$28) ← (byte) $43 -- _deref_pbuz1=vbuc1 + // [130] *((byte*~) draw_window::$28) ← (byte) $43 -- _deref_pbuz1=vbuc1 lda #$43 ldy #0 sta (__28),y - // [130] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 -- vbuxx=_inc_vbuxx + // [131] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 -- vbuxx=_inc_vbuxx inx jmp __b1_from___b2 } @@ -4318,9 +4341,9 @@ Removing instruction ldy.z i Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b1: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [214] bne __b1 to beq -Fixing long branch [309] bcc __b2 to bcs -Fixing long branch [352] bcc __b5 to bcs +Fixing long branch [228] bne __b1 to beq +Fixing long branch [323] bcc __b2 to bcs +Fixing long branch [366] bcc __b5 to bcs FINAL SYMBOL TABLE (label) @1 @@ -4420,16 +4443,17 @@ FINAL SYMBOL TABLE (const byte*) text[] = (string) "this is a small test with word wrap, if a word is too long it moves it to the next line. isn't that supercalifragilisticexpialidocious? i think it's cool!" (const byte*) text2[] = (string) "textbox by scan of desire" (void()) textbox((byte) textbox::x1 , (byte) textbox::y1 , (byte) textbox::x2 , (byte) textbox::y2 , (byte*) textbox::text) -(byte~) textbox::$15 reg byte y 101.0 -(byte~) textbox::$17 zp[1]:10 101.0 -(byte*~) textbox::$31 zp[2]:13 202.0 -(byte~) textbox::$32 reg byte a 4.0 -(byte~) textbox::$33 reg byte a 4.0 -(byte~) textbox::$35 reg byte a 202.0 +(byte~) textbox::$16 reg byte y 101.0 +(byte~) textbox::$18 zp[1]:10 101.0 +(word~) textbox::$3 zp[2]:11 3.0 +(byte*~) textbox::$32 zp[2]:15 202.0 +(word~) textbox::$33 zp[2]:13 4.0 +(word~) textbox::$34 zp[2]:11 4.0 (byte~) textbox::$36 reg byte a 202.0 -(byte~) textbox::$38 reg byte a 202.0 +(byte~) textbox::$37 reg byte a 202.0 (byte~) textbox::$39 reg byte a 202.0 -(word~) textbox::$8 zp[2]:13 202.0 +(byte~) textbox::$40 reg byte a 202.0 +(word~) textbox::$9 zp[2]:15 202.0 (label) textbox::@1 (label) textbox::@10 (label) textbox::@11 @@ -4457,9 +4481,9 @@ FINAL SYMBOL TABLE (byte) textbox::ls#1 reg byte y 1001.0 (byte) textbox::ls#2 reg byte y 1368.3333333333335 (byte*) textbox::text -(byte*) textbox::text#12 text zp[2]:6 50.108695652173914 +(byte*) textbox::text#12 text zp[2]:6 49.04255319148936 (byte) textbox::x -(byte) textbox::x#0 x zp[1]:8 1.0 +(byte) textbox::x#0 x zp[1]:8 0.8571428571428571 (byte) textbox::x#1 x zp[1]:8 151.5 (byte) textbox::x#10 x zp[1]:8 36.214285714285715 (byte) textbox::x#12 x zp[1]:8 33.666666666666664 @@ -4468,12 +4492,12 @@ FINAL SYMBOL TABLE (byte) textbox::x#7 x zp[1]:8 151.5 (byte) textbox::x1 (byte) textbox::x1#0 x1 zp[1]:2 11.0 -(byte) textbox::x1#4 x1 zp[1]:2 6.913043478260869 +(byte) textbox::x1#4 x1 zp[1]:2 6.76595744680851 (byte) textbox::x2 (byte) textbox::x2#0 x2 zp[1]:4 5.5 -(byte) textbox::x2#4 x2 zp[1]:4 6.913043478260869 +(byte) textbox::x2#4 x2 zp[1]:4 6.76595744680851 (byte) textbox::y -(byte) textbox::y#0 y zp[1]:3 1.4285714285714284 +(byte) textbox::y#0 y zp[1]:3 0.75 (byte) textbox::y#1 y zp[1]:3 84.16666666666666 (byte) textbox::y#11 y zp[1]:3 151.5 (byte) textbox::y#12 y zp[1]:3 27.06666666666667 @@ -4484,7 +4508,7 @@ FINAL SYMBOL TABLE (byte) textbox::y1#4 y1 zp[1]:3 2.5 (byte) textbox::y2 (byte) textbox::y2#0 y2 zp[1]:5 7.333333333333333 -(byte) textbox::y2#4 y2 zp[1]:5 4.717391304347826 +(byte) textbox::y2#4 y2 zp[1]:5 4.617021276595745 (word) textbox::z (word) textbox::z#0 z zp[2]:11 1.3333333333333333 (word) textbox::z#1 z zp[2]:11 101.0 @@ -4506,21 +4530,19 @@ reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp[1]:9 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 textbox::i#2 textbox::i#1 ] reg byte x [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] reg byte a [ main::$4 ] -reg byte a [ textbox::$32 ] -reg byte a [ textbox::$33 ] -reg byte y [ textbox::$15 ] -zp[1]:10 [ textbox::$17 ] -reg byte a [ textbox::$38 ] +reg byte y [ textbox::$16 ] +zp[1]:10 [ textbox::$18 ] reg byte a [ textbox::$39 ] -reg byte a [ textbox::$35 ] +reg byte a [ textbox::$40 ] reg byte a [ textbox::$36 ] +reg byte a [ textbox::$37 ] reg byte a [ draw_window::$36 ] reg byte a [ draw_window::$37 ] -zp[2]:11 [ draw_window::z#0 draw_window::$3 draw_window::$30 textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] +zp[2]:11 [ draw_window::z#0 draw_window::$3 draw_window::$30 textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 textbox::$34 textbox::$3 ] reg byte a [ draw_window::$39 ] reg byte a [ draw_window::$40 ] -zp[2]:13 [ draw_window::q#0 draw_window::$5 draw_window::$34 textbox::$8 textbox::$31 ] -zp[2]:15 [ draw_window::$2 draw_window::$29 ] +zp[2]:13 [ draw_window::q#0 draw_window::$5 draw_window::$34 textbox::$33 ] +zp[2]:15 [ draw_window::$2 draw_window::$29 textbox::$9 textbox::$32 ] zp[2]:17 [ draw_window::$4 draw_window::$33 ] reg byte x [ draw_window::$6 ] reg byte a [ draw_window::$8 ] @@ -4537,7 +4559,7 @@ zp[2]:29 [ draw_window::$15 draw_window::$28 ] FINAL ASSEMBLER -Score: 154193 +Score: 154230 // File Comments /* Textbox routine with word wrap for KickC by Scan/Desire */ @@ -4673,7 +4695,7 @@ main: { // [24] phi (byte) textbox::x1#4 = (byte) textbox::x1#0 [phi:main::@2->textbox#4] -- register_copy jsr textbox // [20] phi from main::@2 to main::@4 [phi:main::@2->main::@4] - // [20] phi (word) main::wait#2 = (byte) 0 [phi:main::@2->main::@4#0] -- vwuz1=vbuc1 + // [20] phi (word) main::wait#2 = (word) 0 [phi:main::@2->main::@4#0] -- vwuz1=vwuc1 lda #<0 sta.z wait sta.z wait+1 @@ -4714,8 +4736,9 @@ main: { // textbox // textbox(byte zp(2) x1, byte zp(3) y1, byte zp(4) x2, byte zp(5) y2, byte* zp(6) text) textbox: { - .label __8 = $d - .label __17 = $a + .label __3 = $b + .label __9 = $f + .label __18 = $a .label x1 = 2 .label y1 = 3 .label x2 = 4 @@ -4725,7 +4748,9 @@ textbox: { .label z = $b .label i = 9 .label text = 6 - .label __31 = $d + .label __32 = $f + .label __33 = $d + .label __34 = $b // draw_window(x1, y1, x2, y2) // [25] (byte) draw_window::x1#0 ← (byte) textbox::x1#4 // [26] (byte) draw_window::y1#0 ← (byte) textbox::y1#4 @@ -4742,18 +4767,31 @@ textbox: { ldy.z x1 iny sty.z x - // z = y*40 - // [32] (byte~) textbox::$32 ← (byte) textbox::y#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // (word)y + // [32] (word~) textbox::$3 ← (word)(byte) textbox::y#0 -- vwuz1=_word_vbuz2 lda.z y - asl - asl - // [33] (byte~) textbox::$33 ← (byte~) textbox::$32 + (byte) textbox::y#0 -- vbuaa=vbuaa_plus_vbuz1 - clc - adc.z y - // [34] (word) textbox::z#0 ← (byte~) textbox::$33 << (byte) 3 -- vwuz1=vbuaa_rol_3 - sta.z z + sta.z __3 lda #0 - sta.z z+1 + sta.z __3+1 + // z = (word)y*40 + // [33] (word~) textbox::$33 ← (word~) textbox::$3 << (byte) 2 -- vwuz1=vwuz2_rol_2 + lda.z __3 + asl + sta.z __33 + lda.z __3+1 + rol + sta.z __33+1 + asl.z __33 + rol.z __33+1 + // [34] (word~) textbox::$34 ← (word~) textbox::$33 + (word~) textbox::$3 -- vwuz1=vwuz2_plus_vwuz1 + lda.z __34 + clc + adc.z __33 + sta.z __34 + lda.z __34+1 + adc.z __33+1 + sta.z __34+1 + // [35] (word) textbox::z#0 ← (word~) textbox::$34 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z z rol.z z+1 asl.z z @@ -4761,148 +4799,148 @@ textbox: { asl.z z rol.z z+1 // if (x == x2 || y == y2) - // [35] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 + // [36] if((byte) textbox::x#0==(byte) textbox::x2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 tya cmp.z x2 beq __breturn // textbox::@13 - // [36] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 + // [37] if((byte) textbox::y#0==(byte) textbox::y2#4) goto textbox::@return -- vbuz1_eq_vbuz2_then_la1 lda.z y cmp.z y2 beq __breturn - // [37] phi from textbox::@13 to textbox::@1 [phi:textbox::@13->textbox::@1] - // [37] phi (byte) textbox::y#12 = (byte) textbox::y#0 [phi:textbox::@13->textbox::@1#0] -- register_copy - // [37] phi (byte) textbox::i#2 = (byte) 0 [phi:textbox::@13->textbox::@1#1] -- vbuz1=vbuc1 + // [38] phi from textbox::@13 to textbox::@1 [phi:textbox::@13->textbox::@1] + // [38] phi (byte) textbox::y#12 = (byte) textbox::y#0 [phi:textbox::@13->textbox::@1#0] -- register_copy + // [38] phi (byte) textbox::i#2 = (byte) 0 [phi:textbox::@13->textbox::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [37] phi (byte) textbox::x#10 = (byte) textbox::x#0 [phi:textbox::@13->textbox::@1#2] -- register_copy - // [37] phi (word) textbox::z#3 = (word) textbox::z#0 [phi:textbox::@13->textbox::@1#3] -- register_copy - // [37] phi from textbox::@8 to textbox::@1 [phi:textbox::@8->textbox::@1] - // [37] phi (byte) textbox::y#12 = (byte) textbox::y#11 [phi:textbox::@8->textbox::@1#0] -- register_copy - // [37] phi (byte) textbox::i#2 = (byte) textbox::i#1 [phi:textbox::@8->textbox::@1#1] -- register_copy - // [37] phi (byte) textbox::x#10 = (byte) textbox::x#7 [phi:textbox::@8->textbox::@1#2] -- register_copy - // [37] phi (word) textbox::z#3 = (word) textbox::z#4 [phi:textbox::@8->textbox::@1#3] -- register_copy + // [38] phi (byte) textbox::x#10 = (byte) textbox::x#0 [phi:textbox::@13->textbox::@1#2] -- register_copy + // [38] phi (word) textbox::z#3 = (word) textbox::z#0 [phi:textbox::@13->textbox::@1#3] -- register_copy + // [38] phi from textbox::@8 to textbox::@1 [phi:textbox::@8->textbox::@1] + // [38] phi (byte) textbox::y#12 = (byte) textbox::y#11 [phi:textbox::@8->textbox::@1#0] -- register_copy + // [38] phi (byte) textbox::i#2 = (byte) textbox::i#1 [phi:textbox::@8->textbox::@1#1] -- register_copy + // [38] phi (byte) textbox::x#10 = (byte) textbox::x#7 [phi:textbox::@8->textbox::@1#2] -- register_copy + // [38] phi (word) textbox::z#3 = (word) textbox::z#4 [phi:textbox::@8->textbox::@1#3] -- register_copy // textbox::@1 __b1: // z+x - // [38] (word~) textbox::$8 ← (word) textbox::z#3 + (byte) textbox::x#10 -- vwuz1=vwuz2_plus_vbuz3 + // [39] (word~) textbox::$9 ← (word) textbox::z#3 + (byte) textbox::x#10 -- vwuz1=vwuz2_plus_vbuz3 lda.z x clc adc.z z - sta.z __8 + sta.z __9 lda #0 adc.z z+1 - sta.z __8+1 + sta.z __9+1 // screen[z+x] = text[i] - // [39] (byte*~) textbox::$31 ← (const byte*) screen + (word~) textbox::$8 -- pbuz1=pbuc1_plus_vwuz1 + // [40] (byte*~) textbox::$32 ← (const byte*) screen + (word~) textbox::$9 -- pbuz1=pbuc1_plus_vwuz1 clc - lda.z __31 + lda.z __32 adc #screen - sta.z __31+1 - // [40] *((byte*~) textbox::$31) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -- _deref_pbuz1=pbuz2_derefidx_vbuz3 + sta.z __32+1 + // [41] *((byte*~) textbox::$32) ← *((byte*) textbox::text#12 + (byte) textbox::i#2) -- _deref_pbuz1=pbuz2_derefidx_vbuz3 ldy.z i lda (text),y ldy #0 - sta (__31),y + sta (__32),y // if (text[i] == $20) - // [41] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 + // [42] if(*((byte*) textbox::text#12 + (byte) textbox::i#2)!=(byte) $20) goto textbox::@2 -- pbuz1_derefidx_vbuz2_neq_vbuc1_then_la1 ldy.z i lda (text),y cmp #$20 bne __b2 // textbox::@10 // ls = i+1 - // [42] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 -- vbuyy=vbuz1_plus_1 + // [43] (byte) textbox::ls#0 ← (byte) textbox::i#2 + (byte) 1 -- vbuyy=vbuz1_plus_1 iny - // [43] phi from textbox::@10 to textbox::@3 [phi:textbox::@10->textbox::@3] - // [43] phi (byte) textbox::c#2 = (byte) 0 [phi:textbox::@10->textbox::@3#0] -- vbuxx=vbuc1 + // [44] phi from textbox::@10 to textbox::@3 [phi:textbox::@10->textbox::@3] + // [44] phi (byte) textbox::c#2 = (byte) 0 [phi:textbox::@10->textbox::@3#0] -- vbuxx=vbuc1 ldx #0 - // [43] phi (byte) textbox::ls#2 = (byte) textbox::ls#0 [phi:textbox::@10->textbox::@3#1] -- register_copy + // [44] phi (byte) textbox::ls#2 = (byte) textbox::ls#0 [phi:textbox::@10->textbox::@3#1] -- register_copy // textbox::@3 __b3: // while (text[ls] != $20 && text[ls] != $00) - // [44] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 + // [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)==(byte) $20) goto textbox::@5 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1 lda #$20 cmp (text),y beq __b5 // textbox::@14 - // [45] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 -- pbuz1_derefidx_vbuyy_neq_0_then_la1 + // [46] if(*((byte*) textbox::text#12 + (byte) textbox::ls#2)!=(byte) 0) goto textbox::@4 -- pbuz1_derefidx_vbuyy_neq_0_then_la1 lda (text),y cmp #0 bne __b4 // textbox::@5 __b5: // c+x - // [46] (byte~) textbox::$15 ← (byte) textbox::c#2 + (byte) textbox::x#10 -- vbuyy=vbuxx_plus_vbuz1 + // [47] (byte~) textbox::$16 ← (byte) textbox::c#2 + (byte) textbox::x#10 -- vbuyy=vbuxx_plus_vbuz1 txa clc adc.z x tay // x2-x1 - // [47] (byte~) textbox::$17 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 -- vbuz1=vbuz2_minus_vbuz3 + // [48] (byte~) textbox::$18 ← (byte) textbox::x2#4 - (byte) textbox::x1#4 -- vbuz1=vbuz2_minus_vbuz3 lda.z x2 sec sbc.z x1 - sta.z __17 + sta.z __18 // if (c+x >= x2 && c < x2-x1) - // [48] if((byte~) textbox::$15<(byte) textbox::x2#4) goto textbox::@2 -- vbuyy_lt_vbuz1_then_la1 + // [49] if((byte~) textbox::$16<(byte) textbox::x2#4) goto textbox::@2 -- vbuyy_lt_vbuz1_then_la1 cpy.z x2 bcc __b2 // textbox::@15 - // [49] if((byte) textbox::c#2<(byte~) textbox::$17) goto textbox::@6 -- vbuxx_lt_vbuz1_then_la1 - cpx.z __17 + // [50] if((byte) textbox::c#2<(byte~) textbox::$18) goto textbox::@6 -- vbuxx_lt_vbuz1_then_la1 + cpx.z __18 bcc __b6 - // [50] phi from textbox::@15 to textbox::@2 [phi:textbox::@15->textbox::@2] - // [50] phi from textbox::@1 textbox::@5 textbox::@7 to textbox::@2 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2] - // [50] phi (word) textbox::z#5 = (word) textbox::z#3 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#0] -- register_copy - // [50] phi (byte) textbox::y#5 = (byte) textbox::y#12 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#1] -- register_copy - // [50] phi (byte) textbox::x#5 = (byte) textbox::x#10 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#2] -- register_copy + // [51] phi from textbox::@15 to textbox::@2 [phi:textbox::@15->textbox::@2] + // [51] phi from textbox::@1 textbox::@5 textbox::@7 to textbox::@2 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2] + // [51] phi (word) textbox::z#5 = (word) textbox::z#3 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#0] -- register_copy + // [51] phi (byte) textbox::y#5 = (byte) textbox::y#12 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#1] -- register_copy + // [51] phi (byte) textbox::x#5 = (byte) textbox::x#10 [phi:textbox::@1/textbox::@5/textbox::@7->textbox::@2#2] -- register_copy // textbox::@2 __b2: // i++; - // [51] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 -- vbuz1=_inc_vbuz1 + // [52] (byte) textbox::i#1 ← ++ (byte) textbox::i#2 -- vbuz1=_inc_vbuz1 inc.z i // x++; - // [52] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 -- vbuz1=_inc_vbuz1 + // [53] (byte) textbox::x#1 ← ++ (byte) textbox::x#5 -- vbuz1=_inc_vbuz1 inc.z x // if (x == x2) - // [53] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 -- vbuz1_neq_vbuz2_then_la1 + // [54] if((byte) textbox::x#1!=(byte) textbox::x2#4) goto textbox::@8 -- vbuz1_neq_vbuz2_then_la1 lda.z x cmp.z x2 bne __b8 // textbox::@11 // x = x1+1 - // [54] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [55] (byte) textbox::x#12 ← (byte) textbox::x1#4 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z x1 iny sty.z x // y++; - // [55] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 -- vbuz1=_inc_vbuz1 + // [56] (byte) textbox::y#2 ← ++ (byte) textbox::y#5 -- vbuz1=_inc_vbuz1 inc.z y // if (y == y2) - // [56] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 -- vbuz1_neq_vbuz2_then_la1 + // [57] if((byte) textbox::y#2!=(byte) textbox::y2#4) goto textbox::@9 -- vbuz1_neq_vbuz2_then_la1 lda.z y cmp.z y2 bne __b9 // textbox::@return __breturn: // } - // [57] return + // [58] return rts // textbox::@9 __b9: // z = y*40 - // [58] (byte~) textbox::$38 ← (byte) textbox::y#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [59] (byte~) textbox::$39 ← (byte) textbox::y#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y asl asl - // [59] (byte~) textbox::$39 ← (byte~) textbox::$38 + (byte) textbox::y#2 -- vbuaa=vbuaa_plus_vbuz1 + // [60] (byte~) textbox::$40 ← (byte~) textbox::$39 + (byte) textbox::y#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y - // [60] (word) textbox::z#2 ← (byte~) textbox::$39 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [61] (word) textbox::z#2 ← (byte~) textbox::$40 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z lda #0 sta.z z+1 @@ -4912,14 +4950,14 @@ textbox: { rol.z z+1 asl.z z rol.z z+1 - // [61] phi from textbox::@2 textbox::@9 to textbox::@8 [phi:textbox::@2/textbox::@9->textbox::@8] - // [61] phi (byte) textbox::y#11 = (byte) textbox::y#5 [phi:textbox::@2/textbox::@9->textbox::@8#0] -- register_copy - // [61] phi (byte) textbox::x#7 = (byte) textbox::x#1 [phi:textbox::@2/textbox::@9->textbox::@8#1] -- register_copy - // [61] phi (word) textbox::z#4 = (word) textbox::z#5 [phi:textbox::@2/textbox::@9->textbox::@8#2] -- register_copy + // [62] phi from textbox::@2 textbox::@9 to textbox::@8 [phi:textbox::@2/textbox::@9->textbox::@8] + // [62] phi (byte) textbox::y#11 = (byte) textbox::y#5 [phi:textbox::@2/textbox::@9->textbox::@8#0] -- register_copy + // [62] phi (byte) textbox::x#7 = (byte) textbox::x#1 [phi:textbox::@2/textbox::@9->textbox::@8#1] -- register_copy + // [62] phi (word) textbox::z#4 = (word) textbox::z#5 [phi:textbox::@2/textbox::@9->textbox::@8#2] -- register_copy // textbox::@8 __b8: // while (text[i] != 0) - // [62] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 + // [63] if(*((byte*) textbox::text#12 + (byte) textbox::i#1)!=(byte) 0) goto textbox::@1 -- pbuz1_derefidx_vbuz2_neq_0_then_la1 ldy.z i lda (text),y cmp #0 @@ -4930,10 +4968,10 @@ textbox: { // textbox::@6 __b6: // y++; - // [63] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 -- vbuz1=_inc_vbuz1 + // [64] (byte) textbox::y#1 ← ++ (byte) textbox::y#12 -- vbuz1=_inc_vbuz1 inc.z y // if (y == y2) - // [64] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 -- vbuz1_neq_vbuz2_then_la1 + // [65] if((byte) textbox::y#1!=(byte) textbox::y2#4) goto textbox::@7 -- vbuz1_neq_vbuz2_then_la1 lda.z y cmp.z y2 bne __b7 @@ -4941,14 +4979,14 @@ textbox: { // textbox::@7 __b7: // z = y*40 - // [65] (byte~) textbox::$35 ← (byte) textbox::y#1 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [66] (byte~) textbox::$36 ← (byte) textbox::y#1 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y asl asl - // [66] (byte~) textbox::$36 ← (byte~) textbox::$35 + (byte) textbox::y#1 -- vbuaa=vbuaa_plus_vbuz1 + // [67] (byte~) textbox::$37 ← (byte~) textbox::$36 + (byte) textbox::y#1 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y - // [67] (word) textbox::z#1 ← (byte~) textbox::$36 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [68] (word) textbox::z#1 ← (byte~) textbox::$37 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z lda #0 sta.z z+1 @@ -4958,21 +4996,21 @@ textbox: { rol.z z+1 asl.z z rol.z z+1 - // [68] (byte) textbox::x#15 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 + // [69] (byte) textbox::x#15 ← (byte) textbox::x1#4 -- vbuz1=vbuz2 lda.z x1 sta.z x jmp __b2 // textbox::@4 __b4: // ls++; - // [69] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 -- vbuyy=_inc_vbuyy + // [70] (byte) textbox::ls#1 ← ++ (byte) textbox::ls#2 -- vbuyy=_inc_vbuyy iny // c++; - // [70] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 -- vbuxx=_inc_vbuxx + // [71] (byte) textbox::c#1 ← ++ (byte) textbox::c#2 -- vbuxx=_inc_vbuxx inx - // [43] phi from textbox::@4 to textbox::@3 [phi:textbox::@4->textbox::@3] - // [43] phi (byte) textbox::c#2 = (byte) textbox::c#1 [phi:textbox::@4->textbox::@3#0] -- register_copy - // [43] phi (byte) textbox::ls#2 = (byte) textbox::ls#1 [phi:textbox::@4->textbox::@3#1] -- register_copy + // [44] phi from textbox::@4 to textbox::@3 [phi:textbox::@4->textbox::@3] + // [44] phi (byte) textbox::c#2 = (byte) textbox::c#1 [phi:textbox::@4->textbox::@3#0] -- register_copy + // [44] phi (byte) textbox::ls#2 = (byte) textbox::ls#1 [phi:textbox::@4->textbox::@3#1] -- register_copy jmp __b3 } // draw_window @@ -5006,14 +5044,14 @@ draw_window: { .label __34 = $d .label __35 = $15 // z = y1*40 - // [71] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [72] (byte~) draw_window::$36 ← (byte) draw_window::y1#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y1 asl asl - // [72] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 -- vbuaa=vbuaa_plus_vbuz1 + // [73] (byte~) draw_window::$37 ← (byte~) draw_window::$36 + (byte) draw_window::y1#0 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y1 - // [73] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [74] (word) draw_window::z#0 ← (byte~) draw_window::$37 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z lda #0 sta.z z+1 @@ -5024,14 +5062,14 @@ draw_window: { asl.z z rol.z z+1 // q = y2*40 - // [74] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [75] (byte~) draw_window::$39 ← (byte) draw_window::y2#0 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y2 asl asl - // [75] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 -- vbuaa=vbuaa_plus_vbuz1 + // [76] (byte~) draw_window::$40 ← (byte~) draw_window::$39 + (byte) draw_window::y2#0 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y2 - // [76] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [77] (word) draw_window::q#0 ← (byte~) draw_window::$40 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z q lda #0 sta.z q+1 @@ -5042,23 +5080,23 @@ draw_window: { asl.z q rol.z q+1 // x = x1+1 - // [77] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [78] (byte) draw_window::x#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z x1 inx - // [78] phi from draw_window draw_window::@2 to draw_window::@1 [phi:draw_window/draw_window::@2->draw_window::@1] + // [79] phi from draw_window draw_window::@2 to draw_window::@1 [phi:draw_window/draw_window::@2->draw_window::@1] b1: - // [78] phi (byte) draw_window::x#2 = (byte) draw_window::x#0 [phi:draw_window/draw_window::@2->draw_window::@1#0] -- register_copy + // [79] phi (byte) draw_window::x#2 = (byte) draw_window::x#0 [phi:draw_window/draw_window::@2->draw_window::@1#0] -- register_copy // draw horizontal lines // draw_window::@1 // for (byte x = x1+1; x < x2; x++) - // [79] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 -- vbuxx_lt_vbuz1_then_la1 + // [80] if((byte) draw_window::x#2<(byte) draw_window::x2#0) goto draw_window::@2 -- vbuxx_lt_vbuz1_then_la1 cpx.z x2 bcs !__b2+ jmp __b2 !__b2: // draw_window::@3 // z+x1 - // [80] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [81] (word~) draw_window::$2 ← (word) draw_window::z#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z z @@ -5067,7 +5105,7 @@ draw_window: { adc.z z+1 sta.z __2+1 // screen[z+x1] = $55 - // [81] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 -- pbuz1=pbuc1_plus_vwuz1 + // [82] (byte*~) draw_window::$29 ← (const byte*) screen + (word~) draw_window::$2 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __29 adc #screen sta.z __29+1 - // [82] *((byte*~) draw_window::$29) ← (byte) $55 -- _deref_pbuz1=vbuc1 + // [83] *((byte*~) draw_window::$29) ← (byte) $55 -- _deref_pbuz1=vbuc1 // draw upper corners lda #$55 ldy #0 sta (__29),y // z+x2 - // [83] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 + // [84] (word~) draw_window::$3 ← (word) draw_window::z#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z x2 clc adc.z __3 @@ -5090,7 +5128,7 @@ draw_window: { inc.z __3+1 !: // screen[z+x2] = $49 - // [84] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 -- pbuz1=pbuc1_plus_vwuz1 + // [85] (byte*~) draw_window::$30 ← (const byte*) screen + (word~) draw_window::$3 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __30 adc #screen sta.z __30+1 - // [85] *((byte*~) draw_window::$30) ← (byte) $49 -- _deref_pbuz1=vbuc1 + // [86] *((byte*~) draw_window::$30) ← (byte) $49 -- _deref_pbuz1=vbuc1 lda #$49 ldy #0 sta (__30),y // y = y1+1 - // [86] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [87] (byte) draw_window::y#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z y1 inx - // [87] phi from draw_window::@3 draw_window::@5 to draw_window::@4 [phi:draw_window::@3/draw_window::@5->draw_window::@4] + // [88] phi from draw_window::@3 draw_window::@5 to draw_window::@4 [phi:draw_window::@3/draw_window::@5->draw_window::@4] b2: - // [87] phi (byte) draw_window::y#2 = (byte) draw_window::y#0 [phi:draw_window::@3/draw_window::@5->draw_window::@4#0] -- register_copy + // [88] phi (byte) draw_window::y#2 = (byte) draw_window::y#0 [phi:draw_window::@3/draw_window::@5->draw_window::@4#0] -- register_copy // draw vertical lines // draw_window::@4 // for (byte y = y1+1; y < y2; y++) - // [88] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 -- vbuxx_lt_vbuz1_then_la1 + // [89] if((byte) draw_window::y#2<(byte) draw_window::y2#0) goto draw_window::@5 -- vbuxx_lt_vbuz1_then_la1 cpx.z y2 bcs !__b5+ jmp __b5 !__b5: // draw_window::@6 // q+x1 - // [89] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [90] (word~) draw_window::$4 ← (word) draw_window::q#0 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z q @@ -5128,7 +5166,7 @@ draw_window: { adc.z q+1 sta.z __4+1 // screen[q+x1] = $4a - // [90] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 -- pbuz1=pbuc1_plus_vwuz1 + // [91] (byte*~) draw_window::$33 ← (const byte*) screen + (word~) draw_window::$4 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __33 adc #screen sta.z __33+1 - // [91] *((byte*~) draw_window::$33) ← (byte) $4a -- _deref_pbuz1=vbuc1 + // [92] *((byte*~) draw_window::$33) ← (byte) $4a -- _deref_pbuz1=vbuc1 // draw lower corners lda #$4a ldy #0 sta (__33),y // q+x2 - // [92] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 + // [93] (word~) draw_window::$5 ← (word) draw_window::q#0 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z x2 clc adc.z __5 @@ -5151,7 +5189,7 @@ draw_window: { inc.z __5+1 !: // screen[q+x2] = $4b - // [93] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 -- pbuz1=pbuc1_plus_vwuz1 + // [94] (byte*~) draw_window::$34 ← (const byte*) screen + (word~) draw_window::$5 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __34 adc #screen sta.z __34+1 - // [94] *((byte*~) draw_window::$34) ← (byte) $4b -- _deref_pbuz1=vbuc1 + // [95] *((byte*~) draw_window::$34) ← (byte) $4b -- _deref_pbuz1=vbuc1 lda #$4b ldy #0 sta (__34),y // x2-x1 - // [95] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 -- vbuxx=vbuz1_minus_vbuz2 + // [96] (byte~) draw_window::$6 ← (byte) draw_window::x2#0 - (byte) draw_window::x1#0 -- vbuxx=vbuz1_minus_vbuz2 lda.z x2 sec sbc.z x1 tax // y2-y1 - // [96] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 -- vbuaa=vbuz1_minus_vbuz2 + // [97] (byte~) draw_window::$8 ← (byte) draw_window::y2#0 - (byte) draw_window::y1#0 -- vbuaa=vbuz1_minus_vbuz2 lda.z y2 sec sbc.z y1 // if (x2-x1 > 1 && y2-y1 > 1) - // [97] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return -- vbuxx_lt_vbuc1_then_la1 + // [98] if((byte~) draw_window::$6<(byte) 1+(byte) 1) goto draw_window::@return -- vbuxx_lt_vbuc1_then_la1 cpx #1+1 bcc __breturn // draw_window::@13 - // [98] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 -- vbuaa_ge_vbuc1_then_la1 + // [99] if((byte~) draw_window::$8>=(byte) 1+(byte) 1) goto draw_window::@7 -- vbuaa_ge_vbuc1_then_la1 cmp #1+1 bcs __b7 // draw_window::@return __breturn: // } - // [99] return + // [100] return rts // draw_window::@7 __b7: // y = y1+1 - // [100] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [101] (byte) draw_window::y3#0 ← (byte) draw_window::y1#0 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z y1 iny sty.z y3 - // [101] phi from draw_window::@12 draw_window::@7 to draw_window::@8 [phi:draw_window::@12/draw_window::@7->draw_window::@8] + // [102] phi from draw_window::@12 draw_window::@7 to draw_window::@8 [phi:draw_window::@12/draw_window::@7->draw_window::@8] b3: - // [101] phi (byte) draw_window::y3#2 = (byte) draw_window::y3#1 [phi:draw_window::@12/draw_window::@7->draw_window::@8#0] -- register_copy + // [102] phi (byte) draw_window::y3#2 = (byte) draw_window::y3#1 [phi:draw_window::@12/draw_window::@7->draw_window::@8#0] -- register_copy // blank inside // draw_window::@8 // for(byte y = y1+1; y < y2; y++) - // [102] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 -- vbuz1_lt_vbuz2_then_la1 + // [103] if((byte) draw_window::y3#2<(byte) draw_window::y2#0) goto draw_window::@9 -- vbuz1_lt_vbuz2_then_la1 lda.z y3 cmp.z y2 bcc __b9 @@ -5208,14 +5246,14 @@ draw_window: { // draw_window::@9 __b9: // z = y*40 - // [103] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 + // [104] (byte~) draw_window::$45 ← (byte) draw_window::y3#2 << (byte) 2 -- vbuaa=vbuz1_rol_2 lda.z y3 asl asl - // [104] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 -- vbuaa=vbuaa_plus_vbuz1 + // [105] (byte~) draw_window::$46 ← (byte~) draw_window::$45 + (byte) draw_window::y3#2 -- vbuaa=vbuaa_plus_vbuz1 clc adc.z y3 - // [105] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [106] (word) draw_window::z#2 ← (byte~) draw_window::$46 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z_2 lda #0 sta.z z_2+1 @@ -5226,26 +5264,26 @@ draw_window: { asl.z z_2 rol.z z_2+1 // x = x1+1 - // [106] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [107] (byte) draw_window::x3#0 ← (byte) draw_window::x1#0 + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z x1 inx - // [107] phi from draw_window::@11 draw_window::@9 to draw_window::@10 [phi:draw_window::@11/draw_window::@9->draw_window::@10] - // [107] phi (byte) draw_window::x3#2 = (byte) draw_window::x3#1 [phi:draw_window::@11/draw_window::@9->draw_window::@10#0] -- register_copy + // [108] phi from draw_window::@11 draw_window::@9 to draw_window::@10 [phi:draw_window::@11/draw_window::@9->draw_window::@10] + // [108] phi (byte) draw_window::x3#2 = (byte) draw_window::x3#1 [phi:draw_window::@11/draw_window::@9->draw_window::@10#0] -- register_copy // draw_window::@10 __b10: // for(byte x = x1+1; x < x2; x++) - // [108] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 -- vbuxx_lt_vbuz1_then_la1 + // [109] if((byte) draw_window::x3#2<(byte) draw_window::x2#0) goto draw_window::@11 -- vbuxx_lt_vbuz1_then_la1 cpx.z x2 bcc __b11 // draw_window::@12 // for(byte y = y1+1; y < y2; y++) - // [109] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 -- vbuz1=_inc_vbuz1 + // [110] (byte) draw_window::y3#1 ← ++ (byte) draw_window::y3#2 -- vbuz1=_inc_vbuz1 inc.z y3 jmp b3 // draw_window::@11 __b11: // z+x - // [110] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 -- vwuz1=vwuz2_plus_vbuxx + // [111] (word~) draw_window::$26 ← (word) draw_window::z#2 + (byte) draw_window::x3#2 -- vwuz1=vwuz2_plus_vbuxx txa clc adc.z z_2 @@ -5254,7 +5292,7 @@ draw_window: { adc.z z_2+1 sta.z __26+1 // screen[z+x] = $20 - // [111] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 -- pbuz1=pbuc1_plus_vwuz1 + // [112] (byte*~) draw_window::$35 ← (const byte*) screen + (word~) draw_window::$26 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __35 adc #screen sta.z __35+1 - // [112] *((byte*~) draw_window::$35) ← (byte) $20 -- _deref_pbuz1=vbuc1 + // [113] *((byte*~) draw_window::$35) ← (byte) $20 -- _deref_pbuz1=vbuc1 lda #$20 ldy #0 sta (__35),y // for(byte x = x1+1; x < x2; x++) - // [113] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 -- vbuxx=_inc_vbuxx + // [114] (byte) draw_window::x3#1 ← ++ (byte) draw_window::x3#2 -- vbuxx=_inc_vbuxx inx jmp __b10 // draw_window::@5 __b5: // z = y*40 - // [114] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [115] (byte~) draw_window::$42 ← (byte) draw_window::y#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [115] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 -- vbuaa=vbuaa_plus_vbuxx + // [116] (byte~) draw_window::$43 ← (byte~) draw_window::$42 + (byte) draw_window::y#2 -- vbuaa=vbuaa_plus_vbuxx stx.z $ff clc adc.z $ff - // [116] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 -- vwuz1=vbuaa_rol_3 + // [117] (word) draw_window::z#1 ← (byte~) draw_window::$43 << (byte) 3 -- vwuz1=vbuaa_rol_3 sta.z z_1 lda #0 sta.z z_1+1 @@ -5292,7 +5330,7 @@ draw_window: { asl.z z_1 rol.z z_1+1 // z+x1 - // [117] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 + // [118] (word~) draw_window::$19 ← (word) draw_window::z#1 + (byte) draw_window::x1#0 -- vwuz1=vwuz2_plus_vbuz3 lda.z x1 clc adc.z z_1 @@ -5301,7 +5339,7 @@ draw_window: { adc.z z_1+1 sta.z __19+1 // screen[z+x1] = $42 - // [118] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 -- pbuz1=pbuc1_plus_vwuz1 + // [119] (byte*~) draw_window::$31 ← (const byte*) screen + (word~) draw_window::$19 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __31 adc #screen sta.z __31+1 - // [119] *((byte*~) draw_window::$31) ← (byte) $42 -- _deref_pbuz1=vbuc1 + // [120] *((byte*~) draw_window::$31) ← (byte) $42 -- _deref_pbuz1=vbuc1 lda #$42 ldy #0 sta (__31),y // z+x2 - // [120] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 + // [121] (word~) draw_window::$20 ← (word) draw_window::z#1 + (byte) draw_window::x2#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z x2 clc adc.z __20 @@ -5323,7 +5361,7 @@ draw_window: { inc.z __20+1 !: // screen[z+x2] = $42 - // [121] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 -- pbuz1=pbuc1_plus_vwuz1 + // [122] (byte*~) draw_window::$32 ← (const byte*) screen + (word~) draw_window::$20 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __32 adc #screen sta.z __32+1 - // [122] *((byte*~) draw_window::$32) ← (byte) $42 -- _deref_pbuz1=vbuc1 + // [123] *((byte*~) draw_window::$32) ← (byte) $42 -- _deref_pbuz1=vbuc1 lda #$42 ldy #0 sta (__32),y // for (byte y = y1+1; y < y2; y++) - // [123] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 -- vbuxx=_inc_vbuxx + // [124] (byte) draw_window::y#1 ← ++ (byte) draw_window::y#2 -- vbuxx=_inc_vbuxx inx jmp b2 // draw_window::@2 __b2: // z+x - // [124] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx + // [125] (word~) draw_window::$14 ← (word) draw_window::z#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx txa clc adc.z z @@ -5351,7 +5389,7 @@ draw_window: { adc.z z+1 sta.z __14+1 // screen[z+x] = $43 - // [125] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 -- pbuz1=pbuc1_plus_vwuz1 + // [126] (byte*~) draw_window::$27 ← (const byte*) screen + (word~) draw_window::$14 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __27 adc #screen sta.z __27+1 - // [126] *((byte*~) draw_window::$27) ← (byte) $43 -- _deref_pbuz1=vbuc1 + // [127] *((byte*~) draw_window::$27) ← (byte) $43 -- _deref_pbuz1=vbuc1 lda #$43 ldy #0 sta (__27),y // q+x - // [127] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx + // [128] (word~) draw_window::$15 ← (word) draw_window::q#0 + (byte) draw_window::x#2 -- vwuz1=vwuz2_plus_vbuxx txa clc adc.z q @@ -5373,7 +5411,7 @@ draw_window: { adc.z q+1 sta.z __15+1 // screen[q+x] = $43 - // [128] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 -- pbuz1=pbuc1_plus_vwuz1 + // [129] (byte*~) draw_window::$28 ← (const byte*) screen + (word~) draw_window::$15 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z __28 adc #screen sta.z __28+1 - // [129] *((byte*~) draw_window::$28) ← (byte) $43 -- _deref_pbuz1=vbuc1 + // [130] *((byte*~) draw_window::$28) ← (byte) $43 -- _deref_pbuz1=vbuc1 lda #$43 sta (__28),y // for (byte x = x1+1; x < x2; x++) - // [130] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 -- vbuxx=_inc_vbuxx + // [131] (byte) draw_window::x#1 ← ++ (byte) draw_window::x#2 -- vbuxx=_inc_vbuxx inx jmp b1 } diff --git a/src/test/ref/textbox.sym b/src/test/ref/textbox.sym index 27b02328e..4c84976d9 100644 --- a/src/test/ref/textbox.sym +++ b/src/test/ref/textbox.sym @@ -95,16 +95,17 @@ (const byte*) text[] = (string) "this is a small test with word wrap, if a word is too long it moves it to the next line. isn't that supercalifragilisticexpialidocious? i think it's cool!" (const byte*) text2[] = (string) "textbox by scan of desire" (void()) textbox((byte) textbox::x1 , (byte) textbox::y1 , (byte) textbox::x2 , (byte) textbox::y2 , (byte*) textbox::text) -(byte~) textbox::$15 reg byte y 101.0 -(byte~) textbox::$17 zp[1]:10 101.0 -(byte*~) textbox::$31 zp[2]:13 202.0 -(byte~) textbox::$32 reg byte a 4.0 -(byte~) textbox::$33 reg byte a 4.0 -(byte~) textbox::$35 reg byte a 202.0 +(byte~) textbox::$16 reg byte y 101.0 +(byte~) textbox::$18 zp[1]:10 101.0 +(word~) textbox::$3 zp[2]:11 3.0 +(byte*~) textbox::$32 zp[2]:15 202.0 +(word~) textbox::$33 zp[2]:13 4.0 +(word~) textbox::$34 zp[2]:11 4.0 (byte~) textbox::$36 reg byte a 202.0 -(byte~) textbox::$38 reg byte a 202.0 +(byte~) textbox::$37 reg byte a 202.0 (byte~) textbox::$39 reg byte a 202.0 -(word~) textbox::$8 zp[2]:13 202.0 +(byte~) textbox::$40 reg byte a 202.0 +(word~) textbox::$9 zp[2]:15 202.0 (label) textbox::@1 (label) textbox::@10 (label) textbox::@11 @@ -132,9 +133,9 @@ (byte) textbox::ls#1 reg byte y 1001.0 (byte) textbox::ls#2 reg byte y 1368.3333333333335 (byte*) textbox::text -(byte*) textbox::text#12 text zp[2]:6 50.108695652173914 +(byte*) textbox::text#12 text zp[2]:6 49.04255319148936 (byte) textbox::x -(byte) textbox::x#0 x zp[1]:8 1.0 +(byte) textbox::x#0 x zp[1]:8 0.8571428571428571 (byte) textbox::x#1 x zp[1]:8 151.5 (byte) textbox::x#10 x zp[1]:8 36.214285714285715 (byte) textbox::x#12 x zp[1]:8 33.666666666666664 @@ -143,12 +144,12 @@ (byte) textbox::x#7 x zp[1]:8 151.5 (byte) textbox::x1 (byte) textbox::x1#0 x1 zp[1]:2 11.0 -(byte) textbox::x1#4 x1 zp[1]:2 6.913043478260869 +(byte) textbox::x1#4 x1 zp[1]:2 6.76595744680851 (byte) textbox::x2 (byte) textbox::x2#0 x2 zp[1]:4 5.5 -(byte) textbox::x2#4 x2 zp[1]:4 6.913043478260869 +(byte) textbox::x2#4 x2 zp[1]:4 6.76595744680851 (byte) textbox::y -(byte) textbox::y#0 y zp[1]:3 1.4285714285714284 +(byte) textbox::y#0 y zp[1]:3 0.75 (byte) textbox::y#1 y zp[1]:3 84.16666666666666 (byte) textbox::y#11 y zp[1]:3 151.5 (byte) textbox::y#12 y zp[1]:3 27.06666666666667 @@ -159,7 +160,7 @@ (byte) textbox::y1#4 y1 zp[1]:3 2.5 (byte) textbox::y2 (byte) textbox::y2#0 y2 zp[1]:5 7.333333333333333 -(byte) textbox::y2#4 y2 zp[1]:5 4.717391304347826 +(byte) textbox::y2#4 y2 zp[1]:5 4.617021276595745 (word) textbox::z (word) textbox::z#0 z zp[2]:11 1.3333333333333333 (word) textbox::z#1 z zp[2]:11 101.0 @@ -181,21 +182,19 @@ reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp[1]:9 [ draw_window::y3#2 draw_window::y3#0 draw_window::y3#1 textbox::i#2 textbox::i#1 ] reg byte x [ draw_window::x3#2 draw_window::x3#0 draw_window::x3#1 ] reg byte a [ main::$4 ] -reg byte a [ textbox::$32 ] -reg byte a [ textbox::$33 ] -reg byte y [ textbox::$15 ] -zp[1]:10 [ textbox::$17 ] -reg byte a [ textbox::$38 ] +reg byte y [ textbox::$16 ] +zp[1]:10 [ textbox::$18 ] reg byte a [ textbox::$39 ] -reg byte a [ textbox::$35 ] +reg byte a [ textbox::$40 ] reg byte a [ textbox::$36 ] +reg byte a [ textbox::$37 ] reg byte a [ draw_window::$36 ] reg byte a [ draw_window::$37 ] -zp[2]:11 [ draw_window::z#0 draw_window::$3 draw_window::$30 textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 ] +zp[2]:11 [ draw_window::z#0 draw_window::$3 draw_window::$30 textbox::z#5 textbox::z#1 textbox::z#3 textbox::z#4 textbox::z#0 textbox::z#2 textbox::$34 textbox::$3 ] reg byte a [ draw_window::$39 ] reg byte a [ draw_window::$40 ] -zp[2]:13 [ draw_window::q#0 draw_window::$5 draw_window::$34 textbox::$8 textbox::$31 ] -zp[2]:15 [ draw_window::$2 draw_window::$29 ] +zp[2]:13 [ draw_window::q#0 draw_window::$5 draw_window::$34 textbox::$33 ] +zp[2]:15 [ draw_window::$2 draw_window::$29 textbox::$9 textbox::$32 ] zp[2]:17 [ draw_window::$4 draw_window::$33 ] reg byte x [ draw_window::$6 ] reg byte a [ draw_window::$8 ] diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index 8a86bf4cb..605420f94 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -142,7 +142,7 @@ print_ln::@return: scope:[print_ln] from print_ln::@2 @37: scope:[] from @13 (byte*) print_line_cursor#33 ← phi( @13/(byte*) print_line_cursor#0 ) (byte*) print_char_cursor#39 ← phi( @13/(byte*) print_char_cursor#0 ) - (byte) action_count#0 ← (number) 0 + (byte) action_count#0 ← (byte) 0 to:@39 (void()) main() @@ -277,7 +277,7 @@ SYMBOL TABLE SSA (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) READY_FRAMES = (number) 5 +(const byte) READY_FRAMES = (byte) 5 (byte) action_count (byte) action_count#0 (byte) action_count#1 @@ -439,24 +439,19 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#2) Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#13 + (number) $28 -Adding number conversion cast (unumber) 0 in (byte) action_count#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) game_ready::$0 ← (byte) action_count#9 == (number) 0 Adding number conversion cast (unumber) 0 in (bool~) game_ready::$3 ← (byte) action_count#3 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) action_count#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [70] (bool~) game_ready::$1 ← (byte) action_count#9 != (byte) 0 from [69] (bool~) game_ready::$0 ← (byte) action_count#9 == (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification @@ -1463,7 +1458,7 @@ FINAL SYMBOL TABLE (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) READY_FRAMES = (number) 5 +(const byte) READY_FRAMES = (byte) 5 (byte) action_count (byte) action_count#10 reg byte x 2.0 (byte) action_count#11 reg byte x 1.25 diff --git a/src/test/ref/travis1.sym b/src/test/ref/travis1.sym index 3066871bd..69e657c8f 100644 --- a/src/test/ref/travis1.sym +++ b/src/test/ref/travis1.sym @@ -5,7 +5,7 @@ (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 -(const byte) READY_FRAMES = (number) 5 +(const byte) READY_FRAMES = (byte) 5 (byte) action_count (byte) action_count#10 reg byte x 2.0 (byte) action_count#11 reg byte x 1.25 diff --git a/src/test/ref/true-inline-words.log b/src/test/ref/true-inline-words.log index c16e31f54..a43e3a6e4 100644 --- a/src/test/ref/true-inline-words.log +++ b/src/test/ref/true-inline-words.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (word) main::w#0 ← ((word)) { (const byte) main::b, (byte)(number) 0 } + (word) main::w#0 ← (word){ (const byte) main::b, (byte) 0 } (word~) main::$0 ← ((word)) { (number) 1, (number) 1 } (word~) main::$1 ← (word~) main::$0 + (word) main::w#0 (word~) main::$2 ← ((word)) { (number) 0, (number) 0 } @@ -62,7 +62,7 @@ SYMBOL TABLE SSA (word) main::w2 (word) main::w2#0 -Fixing inline constructor with main::$5 ← (byte)main::b w= (byte)(byte)0 +Fixing inline constructor with main::$5 ← (byte)main::b w= (byte)0 Fixing inline constructor with main::$6 ← (byte)1 w= (byte)1 Fixing inline constructor with main::$7 ← (byte)0 w= (byte)0 Successful SSA optimization Pass2FixInlineConstructors @@ -77,7 +77,7 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1281 Simplifying constant pointer cast (byte*) 53281 Simplifying constant integer cast (const byte) main::b -Simplifying constant integer cast (byte)(number) 0 +Simplifying constant integer cast (byte) 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -86,8 +86,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 5 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/type-mix.cfg b/src/test/ref/type-mix.cfg index 05485f368..8fad620d5 100644 --- a/src/test/ref/type-mix.cfg +++ b/src/test/ref/type-mix.cfg @@ -14,7 +14,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) - [5] (signed word) main::w#2 ← phi( main/(signed byte) 0 main::@1/(signed word) main::w#1 ) + [5] (signed word) main::w#2 ← phi( main/(signed word) 0 main::@1/(signed word) main::w#1 ) [6] (signed word) main::w#1 ← (signed word) main::w#2 - (signed byte) $c [7] (byte~) main::$1 ← < (signed word) main::w#1 [8] *((const byte*) main::SCREEN + (byte) main::i#2) ← (byte~) main::$1 diff --git a/src/test/ref/type-mix.log b/src/test/ref/type-mix.log index 86d8087b1..d1bbae04a 100644 --- a/src/test/ref/type-mix.log +++ b/src/test/ref/type-mix.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (signed word) main::w#0 ← (number) 0 + (signed word) main::w#0 ← (signed word) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -52,17 +52,12 @@ SYMBOL TABLE SSA (signed word) main::w#1 (signed word) main::w#2 -Adding number conversion cast (snumber) 0 in (signed word) main::w#0 ← (number) 0 Adding number conversion cast (snumber) $c in (number~) main::$0 ← (signed word) main::w#2 - (number) $c Adding number conversion cast (snumber) main::$0 in (number~) main::$0 ← (signed word) main::w#2 - (snumber)(number) $c Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (signed word) main::w#0 ← (snumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $c Successful SSA optimization PassNCastSimplification -Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) $c Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to signed word in (snumber~) main::$0 ← (signed word) main::w#2 - (signed byte) $c @@ -84,7 +79,7 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inlining constant with var siblings (const signed word) main::w#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 -Constant inlined main::w#0 = (signed byte) 0 +Constant inlined main::w#0 = (signed word) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) Adding NOP phi() at start of @begin @@ -123,7 +118,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) - [5] (signed word) main::w#2 ← phi( main/(signed byte) 0 main::@1/(signed word) main::w#1 ) + [5] (signed word) main::w#2 ← phi( main/(signed word) 0 main::@1/(signed word) main::w#1 ) [6] (signed word) main::w#1 ← (signed word) main::w#2 - (signed byte) $c [7] (byte~) main::$1 ← < (signed word) main::w#1 [8] *((const byte*) main::SCREEN + (byte) main::i#2) ← (byte~) main::$1 @@ -193,7 +188,7 @@ main: { // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [5] phi (signed word) main::w#2 = (signed byte) 0 [phi:main->main::@1#1] -- vwsz1=vbsc1 + // [5] phi (signed word) main::w#2 = (signed word) 0 [phi:main->main::@1#1] -- vwsz1=vwsc1 lda #<0 sta.z w lda #>0 @@ -284,7 +279,7 @@ main: { __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (signed word) main::w#2 = (signed byte) 0 [phi:main->main::@1#1] -- vwsz1=vbsc1 + // [5] phi (signed word) main::w#2 = (signed word) 0 [phi:main->main::@1#1] -- vwsz1=vwsc1 lda #<0 sta.z w lda #>0 @@ -396,7 +391,7 @@ main: { // [5] phi from main to main::@1 [phi:main->main::@1] // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (signed word) main::w#2 = (signed byte) 0 [phi:main->main::@1#1] -- vwsz1=vbsc1 + // [5] phi (signed word) main::w#2 = (signed word) 0 [phi:main->main::@1#1] -- vwsz1=vwsc1 txa sta.z w sta.z w+1 diff --git a/src/test/ref/type-signed.log b/src/test/ref/type-signed.log index efbff75be..9c3ab3229 100644 --- a/src/test/ref/type-signed.log +++ b/src/test/ref/type-signed.log @@ -201,8 +201,8 @@ print_char::@return: scope:[print_char] from print_char main: scope:[main] from @38 (byte*) print_line_cursor#18 ← phi( @38/(byte*) print_line_cursor#14 ) (byte*) print_char_cursor#50 ← phi( @38/(byte*) print_char_cursor#48 ) - (signed word) main::a#0 ← (number) -$3ff - (word) main::b#0 ← (number) $1024 + (signed word) main::a#0 ← (signed word) -$3ff + (word) main::b#0 ← (word) $1024 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@6 @@ -457,22 +457,16 @@ Adding number conversion cast (snumber) 0 in (bool~) print_sword::$0 ← (signed Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f -Adding number conversion cast (snumber) -$3ff in (signed word) main::a#0 ← (number) -$3ff -Adding number conversion cast (unumber) $1024 in (word) main::b#0 ← (number) $1024 Adding number conversion cast (snumber) -7 in (signed word) main::a#1 ← (signed word) main::a#2 + (number) -7 Adding number conversion cast (unumber) $141 in (word) main::b#1 ← (word) main::b#2 + (number) $141 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word~) print_sword::$1 ← (word)(signed word) print_sword::w#4 -Inlining cast (signed word) main::a#0 ← (snumber)(number) -$3ff -Inlining cast (word) main::b#0 ← (unumber)(number) $1024 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f -Simplifying constant integer cast -$3ff -Simplifying constant integer cast $1024 Simplifying constant integer cast -7 Simplifying constant integer cast $141 Successful SSA optimization PassNCastSimplification @@ -480,8 +474,6 @@ Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f -Finalized signed number type (signed word) -$3ff -Finalized unsigned number type (word) $1024 Finalized signed number type (signed byte) -7 Finalized unsigned number type (word) $141 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/typedef-1.log b/src/test/ref/typedef-1.log index 9d7ce4247..30e7179aa 100644 --- a/src/test/ref/typedef-1.log +++ b/src/test/ref/typedef-1.log @@ -1,8 +1,8 @@ Created struct value member variable (byte) main::p_x Created struct value member variable (byte) main::p_y Converted struct value to member variables (struct PointDef) main::p -Adding struct value member variable copy (byte) main::p_x ← (byte)(number) 4 -Adding struct value member variable copy (byte) main::p_y ← (byte)(number) 7 +Adding struct value member variable copy (byte) main::p_x ← (byte) 4 +Adding struct value member variable copy (byte) main::p_y ← (byte) 7 Adding struct value member variable copy *((byte*~) main::$0) ← (byte) main::p_x Adding struct value member variable copy *((byte*~) main::$1) ← (byte) main::p_y Identified constant variable (struct PointDef*) main::SCREEN @@ -44,12 +44,10 @@ SYMBOL TABLE SSA (byte*~) main::$1 (label) main::@return (const struct PointDef*) main::SCREEN = (struct PointDef*)(number) $400 -(const byte) main::p_x = (byte)(number) 4 -(const byte) main::p_y = (byte)(number) 7 +(const byte) main::p_x = (byte) 4 +(const byte) main::p_y = (byte) 7 Simplifying constant pointer cast (struct PointDef*) 1024 -Simplifying constant integer cast 4 -Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification Constant right-side identified [0] (byte*~) main::$0 ← (byte*)(const struct PointDef*) main::SCREEN + (const byte) OFFSET_STRUCT_POINTDEF_X Constant right-side identified [2] (byte*~) main::$1 ← (byte*)(const struct PointDef*) main::SCREEN + (const byte) OFFSET_STRUCT_POINTDEF_Y diff --git a/src/test/ref/typeid-plus-bytes.log b/src/test/ref/typeid-plus-bytes.log index 53fd4a113..189517d3e 100644 --- a/src/test/ref/typeid-plus-bytes.log +++ b/src/test/ref/typeid-plus-bytes.log @@ -19,7 +19,7 @@ Culled Empty Block (label) @4 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) idx#0 ← (number) 0 + (byte) idx#0 ← (byte) 0 to:@5 (void()) main() @@ -58,7 +58,7 @@ main::@return: scope:[main] from main::@4 (void()) testUnsigned() testUnsigned: scope:[testUnsigned] from main (byte) idx#64 ← phi( main/(byte) idx#1 ) - (byte) testUnsigned::ubv1 ← (number) $fa + (byte) testUnsigned::ubv1 ← (byte) $fa (byte~) testUnsigned::$0 ← typeid (number) $fa *((const byte*) SCREEN + (byte) idx#64) ← (byte~) testUnsigned::$0 (byte) idx#10 ← ++ (byte) idx#64 @@ -106,7 +106,7 @@ testUnsigned::@return: scope:[testUnsigned] from testUnsigned (void()) testUnsignedVals() testUnsignedVals: scope:[testUnsignedVals] from main::@1 (byte) idx#66 ← phi( main::@1/(byte) idx#3 ) - (byte) testUnsignedVals::ubv1 ← (number) $fa + (byte) testUnsignedVals::ubv1 ← (byte) $fa *((const byte*) SCREEN + (byte) idx#66) ← (number) $fa (byte) idx#22 ← ++ (byte) idx#66 *((const byte*) SCREEN + (byte) idx#22) ← (const byte) testUnsignedVals::ubc1 @@ -146,7 +146,7 @@ testUnsignedVals::@return: scope:[testUnsignedVals] from testUnsignedVals (void()) testSigned() testSigned: scope:[testSigned] from main::@2 (byte) idx#68 ← phi( main::@2/(byte) idx#5 ) - (signed byte) testSigned::sbv1 ← (number) -$78 + (signed byte) testSigned::sbv1 ← (signed byte) -$78 (byte~) testSigned::$0 ← typeid (number) -$78 *((const byte*) SCREEN + (byte) idx#68) ← (byte~) testSigned::$0 (byte) idx#34 ← ++ (byte) idx#68 @@ -194,7 +194,7 @@ testSigned::@return: scope:[testSigned] from testSigned (void()) testSignedVals() testSignedVals: scope:[testSignedVals] from main::@3 (byte) idx#70 ← phi( main::@3/(byte) idx#7 ) - (signed byte) testSignedVals::sbv1 ← (number) -$78 + (signed byte) testSignedVals::sbv1 ← (signed byte) -$78 *((const signed byte*) SSCREEN + (byte) idx#70) ← (number) -$78 (byte) idx#46 ← ++ (byte) idx#70 *((const signed byte*) SSCREEN + (byte) idx#46) ← (const signed byte) testSignedVals::sbc1 @@ -391,12 +391,10 @@ SYMBOL TABLE SSA (const byte) testUnsignedVals::ubc1 = (byte) $fa (byte) testUnsignedVals::ubv1 loadstore -Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) idx#1 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte) idx#3 ← (number) $28 Adding number conversion cast (unumber) $28*2 in (byte) idx#5 ← (number) $28*(number) 2 Adding number conversion cast (unumber) $28*3 in (byte) idx#7 ← (number) $28*(number) 3 -Adding number conversion cast (unumber) $fa in (byte) testUnsigned::ubv1 ← (number) $fa Adding number conversion cast (unumber) $fa in (number~) testUnsigned::$4 ← (const byte) testUnsigned::ubc1 + (number) $fa Adding number conversion cast (unumber) testUnsigned::$4 in (number~) testUnsigned::$4 ← (const byte) testUnsigned::ubc1 + (unumber)(number) $fa Adding number conversion cast (unumber) $fa in (number~) testUnsigned::$6 ← (number) $fa + (const byte) testUnsigned::ubc1 @@ -405,7 +403,6 @@ Adding number conversion cast (unumber) $fa in (number~) testUnsigned::$8 ← (b Adding number conversion cast (unumber) testUnsigned::$8 in (number~) testUnsigned::$8 ← (byte) testUnsigned::ubv1 + (unumber)(number) $fa Adding number conversion cast (unumber) $fa in (number~) testUnsigned::$10 ← (number) $fa + (byte) testUnsigned::ubv1 Adding number conversion cast (unumber) testUnsigned::$10 in (number~) testUnsigned::$10 ← (unumber)(number) $fa + (byte) testUnsigned::ubv1 -Adding number conversion cast (unumber) $fa in (byte) testUnsignedVals::ubv1 ← (number) $fa Adding number conversion cast (unumber) $fa in *((const byte*) SCREEN + (byte) idx#66) ← (number) $fa Adding number conversion cast (unumber) $78+$82 in *((const byte*) SCREEN + (byte) idx#24) ← (number) $78+(number) $82 Adding number conversion cast (unumber) $fa in (number~) testUnsignedVals::$0 ← (const byte) testUnsignedVals::ubc1 + (number) $fa @@ -416,7 +413,6 @@ Adding number conversion cast (unumber) $fa in (number~) testUnsignedVals::$2 Adding number conversion cast (unumber) testUnsignedVals::$2 in (number~) testUnsignedVals::$2 ← (byte) testUnsignedVals::ubv1 + (unumber)(number) $fa Adding number conversion cast (unumber) $fa in (number~) testUnsignedVals::$3 ← (number) $fa + (byte) testUnsignedVals::ubv1 Adding number conversion cast (unumber) testUnsignedVals::$3 in (number~) testUnsignedVals::$3 ← (unumber)(number) $fa + (byte) testUnsignedVals::ubv1 -Adding number conversion cast (snumber) -$78 in (signed byte) testSigned::sbv1 ← (number) -$78 Adding number conversion cast (snumber) -$78 in (number~) testSigned::$4 ← (const signed byte) testSigned::sbc1 + (number) -$78 Adding number conversion cast (snumber) testSigned::$4 in (number~) testSigned::$4 ← (const signed byte) testSigned::sbc1 + (snumber)(number) -$78 Adding number conversion cast (snumber) -$78 in (number~) testSigned::$6 ← (number) -$78 + (const signed byte) testSigned::sbc1 @@ -425,7 +421,6 @@ Adding number conversion cast (snumber) -$78 in (number~) testSigned::$8 ← (si Adding number conversion cast (snumber) testSigned::$8 in (number~) testSigned::$8 ← (signed byte) testSigned::sbv1 + (snumber)(number) -$78 Adding number conversion cast (snumber) -$78 in (number~) testSigned::$10 ← (number) -$78 + (signed byte) testSigned::sbv1 Adding number conversion cast (snumber) testSigned::$10 in (number~) testSigned::$10 ← (snumber)(number) -$78 + (signed byte) testSigned::sbv1 -Adding number conversion cast (snumber) -$78 in (signed byte) testSignedVals::sbv1 ← (number) -$78 Adding number conversion cast (snumber) -$78 in *((const signed byte*) SSCREEN + (byte) idx#70) ← (number) -$78 Adding number conversion cast (snumber) -$46+-$32 in *((const signed byte*) SSCREEN + (byte) idx#48) ← (number) -$46+(number) -$32 Adding number conversion cast (snumber) -$78 in (number~) testSignedVals::$0 ← (const signed byte) testSignedVals::sbc1 + (number) -$78 @@ -437,24 +432,18 @@ Adding number conversion cast (snumber) testSignedVals::$2 in (number~) testSign Adding number conversion cast (snumber) -$78 in (number~) testSignedVals::$3 ← (number) -$78 + (signed byte) testSignedVals::sbv1 Adding number conversion cast (snumber) testSignedVals::$3 in (number~) testSignedVals::$3 ← (snumber)(number) -$78 + (signed byte) testSignedVals::sbv1 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast (byte) idx#1 ← (unumber)(number) 0 Inlining cast (byte) idx#3 ← (unumber)(number) $28 Inlining cast (byte) idx#5 ← (unumber)(number) $28*(number) 2 Inlining cast (byte) idx#7 ← (unumber)(number) $28*(number) 3 -Inlining cast (byte) testUnsigned::ubv1 ← (unumber)(number) $fa -Inlining cast (byte) testUnsignedVals::ubv1 ← (unumber)(number) $fa Inlining cast *((const byte*) SCREEN + (byte) idx#66) ← (unumber)(number) $fa Inlining cast *((const byte*) SCREEN + (byte) idx#24) ← (unumber)(number) $78+(number) $82 -Inlining cast (signed byte) testSigned::sbv1 ← (snumber)(number) -$78 -Inlining cast (signed byte) testSignedVals::sbv1 ← (snumber)(number) -$78 Inlining cast *((const signed byte*) SSCREEN + (byte) idx#70) ← (snumber)(number) -$78 Inlining cast *((const signed byte*) SSCREEN + (byte) idx#48) ← (snumber)(number) -$46+(number) -$32 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (signed byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $fa Simplifying constant integer cast $fa @@ -465,10 +454,6 @@ Simplifying constant integer cast $fa Simplifying constant integer cast $fa Simplifying constant integer cast $fa Simplifying constant integer cast $fa -Simplifying constant integer cast $fa -Simplifying constant integer cast $fa -Simplifying constant integer cast -$78 -Simplifying constant integer cast -$78 Simplifying constant integer cast -$78 Simplifying constant integer cast -$78 Simplifying constant integer cast -$78 @@ -480,7 +465,6 @@ Simplifying constant integer cast -$78 Simplifying constant integer cast -$78 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $fa Finalized unsigned number type (byte) $fa @@ -491,10 +475,6 @@ Finalized unsigned number type (byte) $fa Finalized unsigned number type (byte) $fa Finalized unsigned number type (byte) $fa Finalized unsigned number type (byte) $fa -Finalized unsigned number type (byte) $fa -Finalized unsigned number type (byte) $fa -Finalized signed number type (signed byte) -$78 -Finalized signed number type (signed byte) -$78 Finalized signed number type (signed byte) -$78 Finalized signed number type (signed byte) -$78 Finalized signed number type (signed byte) -$78 diff --git a/src/test/ref/typeid-simple.log b/src/test/ref/typeid-simple.log index d4fdae73e..0c5304d12 100644 --- a/src/test/ref/typeid-simple.log +++ b/src/test/ref/typeid-simple.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 *((const byte*) main::SCREEN + (byte) main::idx#0) ← (const byte) TYPEID_VOID (byte) main::idx#1 ← ++ (byte) main::idx#0 *((const byte*) main::SCREEN + (byte) main::idx#1) ← (const byte) TYPEID_BYTE @@ -134,17 +134,13 @@ SYMBOL TABLE SSA (byte) main::idx#8 (byte) main::idx#9 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte) main::idx#18 ← (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 Inlining cast (byte) main::idx#18 ← (unumber)(number) $28 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant (const byte) main::idx#0 = 0 diff --git a/src/test/ref/typemismatch.asm b/src/test/ref/typemismatch.asm index 29ae868a1..7afa44f0f 100644 --- a/src/test/ref/typemismatch.asm +++ b/src/test/ref/typemismatch.asm @@ -3,5 +3,10 @@ :BasicUpstart(main) .pc = $80d "Program" main: { + .label screen = $400 + .const w = $1388 + .const b = $ff&w + lda #b + sta screen rts } diff --git a/src/test/ref/unroll-loop-modifyvar.log b/src/test/ref/unroll-loop-modifyvar.log index 2150d48fc..6107818bf 100644 --- a/src/test/ref/unroll-loop-modifyvar.log +++ b/src/test/ref/unroll-loop-modifyvar.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::a#0 ← (number) 3 + (byte) main::a#0 ← (byte) 3 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::a#2 ← phi( main/(byte) main::a#0 main::@1/(byte) main::a#1 ) @@ -46,16 +46,11 @@ SYMBOL TABLE SSA (byte) main::a#2 (byte) main::a#3 -Adding number conversion cast (unumber) 3 in (byte) main::a#0 ← (number) 3 Adding number conversion cast (unumber) $e in (bool~) main::$0 ← (byte) main::a#1 < (number) $e Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::a#0 ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast $e Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $e Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::a#1 = (byte) main::a#3 diff --git a/src/test/ref/unroll-screenfill-while.log b/src/test/ref/unroll-screenfill-while.log index 51300d649..3cfc022ae 100644 --- a/src/test/ref/unroll-screenfill-while.log +++ b/src/test/ref/unroll-screenfill-while.log @@ -14,7 +14,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::x#5 ← phi( main/(byte) main::x#0 main::@4/(byte) main::x#1 ) - (byte) main::line#0 ← (number) 0 + (byte) main::line#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte) main::x#4 ← phi( main::@1/(byte) main::x#5 main::@3/(byte) main::x#2 ) @@ -75,19 +75,14 @@ SYMBOL TABLE SSA (byte) main::x#4 (byte) main::x#5 -Adding number conversion cast (unumber) 0 in (byte) main::line#0 ← (number) 0 Adding number conversion cast (unumber) $19 in (bool~) main::$0 ← (byte) main::line#2 != (number) $19 Adding number conversion cast (unumber) $28 in (number~) main::$1 ← (byte) main::line#3 * (number) $28 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::line#3 * (unumber)(number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::line#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/unroll-while-min.log b/src/test/ref/unroll-while-min.log index ea14b80e4..125f42018 100644 --- a/src/test/ref/unroll-while-min.log +++ b/src/test/ref/unroll-while-min.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -49,16 +49,11 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (bool~) main::$0 ← (byte) main::i#2 < (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/unused-vars.log b/src/test/ref/unused-vars.log index 5b208ba8f..4d2cc1a79 100644 --- a/src/test/ref/unused-vars.log +++ b/src/test/ref/unused-vars.log @@ -9,7 +9,7 @@ Culled Empty Block (label) s::@1 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) b#0 ← (number) 2/(number) 2 + (byte) b#0 ← (byte)(number) 2/(number) 2 to:@2 (void()) main() @@ -103,10 +103,8 @@ SYMBOL TABLE SSA (byte) s::return#2 (byte) s::return#3 -Adding number conversion cast (unumber) 2/2 in (byte) b#0 ← (number) 2/(number) 2 Adding number conversion cast (unumber) 2 in (byte) s::return#1 ← (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) b#0 ← (unumber)(number) 2/(number) 2 Inlining cast (byte) s::return#1 ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 @@ -130,9 +128,7 @@ Identical Phi Values (byte) b#12 (byte) b#3 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) main::$4 [13] if((byte) main::i#1!=rangelast(0,$64)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [0] (byte) b#0 ← (unumber)(number) 2/(number) 2 -Successful SSA optimization Pass2ConstantRValueConsolidation -Constant (const byte) b#0 = (unumber)2/2 +Constant (const byte) b#0 = (byte)2/2 Constant (const byte) main::i#0 = 0 Constant (const byte) s::return#1 = 2 Successful SSA optimization Pass2ConstantIdentification diff --git a/src/test/ref/var-register-noarg.log b/src/test/ref/var-register-noarg.log index 65b8c7287..8cfb3ce4b 100644 --- a/src/test/ref/var-register-noarg.log +++ b/src/test/ref/var-register-noarg.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -52,18 +52,13 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28*4 in (bool~) main::$0 ← (byte) main::i#2 < (number) $28*(number) 4 Adding number conversion cast (unumber) 7 in (number~) main::$1 ← (byte) main::i#3 & (number) 7 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::i#3 & (unumber)(number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$1 ← (byte) main::i#3 & (byte) 7 diff --git a/src/test/ref/var-register-zp-3.log b/src/test/ref/var-register-zp-3.log index b49e1afc7..d6adc661f 100644 --- a/src/test/ref/var-register-zp-3.log +++ b/src/test/ref/var-register-zp-3.log @@ -31,8 +31,8 @@ main::@return: scope:[main] from main::@2 (void()) print2((byte*) print2::at , (byte*) print2::msg) print2: scope:[print2] from main main::@1 - (byte) print2::j#0 ← (number) 0 - (byte) print2::i#0 ← (number) 0 + (byte) print2::j#0 ← (byte) 0 + (byte) print2::i#0 ← (byte) 0 to:print2::@1 print2::@1: scope:[print2] from print2 print2::@7 (byte) print2::j#4 ← phi( print2/(byte) print2::j#0 print2::@7/(byte) print2::j#1 ) @@ -118,25 +118,16 @@ SYMBOL TABLE SSA (const byte*) screen = (byte*)(number) $400 Adding number conversion cast (unumber) $50 in (byte*~) main::$1 ← (const byte*) screen + (number) $50 -Adding number conversion cast (unumber) 0 in (byte) print2::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) print2::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print2::$1 ← (number) 0 != *((byte*) print2::msg + (byte) print2::i#2) Adding number conversion cast (unumber) 2 in (byte) print2::j#1 ← (byte) print2::j#3 + (number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) print2::j#0 ← (unumber)(number) 0 -Inlining cast (byte) print2::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $50 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias candidate removed (volatile)(byte*) print2::at = (byte*~) main::$1 diff --git a/src/test/ref/var-register-zp.cfg b/src/test/ref/var-register-zp.cfg index 1efe2a87d..35d131079 100644 --- a/src/test/ref/var-register-zp.cfg +++ b/src/test/ref/var-register-zp.cfg @@ -11,7 +11,7 @@ (void()) main() main: scope:[main] from @1 [4] (byte) main::i ← (byte) 0 - [5] (signed word) main::j ← (signed byte) 0 + [5] (signed word) main::j ← (signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 [6] if((byte) main::i<(byte) 4) goto main::@2 diff --git a/src/test/ref/var-register-zp.log b/src/test/ref/var-register-zp.log index f8faf11e9..37069ab79 100644 --- a/src/test/ref/var-register-zp.log +++ b/src/test/ref/var-register-zp.log @@ -12,8 +12,8 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i ← (number) 0 - (signed word) main::j ← (number) 0 + (byte) main::i ← (byte) 0 + (signed word) main::j ← (signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (bool~) main::$0 ← (byte) main::i < (number) 4 @@ -62,24 +62,16 @@ SYMBOL TABLE SSA (signed word) main::k (signed word) main::k#0 -Adding number conversion cast (unumber) 0 in (byte) main::i ← (number) 0 -Adding number conversion cast (snumber) 0 in (signed word) main::j ← (number) 0 Adding number conversion cast (unumber) 4 in (bool~) main::$0 ← (byte) main::i < (number) 4 Adding number conversion cast (snumber) 2 in (number~) main::$2 ← (signed word~) main::$1 * (number) 2 Adding number conversion cast (snumber) main::$2 in (number~) main::$2 ← (signed word~) main::$1 * (snumber)(number) 2 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i ← (unumber)(number) 0 -Inlining cast (signed word) main::j ← (snumber)(number) 0 Inlining cast (signed word~) main::$1 ← (signed word)(byte) main::i Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (signed word*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized signed number type (signed byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions @@ -122,7 +114,7 @@ FINAL CONTROL FLOW GRAPH (void()) main() main: scope:[main] from @1 [4] (byte) main::i ← (byte) 0 - [5] (signed word) main::j ← (signed byte) 0 + [5] (signed word) main::j ← (signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 [6] if((byte) main::i<(byte) 4) goto main::@2 @@ -207,7 +199,7 @@ main: { // [4] (byte) main::i ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z i - // [5] (signed word) main::j ← (signed byte) 0 -- vwsz1=vbsc1 + // [5] (signed word) main::j ← (signed word) 0 -- vwsz1=vwsc1 lda #<0 sta.z j lda #>0 @@ -273,7 +265,7 @@ main: { REGISTER UPLIFT POTENTIAL REGISTERS Statement [4] (byte) main::i ← (byte) 0 [ main::i ] ( main:2 [ main::i ] ) always clobbers reg byte a -Statement [5] (signed word) main::j ← (signed byte) 0 [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a +Statement [5] (signed word) main::j ← (signed word) 0 [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a Statement [6] if((byte) main::i<(byte) 4) goto main::@2 [ main::i main::j ] ( main:2 [ main::i main::j ] ) always clobbers reg byte a Statement [8] (byte~) main::$3 ← (byte) main::i << (byte) 1 [ main::j main::$3 ] ( main:2 [ main::j main::$3 ] ) always clobbers reg byte a Statement [9] *((const signed word*) SCREEN + (byte~) main::$3) ← (signed word) main::j [ ] ( main:2 [ ] ) always clobbers reg byte a @@ -330,7 +322,7 @@ main: { // [4] (byte) main::i ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z i - // [5] (signed word) main::j ← (signed byte) 0 -- vwsz1=vbsc1 + // [5] (signed word) main::j ← (signed word) 0 -- vwsz1=vwsc1 lda #<0 sta.z j lda #>0 @@ -463,7 +455,7 @@ main: { lda #0 sta.z i // j=0 - // [5] (signed word) main::j ← (signed byte) 0 -- vwsz1=vbsc1 + // [5] (signed word) main::j ← (signed word) 0 -- vwsz1=vwsc1 sta.z j sta.z j+1 // main::@1 diff --git a/src/test/ref/void-parameter.log b/src/test/ref/void-parameter.log index 75a03770e..e4a718899 100644 --- a/src/test/ref/void-parameter.log +++ b/src/test/ref/void-parameter.log @@ -28,7 +28,7 @@ main::@return: scope:[main] from main::@3 return to:@return @1: scope:[] from @begin - (byte) idx#4 ← (number) 0 + (byte) idx#4 ← (byte) 0 to:@2 (void()) print() @@ -85,15 +85,8 @@ SYMBOL TABLE SSA (void()) print() (label) print::@return -Adding number conversion cast (unumber) 0 in (byte) idx#4 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) idx#4 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) idx#0 = (byte) idx#8 Alias (byte) idx#1 = (byte) idx#9 Alias (byte) idx#10 = (byte) idx#2 (byte) idx#11 (byte) idx#3 diff --git a/src/test/ref/volatile-0.log b/src/test/ref/volatile-0.log index 39c4ac7b0..a166e664c 100644 --- a/src/test/ref/volatile-0.log +++ b/src/test/ref/volatile-0.log @@ -5,7 +5,7 @@ Culled Empty Block (label) main::@6 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) i ← (number) 3 + (byte) i ← (byte) 3 to:@1 (void()) main() @@ -42,16 +42,11 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 3 in (byte) i ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) i < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) i ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) i<(byte) 7) goto main::@2 diff --git a/src/test/ref/volatile-1.log b/src/test/ref/volatile-1.log index a257a2dda..33aeb390d 100644 --- a/src/test/ref/volatile-1.log +++ b/src/test/ref/volatile-1.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::i ← (number) 3 + (byte) main::i ← (byte) 3 to:main::@1 main::@1: scope:[main] from main main::@2 (bool~) main::$0 ← (byte) main::i < (number) 7 @@ -42,16 +42,11 @@ SYMBOL TABLE SSA (label) main::@return (byte) main::i loadstore -Adding number conversion cast (unumber) 3 in (byte) main::i ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) main::i < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [2] if((byte) main::i<(byte) 7) goto main::@2 diff --git a/src/test/ref/volatile-2.log b/src/test/ref/volatile-2.log index d8f2d8344..1ee7be4aa 100644 --- a/src/test/ref/volatile-2.log +++ b/src/test/ref/volatile-2.log @@ -5,12 +5,12 @@ Culled Empty Block (label) main::@6 CONTROL FLOW GRAPH SSA @begin: scope:[] from - (byte) ch ← (number) 3 + (byte) ch ← (byte) 3 to:@1 (void()) main() main: scope:[main] from @1 - (byte) main::i#0 ← (number) 3 + (byte) main::i#0 ← (byte) 3 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -50,20 +50,11 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 3 in (byte) ch ← (number) 3 -Adding number conversion cast (unumber) 3 in (byte) main::i#0 ← (number) 3 Adding number conversion cast (unumber) 7 in (bool~) main::$0 ← (byte) main::i#2 < (number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) ch ← (unumber)(number) 3 -Inlining cast (byte) main::i#0 ← (unumber)(number) 3 -Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 3 -Simplifying constant integer cast 3 Simplifying constant integer cast 7 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index 25bd20d21..541ee9faa 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -177,9 +177,9 @@ render::@return: scope:[render] from render::@3 findcol: scope:[findcol] from render::@2 (byte) findcol::y#10 ← phi( render::@2/(byte) findcol::y#0 ) (byte) findcol::x#7 ← phi( render::@2/(byte) findcol::x#0 ) - (byte) findcol::mindiff#0 ← (number) $ff - (byte) findcol::mincol#0 ← (number) 0 - (byte) findcol::i#0 ← (number) 0 + (byte) findcol::mindiff#0 ← (byte) $ff + (byte) findcol::mincol#0 ← (byte) 0 + (byte) findcol::i#0 ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@10 (byte) findcol::mindiff#11 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@10/(byte) findcol::mindiff#12 ) @@ -335,11 +335,11 @@ SYMBOL TABLE SSA (label) @begin (label) @end (const byte*) COLORS = (byte*)(number) $d800 -(const byte*) COLS[] = { (byte)(number) 1, (byte)(number) 2, (byte)(number) 3, (byte)(number) 4, (byte)(number) 5, (byte)(number) 7 } +(const byte*) COLS[] = { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } (const byte) FILL = (byte) $e6 (const byte*) SCREEN = (byte*)(number) $400 -(const byte*) XPOS[] = { (byte)(number) 5, (byte)(number) $f, (byte)(number) 6, (byte)(number) $22, (byte)(number) $15, (byte)(number) $1f } -(const byte*) YPOS[] = { (byte)(number) 5, (byte)(number) 8, (byte)(number) $e, (byte)(number) 2, (byte)(number) $11, (byte)(number) $16 } +(const byte*) XPOS[] = { (byte) 5, (byte) $f, (byte) 6, (byte) $22, (byte) $15, (byte) $1f } +(const byte*) YPOS[] = { (byte) 5, (byte) 8, (byte) $e, (byte) 2, (byte) $11, (byte) $16 } (void()) animate() (number~) animate::$0 (bool~) animate::$1 @@ -611,9 +611,6 @@ Adding number conversion cast (unumber) 3 in (unumber~) animate::$18 ← *((cons Adding number conversion cast (unumber) 3 in *((const byte*) XPOS + (number) 3) ← (unumber~) animate::$18 Adding number conversion cast (unumber) $3e8 in (byte*~) initscreen::$0 ← (const byte*) SCREEN + (number) $3e8 Adding number conversion cast (unumber) $28 in (byte*~) render::$2 ← (byte*) render::colline#3 + (number) $28 -Adding number conversion cast (unumber) $ff in (byte) findcol::mindiff#0 ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) findcol::mincol#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) findcol::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) findcol::return#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast *((const byte*) XPOS + (unumber)(number) 0) ← (unumber)(number) 0 @@ -621,29 +618,8 @@ Inlining cast *((const byte*) YPOS + (unumber)(number) 0) ← (unumber)(number) Inlining cast *((const byte*) XPOS + (unumber)(number) 1) ← (unumber)(number) $28 Inlining cast *((const byte*) YPOS + (unumber)(number) 2) ← (unumber)(number) 0 Inlining cast *((const byte*) YPOS + (unumber)(number) 3) ← (unumber)(number) $19 -Inlining cast (byte) findcol::mindiff#0 ← (unumber)(number) $ff -Inlining cast (byte) findcol::mincol#0 ← (unumber)(number) 0 -Inlining cast (byte) findcol::i#0 ← (unumber)(number) 0 Inlining cast (byte) findcol::return#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 5 -Simplifying constant integer cast $f -Simplifying constant integer cast 6 -Simplifying constant integer cast $22 -Simplifying constant integer cast $15 -Simplifying constant integer cast $1f -Simplifying constant integer cast 5 -Simplifying constant integer cast 8 -Simplifying constant integer cast $e -Simplifying constant integer cast 2 -Simplifying constant integer cast $11 -Simplifying constant integer cast $16 -Simplifying constant integer cast 1 -Simplifying constant integer cast 2 -Simplifying constant integer cast 3 -Simplifying constant integer cast 4 -Simplifying constant integer cast 5 -Simplifying constant integer cast 7 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 Simplifying constant integer cast 0 @@ -691,9 +667,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast 3 Simplifying constant integer cast $3e8 Simplifying constant integer cast $28 -Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 @@ -741,9 +714,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 3 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) animate::$0 ← *((const byte*) XPOS + (byte) 0) + (byte) 1 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index b5218a080..3379c38e2 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -103,7 +103,7 @@ SYMBOL TABLE SSA (label) @41 (label) @begin (label) @end -(const byte) MAX_OBJECTS = (number) $10 +(const byte) MAX_OBJECTS = (byte) $10 (const word*) OBJ_WORLD_X[(const byte) MAX_OBJECTS] = { fill( MAX_OBJECTS, 0) } (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -470,7 +470,7 @@ FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end -(const byte) MAX_OBJECTS = (number) $10 +(const byte) MAX_OBJECTS = (byte) $10 (const word*) OBJ_WORLD_X[(const byte) MAX_OBJECTS] = { fill( MAX_OBJECTS, 0) } (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/wfragment1.sym b/src/test/ref/wfragment1.sym index 8d8d9905e..34d234106 100644 --- a/src/test/ref/wfragment1.sym +++ b/src/test/ref/wfragment1.sym @@ -1,7 +1,7 @@ (label) @1 (label) @begin (label) @end -(const byte) MAX_OBJECTS = (number) $10 +(const byte) MAX_OBJECTS = (byte) $10 (const word*) OBJ_WORLD_X[(const byte) MAX_OBJECTS] = { fill( MAX_OBJECTS, 0) } (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/word-array-1.log b/src/test/ref/word-array-1.log index ba653b386..1cf07e0b1 100644 --- a/src/test/ref/word-array-1.log +++ b/src/test/ref/word-array-1.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -62,21 +62,10 @@ SYMBOL TABLE SSA (byte) main::idx#4 (word) main::w (word) main::w#0 -(const word*) main::words[] = { (word)(number) $3031, (word)(number) $3233, (word)(number) $3435, (word)(number) $3637 } +(const word*) main::words[] = { (word) $3031, (word) $3233, (word) $3435, (word) $3637 } -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $3031 -Simplifying constant integer cast $3233 -Simplifying constant integer cast $3435 -Simplifying constant integer cast $3637 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$2 [14] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::idx#0 = 0 diff --git a/src/test/ref/word-pointer-compound.log b/src/test/ref/word-pointer-compound.log index 8250bb1b5..6cf88f332 100644 --- a/src/test/ref/word-pointer-compound.log +++ b/src/test/ref/word-pointer-compound.log @@ -82,7 +82,7 @@ SYMBOL TABLE SSA (byte) main::i#0 (byte) main::i#1 (byte) main::i#2 -(const word*) main::words[] = { (word)(number) $3031, (word)(number) $3233, (word)(number) $3435 } +(const word*) main::words[] = { (word) $3031, (word) $3233, (word) $3435 } Adding number conversion cast (unumber) $101 in *((const word*) main::words + (byte~) main::$7) ← *((const word*) main::words + (byte~) main::$7) + (number) $101 Adding number conversion cast (unumber) 0 in (number~) main::$8 ← (number) 0 * (const byte) SIZEOF_WORD @@ -104,9 +104,6 @@ Adding number conversion cast (unumber) 2 in (number~) main::$13 ← (number) 2 Adding number conversion cast (unumber) main::$13 in (number~) main::$13 ← (unumber)(number) 2 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) 5 in *((const byte*) main::SCREEN + (number) 5) ← (byte~) main::$5 Successful SSA optimization PassNAddNumberTypeConversions -Simplifying constant integer cast $3031 -Simplifying constant integer cast $3233 -Simplifying constant integer cast $3435 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $101 Simplifying constant integer cast 0 diff --git a/src/test/ref/word-pointer-iteration.log b/src/test/ref/word-pointer-iteration.log index b1cdf853a..74a7bd9c7 100644 --- a/src/test/ref/word-pointer-iteration.log +++ b/src/test/ref/word-pointer-iteration.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (word*) main::wp#0 ← (const word*) main::words (byte) main::i#0 ← (byte) 0 to:main::@1 @@ -63,25 +63,14 @@ SYMBOL TABLE SSA (byte) main::idx#4 (word) main::w (word) main::w#0 -(const word*) main::words[] = { (word)(number) $3130, (word)(number) $3332, (word)(number) $3534, (word)(number) $3736 } +(const word*) main::words[] = { (word) $3130, (word) $3332, (word) $3534, (word) $3736 } (word*) main::wp (word*) main::wp#0 (word*) main::wp#1 (word*) main::wp#2 -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $3130 -Simplifying constant integer cast $3332 -Simplifying constant integer cast $3534 -Simplifying constant integer cast $3736 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$2 [15] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::idx#0 = 0 diff --git a/src/test/ref/word-pointer-math.log b/src/test/ref/word-pointer-math.log index da7c9479a..4891c79d2 100644 --- a/src/test/ref/word-pointer-math.log +++ b/src/test/ref/word-pointer-math.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (byte) main::idx#0 ← (number) 0 + (byte) main::idx#0 ← (byte) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -64,21 +64,10 @@ SYMBOL TABLE SSA (byte) main::idx#4 (word) main::w (word) main::w#0 -(const word*) main::words[] = { (word)(number) $3130, (word)(number) $3332, (word)(number) $3534, (word)(number) $3736 } +(const word*) main::words[] = { (word) $3130, (word) $3332, (word) $3534, (word) $3736 } -Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast $3130 -Simplifying constant integer cast $3332 -Simplifying constant integer cast $3534 -Simplifying constant integer cast $3736 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$3 [15] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::idx#0 = 0 diff --git a/src/test/ref/wordexpr.cfg b/src/test/ref/wordexpr.cfg index 995307da9..f0212a7dc 100644 --- a/src/test/ref/wordexpr.cfg +++ b/src/test/ref/wordexpr.cfg @@ -14,7 +14,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) - [5] (word) main::b#2 ← phi( main/(byte) 0 main::@1/(word) main::b#1 ) + [5] (word) main::b#2 ← phi( main/(word) 0 main::@1/(word) main::b#1 ) [6] (word) main::b#1 ← (word) main::b#2 + (word)(number) $28*(number) 8 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [8] if((byte) main::i#1!=(byte) $b) goto main::@1 diff --git a/src/test/ref/wordexpr.log b/src/test/ref/wordexpr.log index 3ffc3a944..ed68d3eb2 100644 --- a/src/test/ref/wordexpr.log +++ b/src/test/ref/wordexpr.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (void()) main() main: scope:[main] from @1 - (word) main::b#0 ← (number) 0 + (word) main::b#0 ← (word) 0 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 @@ -47,16 +47,9 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (word) main::b#0 ← (number) 0 Adding number conversion cast (unumber) $28*8 in (number~) main::$0 ← (word) main::b#2 + (number) $28*(number) 8 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (word) main::b#2 + (unumber)(number) $28*(number) 8 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (word) main::b#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to word in (unumber~) main::$0 ← (word) main::b#2 + (word)(number) $28*(number) 8 Alias (word) main::b#1 = (word~) main::$0 Successful SSA optimization Pass2AliasElimination @@ -76,7 +69,7 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions Inlining constant with var siblings (const word) main::b#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte) 0 -Constant inlined main::b#0 = (byte) 0 +Constant inlined main::b#0 = (word) 0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) Adding NOP phi() at start of @begin @@ -115,7 +108,7 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) - [5] (word) main::b#2 ← phi( main/(byte) 0 main::@1/(word) main::b#1 ) + [5] (word) main::b#2 ← phi( main/(word) 0 main::@1/(word) main::b#1 ) [6] (word) main::b#1 ← (word) main::b#2 + (word)(number) $28*(number) 8 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [8] if((byte) main::i#1!=(byte) $b) goto main::@1 @@ -177,7 +170,7 @@ main: { // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i - // [5] phi (word) main::b#2 = (byte) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [5] phi (word) main::b#2 = (word) 0 [phi:main->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z b lda #>0 @@ -257,7 +250,7 @@ main: { __b1_from_main: // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (word) main::b#2 = (byte) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [5] phi (word) main::b#2 = (word) 0 [phi:main->main::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z b lda #>0 @@ -361,7 +354,7 @@ main: { // [5] phi from main to main::@1 [phi:main->main::@1] // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 ldx #0 - // [5] phi (word) main::b#2 = (byte) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1 + // [5] phi (word) main::b#2 = (word) 0 [phi:main->main::@1#1] -- vwuz1=vwuc1 txa sta.z b sta.z b+1 diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index f4fe066b1..3b9b5b990 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -107,7 +107,7 @@ SYMBOL TABLE SSA (const byte*) SPRITES_ENABLE = (byte*)(number) $d015 (const byte*) SPRITES_XPOS = (byte*)(number) $d000 (const byte*) SPRITES_YPOS = (byte*)(number) $d001 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) ZP_STORAGE[(number) $100] = { fill( $100, 0) } (void()) animSprite() (label) animSprite::@return @@ -694,7 +694,7 @@ FINAL SYMBOL TABLE (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) ZP_STORAGE[(number) $100] = { fill( $100, 0) } (void()) animSprite() (label) animSprite::@return diff --git a/src/test/ref/zeropage-sinus.sym b/src/test/ref/zeropage-sinus.sym index 0b6171d5c..85b66d8ec 100644 --- a/src/test/ref/zeropage-sinus.sym +++ b/src/test/ref/zeropage-sinus.sym @@ -9,7 +9,7 @@ (const byte*) SPRITES_ENABLE = (byte*) 53269 (const byte*) SPRITES_XPOS = (byte*) 53248 (const byte*) SPRITES_YPOS = (byte*) 53249 -(const word) SPRITE_PTRS = (number) $3f8 +(const word) SPRITE_PTRS = (word) $3f8 (const byte*) ZP_STORAGE[(number) $100] = { fill( $100, 0) } (void()) animSprite() (label) animSprite::@return